2012-10-24 14 views
5

Potrzebuję pobrać wysokość ScrollView zdefiniowaną w pliku xml układu podczas uruchamiania aktywności. Która jest najlepszą praktyką do wdrożenia tego. Próbowałem umieścić kod wewnątrz onCreate(), onStart() i onResume(). Wszystko daje wysokość jako 0 przy starcie. Czy są jakieś metody, takie jak onFinishInflate() dla działań?Czytanie rozmiaru układu przy uruchamianiu aplikacji

Oto mój kod:

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

Odpowiedz

6

można zrobić coś takiego:

Get ostatecznego odniesienia do swojej Scrollview (do wglądu w onGlobalLayout() metoda). Następnie Pobierz ViewTreeObserver z ScrollView i dodaj OnGlobalLayoutListener, nadpisując metodę onGLobalLayout i pobierz pomiary w tym detektorze.

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

}); 

więcej w tym wątku:

How to retrieve the dimensions of a view?

+0

Thanks @Anup. To działa. Ale 'removeGlobalOnLayoutListener()' jest przestarzałe. jakiekolwiek alternatywy ?? – JiTHiN

+0

Przepraszam, użyłem starej metody. Zaktualizowano kod. –

+0

dzięki jeszcze raz ... – JiTHiN

1

Trzeba zapytać zobacz granic po układ przeprowadzono. Sugerowane miejsce to onWindowFocusChanged(boolean). Więcej informacji znajdziesz w tym pytaniu: How to get the absolute coordinates of a view

Ponadto, jeśli odważysz się rozszerzyć swoją klasę układu, np. dokonać podklasę LinearLayout itd., można zastąpić to onLayout() w ten sposób:

@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(); 
} 
Powiązane problemy