2012-10-24 14 views
5

È necessario recuperare l'altezza di ScrollView definita in un file xml di layout durante l'avvio dell'attività. Qual è la migliore pratica per implementarlo. Ho provato a inserire il codice all'interno di onCreate(), onStart() e onResume(). Tutto dà altezza pari a 0 all'avvio. Esistono metodi come onFinishInflate() per le attività?Lettura delle dimensioni del layout all'avvio dell'applicazione

Ecco il mio codice:

myScroll=(ScrollView) findViewById(R.id.ScrollView01); 
int height=myScroll.getHeight(); 

risposta

6

Si può fare qualcosa di simile:

Ottenere un riferimento finale al vostro ScrollView (per l'accesso in onGlobalLayout() metodo). Quindi, Ottieni ViewTreeObserver da ScrollView e aggiungi un OnGlobalLayoutListener, sovrascrivendo onGLobalLayout e ottieni le misurazioni in questo listener.

final ScrollView myScroll = (ScrollView)findViewById(R.id.my_scroll); 
ViewTreeObserver vto = myScroll.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     LayerDrawable ld = (LayerDrawable)myScroll.getBackground(); 
     height = myScroll.getHeight(); 
     width=myScroll.getHeight(); 
     ViewTreeObserver obs = myScroll.getViewTreeObserver(); 
     obs.removeOnGlobalLayoutListener(this); 
    } 

}); 

vedere più in questa discussione:

How to retrieve the dimensions of a view?

+0

Grazie @Anup. Sta funzionando. Ma 'removeGlobalOnLayoutListener()' è deprecato. eventuali alternative ?? – JiTHiN

+0

scusa ho usato il vecchio metodo. Codice aggiornato –

+0

grazie ancora ... – JiTHiN

1

È necessario interrogare vista limiti dopo è stato eseguito il layout. Il posto consigliato è onWindowFocusChanged(boolean). Vedere questa domanda per ulteriori informazioni: How to get the absolute coordinates of a view

Inoltre, se si ha il coraggio di estendere la classe di layout, ad es. fare una sottoclasse di LinearLayout ecc, è possibile ignorare che è onLayout() in questo modo:

@Override 
public void onLayout(boolean changed, int l, int t, int r, int b) { 
    super.onLayout(changed, l, t, r, b); 

    myScroll=(ScrollView) findViewById(R.id.ScrollView01); 
    int height=myScroll.getHeight(); 
} 
Problemi correlati