Como definir o android: gravidade para TextView do lado do Java no Android


219

Posso usar o android:gravity="bottom|center_horizontal"xml em uma visualização de texto para obter os resultados desejados, mas preciso fazer isso programaticamente. Minha visualização de texto está dentro de a tablerowse isso importa em a relativelayout.

Eu tentei:

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

Mas se eu entendi direito, isso seria aplicado ao tablerow, não ao textview?

Respostas:


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

Versão Kotlin (graças a Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Além disso, você está falando sobre gravidade ou sobre layout_gravity? O último não funcionará em um RelativeLayout .


Obrigado que funcionou. Agora me sinto meio boba por sentir falta disso. Originalmente, o problema era definir as margens em um campo de texto. Acho que assumi porque não consegui encontrar um método setMargin () que setGravity também não existisse.
Nate

7
Graças a +1, encontrei a documentação, mas, como de costume, ela fica apenas na metade do caminho, não indicando claramente de onde obtenho as constantes de gravidade (Gravity.CENTER etc.).
Hein du Plessis

1
Para quem vem do Google, como eu, o jeito Kotlin é:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Para mim, o caminho kotlin é confuso, por que é ore não and?! ??!
ZooMagic 17/01

38

Isso centralizará o texto em uma exibição de texto:

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

5
Isso não deu certo. "lp.gravity não pode ser resolvido ou não é um campo"
Nate

Isso é estranho, porque esse código funciona e compila muito bem para mim. Como você definiria o peso de uma visualização de texto, pois o método is no setWeight ()?
radiofrequência

4
Eu encontrei o problema Nate está importando android.view.ViewGroup. Essa classe tem diferentes tipos de métodos e não compila. Você deve importar android.view.WindowManager.
precisa saber é o seguinte

Deve importar melhor android.widget.LinearLayout.LayoutParams quando a exibição de texto estiver dentro do layout linear. Othervise você começa ClassCastException
tomm

Obrigado, funciona. Mas não é uma solução completa porque um tipo de LayoutParamsnão é definido aqui e pode variar, portanto não será compilado. Você deve conhecer um layout pai (por exemplo LinearLayout) e escrevê-lo aqui.
CoolMind 17/10/16

7

Podemos definir a gravidade do layout em qualquer visualização, como abaixo:

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

Isso é igual ao código xml abaixo

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

Disposição gravidade não é a mesma gravidade
Zvonimir Peran

3

Você deveria usar textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Lembre-se que usando

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

não vai funcionar. Isso definirá a gravidade do widget e não do texto.


2

Use este código

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

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

Isso definirá a gravidade da sua visualização de texto.


0

Resolvi isso fazendo algumas coisas, primeiro obtendo o heightmeu TextViewe mergulhando no texto sizepara obter a quantidade total de linhas possível com o TextView.

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

Depois de obter esse valor, você precisa definir seu TextView maxLinesvalor para esse novo valor.

TextView.setMaxLines(maxLines);

Defina Gravitycomo Bottomassim que a quantidade máxima de linhas for excedida e ela rolará para baixo automaticamente.

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

Para que isso funcione corretamente, você deve usar append()o comando TextViewSe você setText()não funcionar.

TextView.append("Your Text");

O benefício desse método é que ele pode ser usado dinamicamente, independentemente heightdo seu TextViewe do texto size. Se você decidir fazer modificações no seu layout, esse código ainda funcionará.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.