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?

Nate
fuente

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 .

Maragues
fuente
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);
frecuencia de radio
fuente
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"
 ...
 .../>
Bajrang Hudda
fuente
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.

Irshu
fuente
2

Usa este código

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

Esto establecerá la gravedad de su vista de texto.

DAS
fuente
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.

Román Fernández
fuente