Jak ustawić Androida: grawitacja na TextView od strony Java w Androidzie


219

Mogę użyć android:gravity="bottom|center_horizontal"w xml w widoku tekstu, aby uzyskać pożądane wyniki, ale muszę to zrobić programowo. Mój tekst jest w środku, tablerowjeśli to ma znaczenie relativelayout.

Próbowałem:

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

Ale jeśli dobrze rozumiem, to zastosuje to do tablerowwidoku tekstu, a nie do widoku?

Odpowiedzi:


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

Wersja Kotlin (dzięki Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Mówisz też o grawitacji czy o rozkładzie grawitacji ? Ten ostatni nie będzie działał w RelativeLayout .


Dzięki, że zadziałało. Czuję się teraz trochę głupio, że tego przegapiłem. Pierwotnie problemem było ustawienie marginesów w polu tekstowym. Wydaje mi się, że założyłem, ponieważ nie mogłem znaleźć metody setMargin (), która również nie istniałaby.
Nate

7
Dzięki +1 znalazłem dokumentację, ale jak zwykle idzie ona tylko do połowy, nie określając wyraźnie, skąd biorę stałe grawitacyjne (Gravity.CENTER itp.).
Hein du Plessis

1
Dla każdego, kto przychodzi tutaj z Google, jak ja, Kotlin to:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Dla mnie sposób kotlin jest mylący, dlaczego tak jest ori nie and?! ??!
ZooMagic

38

Spowoduje to wyśrodkowanie tekstu w widoku tekstowym:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);

5
To nie zadziałało. „lp. grawitacji nie można rozwiązać lub nie jest polem”
Nate

To dziwne, ponieważ ten kod działa i kompiluje się dobrze dla mnie. Jak ustawić wagę widoku tekstu, ponieważ nie jest to metoda setWeight ()?
częstotliwość

4
Znalazłem problem. Nate importuje android.view.ViewGroup. Ta klasa ma różne rodzaje metod i się nie kompiluje. Zamiast tego należy zaimportować android.view.WindowManager.
Finnboy11

Powinien lepiej importować android.widget.LinearLayout.LayoutParams, gdy widok tekstu znajduje się w układzie liniowym. W przeciwnym razie otrzymasz ClassCastException
tomm

Dzięki, działa. Ale nie jest to kompletne rozwiązanie, ponieważ typ LayoutParamsnie jest tutaj zdefiniowany i może się różnić, więc nie będzie się kompilował. Powinieneś znać układ rodzica (na przykład LinearLayout) i napisać go tutaj.
CoolMind 17.10.16

7

Możemy ustawić grawitację układu w dowolnym widoku, np. Poniżej-

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

Jest to równoważne z poniższym kodem XML

<...
 android:gravity="center_vertical|right"
 ...
 .../>

Grawitacja układu nie jest tym samym, co grawitacja
Zvonimir Peran

3

Powinieneś użyć textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Pamiętaj, że za pomocą

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

nie zadziała. Spowoduje to ustawienie grawitacji widżetu, a nie tekstu.


2

Użyj tego kodu

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");

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

Spowoduje to ustawienie grawitacji widoku tekstu.


0

Rozwiązano to, wykonując kilka czynności, najpierw zdobywając heightmój TextViewi nurkując go po tekście, sizeaby uzyskać całkowitą liczbę linii możliwych z TextView.

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

Po uzyskaniu tej wartości musisz ustawić ją TextView maxLinesna tę nową wartość.

TextView.setMaxLines(maxLines);

Ustaw Gravityna Bottomraz została przekroczona maksymalna ilość linii i będzie przewijać automatycznie.

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

Aby to działało poprawnie, musisz użyć append()opcji TextView, jeśli setText()to nie zadziała.

TextView.append("Your Text");

Zaletą tej metody jest to, że można jej używać dynamicznie, niezależnie heightod Twojej TextViewi tekstu size. Jeśli zdecydujesz się na modyfikacje układu, kod nadal będzie działał.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.