2010-11-10 14 views
11

¿Alguien ha intentado escribir su propia implementación de ViewGroup con algunas TextViews en ella?TextView gravedad

Tengo un problema, que TextViews en una implementación así no respeta la propiedad de gravedad TextView.setGravity(Gravity.CENTER) y el texto se coloca en la esquina superior izquierda.

¿Alguien me puede ayudar a descubrir por qué?

EDIT:

Ok. sin embargo, ya lo descubrí por mi cuenta.

Si enyone está interesado, método que se acaba sobreescribí onMeasure() (para todos mis TextViews) y cambió de llamada de super.onMeasure() a setMeasuredDimension(int, int) y la gravedad comenzó a funcionar con normalidad.

Básicamente, en mi diseño personalizado utilizo la siguiente clase para mostrar texto:

private static class GravityTextView extends TextView { 

    public GravityTextView(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); 
    } 

} 
+0

Genial, gracias por compartir! –

+0

¡Gracias por compartir! Una nota, también tuve que llamar a measure desde onLayout en los TextViews. Sobrescribir onMeasure como arriba y llamar a medida. –

+0

intenta establecer la gravedad del diseño lineal/relativo –

Respuesta

3

Este no es el mal comportamiento que sólo está tratando de establecer la propiedad equivocada.

Con TextView.setGravity(Gravity.CENTER) está configurando la gravedad del contenido de TextView.

Lo que usted está buscando es el layout_gravity.

+0

Esto es exactamente lo que intento hacer. Si, por ejemplo, mi TextView está en una ubicación aleatoria en mi Diseño personalizado, y ocupa 200px de espacio, y el texto dentro de él solo 50px, quiero que ese texto esté alineado en el centro de ese TextView (entonces TextView lo hará aún así mantener su espacio de 200px, pero el texto estará en el centro, por lo que es de 75px margándose entre los bordes de TextView y el texto real). –