2012-04-14 17 views
6

Estoy atascado en un problema y no sé, lo que lo causa. Tengo un diseño muy simple como esto:TextView setGravity() no funciona en java

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/my_text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="NOTE_THIS" 
    android:textColor="#FFFFFF" 
    android:textSize="22dp" 
    android:text="TestText"/> 
</LinearLayout> 

que se incluye dentro de otro diseño. Si cambio la gravedad dentro del xml, veo el mismo resultado en Layout-Editor y en mi teléfono. Si quiero aplicar Gravity programáticamente como con myTextView.setGravity(Gravity.CENTER), no cambia nada. Y no puedo configurar LayoutGravity en Java en un TextView

Voy a intentar con fines de depuración para incluirlos tres veces cada uno con otra gravedad que funciona incluso. Así que supongo que todo está bien con mi diseño y tiene que haber un error o algo más que extraño. ¿Puede alguien darme una pista de lo que también puedo probar, o qué causa este problema?

Respuesta

24

establecer el ancho de su TextView como android:layout_width="fill_parent" entonces se puede establecer mediante programación utilizando myTextView.setGravity(Gravity.CENTER)

+0

¿cómo puedo obtener el intrinsicWidth de TextView después de darle "fill_parent", porque getWidth me da el ancho de LienearLayout padre –

+0

¿por qué lo necesitas? para configurar la gravedad solamente? – waqaslam

+0

porque no está configurando solo la gravedad, pero rezising el texto, que funciona si obtengo el ancho correcto de él –

1

Cuando se utiliza LinearLayout como padre, entonces layout_gravity viene en la imagen que se alinean de control, pero no el contenido dentro del control por lo que, en lugar de utilizar android:layout_gravity uso android:gravity.

+0

Ah lo siento, fue mi culpa ... Quiero establecer LayoutGravity porque Gravity no hace nada ... actualicé mi pregunta –

5

Es necesario establecer la gravedad de los LayoutParams objeto en lugar de la propia Vista:

TextView tv = new TextView(getApplicationContext()); 
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); 
lp.gravity = Gravity.CENTER; 
tv.setLayoutParams(lp); 
Cuestiones relacionadas