2012-07-05 12 views
6

Ho una personalizzazione ViewGroup con alcune viste all'interno.force onLayout in una subView le cui dimensioni non cambiano

In risposta a un evento, viene chiamato un requestLayout e in OnLayout alcune delle viste avranno una nuova posizione di layout.

Uno di questi mantiene la sua posizione ma deve essere riorganizzato all'interno. Tuttavia, il metodo onlayout di questa vista non verrà chiamato poiché la sua posizione di layout non cambia. Cercando di chiamare requestLayout, forceLayout o invalidate in questa visualizzazione non funziona.

L'unico trucco sporco che ho trovato è di modificare parte della sua posizione di valore per forzare la modifica del layout, ma penso che ci dovrebbe essere un modo migliore. Quindi, ora faccio qualcosa (orribile) come:

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; 
     ... 
    }  

Un modo per ottenere lo stesso risultato in un modo migliore?

risposta

4

finalmente ho la soluzione: ho bisogno di ignorare onMeasure ed essere sicuri di chiamare mesure a mio avviso:

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

Sarà impostare il flag LAYOUT_REQUIRED in mPrivateFlags campo private della vista in modo che costringerà a chiamare onLayout

Problemi correlati