Cómo configurar Android: gravedad en TextView desde el lado de Java en Android


219

Puedo usar android:gravity="bottom|center_horizontal"xml en una vista de texto para obtener los resultados deseados, pero necesito hacerlo mediante programación. Mi vista de texto está dentro de un tablerowsi eso importa en a relativelayout.

Yo he tratado:

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

Pero si entiendo correctamente, ¿eso se aplicaría a la vista de texto tablerow, no?

Respuestas:


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

Versión de Kotlin (gracias a Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

Además, ¿estás hablando de gravedad o de layout_gravity? Este último no funcionará en un RelativeLayout .


Gracias que funcionó. Me siento un poco tonto ahora por perder eso. Originalmente, el problema era establecer los márgenes en un campo de texto. Supongo que asumí porque no pude encontrar un método setMargin () que setGravity tampoco existiría.
Nate

77
Gracias +1, encontré la documentación, pero como de costumbre solo va a la mitad, no indicando claramente de dónde obtengo las constantes de gravedad (Gravity.CENTER, etc.).
Hein du Plessis

1
Para cualquiera que venga de Google, como yo, la forma de Kotlin es:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

Para mí, el camino de Kotlin es confuso, ¿por qué lo es ory no and?
ZooMagic

38

Esto centrará el texto en una vista de texto:

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

55
Eso no funcionó. "lp.gravity no se puede resolver o no es un campo"
Nate

Eso es extraño porque este código funciona y se compila muy bien para mí. ¿Cómo establecería el peso de una vista de texto ya que no es un método setWeight ()?
radiofrecuencia

44
Encontré el problema. Nate está importando android.view.ViewGroup. Esa clase tiene diferentes tipos de métodos y no se compila. En su lugar, debe importar android.view.WindowManager.
Finnboy11

Debería importar mejor android.widget.LinearLayout.LayoutParams cuando la vista de texto está dentro del diseño lineal. De lo contrario, obtienes ClassCastException
tomm

Gracias funciona. Pero no es una solución completa porque un tipo de LayoutParamsno está definido aquí y puede variar, por lo que no se compilará. Debe conocer un diseño principal (por ejemplo LinearLayout) y escribirlo aquí.
CoolMind

7

Podemos establecer la gravedad del diseño en cualquier vista, como a continuación:

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

Esto es equivalente al siguiente código xml

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

La gravedad del diseño no es lo mismo que la gravedad
Zvonimir Peran

3

Debe utilizar textView.setGravity(Gravity.CENTER_HORIZONTAL);.

Recuerda que usando

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

no funciona Esto establecerá la gravedad para el widget y no para su texto.


2

Usa 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);

Esto establecerá la gravedad de su vista de texto.


0

Resolví esto haciendo algunas cosas, primero obteniendo el heightde my TextViewy sumergiéndolo en el texto sizepara obtener la cantidad total de líneas posibles con el TextView.

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

Después de obtener este valor, debe establecerlo TextView maxLinesen este nuevo valor.

TextView.setMaxLines(maxLines);

Ajuste el Gravityque Bottomuna vez que se ha superado la cantidad máxima de líneas y se desplazará hacia abajo automáticamente.

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

Para que esto funcione correctamente, debe utilizar append()el TextView, si setText()no funcionará.

TextView.append("Your Text");

El beneficio de este método es que se puede usar dinámicamente independientemente heightde tu TextViewy el texto size. Si decide realizar modificaciones en su diseño, este código seguirá funcionando.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.