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?

Nate
fonte

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 .

Maragues
fonte
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);
frequência de rádio
fonte
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"
 ...
 .../>
Bajrang Hudda
fonte
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.

Irshu
fonte
2

Use este código

        TextView textView = new TextView(YourActivity.this);
        textView.setGravity(Gravity.CENTER | Gravity.TOP);
        textView.setText("some text");
Faxriddin Abdullayev
fonte
2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

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

DAS
fonte
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á.

Roman Fernandez
fonte