Как установить Android: гравитация в TextView со стороны Java в Android

220

Я могу использовать android:gravity="bottom|center_horizontal"в xml текстовое представление, чтобы получить желаемые результаты, но мне нужно сделать это программно. Мой текстовый вид внутри, tablerowесли это имеет значение в relativelayout.

Я пытался:

LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
labelTV.setLayoutParams(layoutParams);

Но если я правильно понимаю, это применимо к tablerowтексту, а не к тексту?

Nate
источник

Ответы:

524
labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Версия Kotlin (спасибо Томми)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Кроме того, вы говорите о гравитации или о layout_gravity? Последний не будет работать в RelativeLayout .

Maragues
источник
Спасибо, что сработало. Теперь я чувствую себя немного глупо, что пропустил это. Первоначально проблема заключалась в установке полей в текстовом поле. Я предполагаю, что предположил, потому что я не мог найти метод setMargin (), который setGravity не существовал бы также.
Nate
7
Спасибо +1, я нашел документацию, но, как обычно, она идет только наполовину, не ясно указав, откуда я беру константы гравитации (Gravity.CENTER и т. Д.).
Хейн дю Плесси
1
Для любого, кто приходит сюда из Google, как я, путь Котлина:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Томми
Для меня путь kotlin сбивает с толку, почему это, orа не and?! ??!
ZooMagic
38

Это будет центрировать текст в текстовом представлении:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);
радиочастота
источник
5
Это не сработало. «Гравитация не может быть решена или не является полем»
Нейт
Это странно, потому что этот код работает и прекрасно компилируется для меня. Как бы вы установили вес текстового представления, поскольку они не являются методом setWeight ()?
радиочастота
4
Я нашел проблему. Нейт импортирует android.view.ViewGroup. Этот класс имеет различные виды методов и не компилируется. Вместо этого вы должны импортировать android.view.WindowManager.
Finnboy11
Лучше импортировать android.widget.LinearLayout.LayoutParams, когда текстовое представление находится внутри линейного макета. В противном случае вы получите ClassCastException
Tomm
Спасибо, это работает. Но это не полное решение, потому что тип LayoutParamsздесь не определен и может варьироваться, поэтому он не будет компилироваться. Вы должны знать родительский макет (например, LinearLayout) и написать его здесь.
CoolMind
7

Мы можем установить гравитацию макета на любом виде, как показано ниже.

myView = findViewById(R.id.myView);
myView.setGravity(Gravity.CENTER_VERTICAL|Gravity.RIGHT);
 or
myView.setGravity(Gravity.BOTTOM);

Это эквивалентно приведенному ниже XML-коду

<...
 android:gravity="center_vertical|right"
 ...
 .../>
Баджранг Худда
источник
Макет гравитации отличается от гравитации
Звонимир Перан
3

Вы должны использовать textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Помните, что используя

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

не сработает Это установит гравитацию для виджета, а не для его текста.

Irshu
источник
2

Используйте этот код

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");
Факсриддин Абдуллаев
источник
2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Это установит серьезность вашего текстового обзора.

DAS
источник
0

Решил эту проблему, выполнив несколько вещей, сначала получив heightмои TextViewи погрузив их по тексту, sizeчтобы получить общее количество строк, возможных с помощью TextView.

int maxLines = (int) TextView.getHeight() / (int) TextView.getTextSize();

После того, как вы получите это значение, вам нужно установить TextView maxLinesэто новое значение.

TextView.setMaxLines(maxLines);

Установите Gravityна Bottomодин раз максимальное количество линий было превышено , и это будет прокручиваться автоматически.

if (TextView.getLineCount() >= maxLines) {
    TextView.setGravity(Gravity.BOTTOM);
}

Для того , чтобы это работало правильно, вы должны использовать append()в TextView, если setText()это не будет работать.

TextView.append("Your Text");

Преимущество этого метода заключается в том, что его можно использовать динамически, независимо heightот вашего TextViewтекста и текста size. Если вы решите внести изменения в свой макет, этот код все равно будет работать.

Роман Фернандес
источник