Як встановити андроїд: тяжкість до TextView з боку Java в Android


219

Я можу використовувати 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перегляду тексту, а не до тексту?

Відповіді:


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

Версія Котліна (спасибі Томмі)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Крім того, ви говорите про гравітацію чи про макет_гравітації? Останній не працюватиме у відносному макеті .


Спасибі, що спрацювало. Зараз я відчуваю себе трохи нерозумно, бо пропускаю це. Спочатку проблемою було встановлення поля в текстовому полі. Я думаю, я припускав, тому що я не міг знайти метод setMargin (), що setGravity також не буде.
Нейт

7
Дякую +1, я знайшов документацію, але, як завжди, вона проходить лише наполовину, не чітко вказуючи, звідки я беруть константи сили тяжіння (Gravity.CENTER тощо).
Hein du Plessis

1
Для всіх, хто приходить сюди від Google, як я, спосіб it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Томмі

Мені котлін спосіб бентежить, чому це так, 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
Це не спрацювало. "lp.гравітація не може бути вирішена або це не поле"
Нейт

Це дивно, тому що цей код працює і компілює для мене чудово. Як би ви встановили вагу текстового перегляду, оскільки їх метод не є setWeight ()?
радіочастота

4
Я знайшов проблему. Nate імпортує 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;

не буде працювати. Це встановить тяжкість для віджета, а не для його тексту.



2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Це встановить тяжкість вашого перегляду тексту.


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. Якщо ви вирішите внести зміни в ваш макет, цей код все одно буде працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.