2012-07-05 10 views
6

Tengo una Custom ViewGroup con algunas vistas dentro.force on Layout en una subvista cuyas dimensiones no cambian

En respuesta a un evento, se invoca un requestLayout y en OnLayout algunas de las vistas obtienen una nueva posición de disposición.

Uno de ellos mantiene su posición pero necesita reorganizarse en su interior. Sin embargo, no se llamará al método onlayout de esta vista ya que su posición de diseño no cambia. Intentar llamar al requestLayout, forceLayout o invalidate en esta vista no funciona.

El único truco sucio que he encontrado es cambiar parte de su posición de valor para forzar el cambio de diseño, pero creo que debería haber una manera mejor. Entonces, ahora hago algo (horrible) como:

int patch = 0; 
    @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     ... 
     _myView.patchedLayout(patch); 
     _myview.layout(l1, t1 , r1, t1+patch); 
     patch = (patch+1) % 2; 
     ... 
    }  

¿Alguna manera de obtener el mismo resultado de una mejor manera?

Respuesta

4

finalmente conseguí la solución: Necesito anular onMeasure y asegúrese de llamar mesure en mi opinión:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    ... 
    _myview.measure(widthMeasureSpec, heightMeasureSpec); 
    ... 

Se establecerá el indicador LAYOUT_REQUIRED en mPrivateFlags campo privado de la vista por lo que obligará a llamar onLayout

Cuestiones relacionadas