2012-10-24 3 views
5

Ich muss die Höhe von ScrollView, die in einer Layout-XML-Datei beim Start der Aktivität definiert ist, abrufen. Welches ist die beste Vorgehensweise, um dies zu implementieren? Ich habe versucht, den Code innerhalb onCreate(), onStart() und onResume() zu platzieren. Alle geben beim Start die Höhe 0 an. Gibt es irgendwelche Methoden wie onFinishInflate() für actvities?Lesen Layoutgröße beim Start der Anwendung

Hier ist mein Code:

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

Antwort

6

Sie können so etwas tun:

einen endgültigen Bezug auf Ihre Scroll Holt (für den Zugriff im onGlobalLayout() Methode). Als Nächstes holen Sie den ViewTreeObserver aus der ScrollView und fügen einen OnGlobalLayoutListener hinzu, der onGLobalLayout überschreibt und die Messungen in diesem Listener abruft.

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

}); 

sehen Sie mehr in diesem Thread:

How to retrieve the dimensions of a view?

+0

Dank @Anup. Es funktioniert. Aber 'removeGlobalOnLayoutListener()' ist veraltet. irgendwelche Alternativen ?? – JiTHiN

+0

Entschuldigung, ich habe die alte Methode verwendet. Code aktualisiert –

+0

danke nochmal ... – JiTHiN

1

Sie benötigen Blick Grenzen nach das Layout durchgeführt wurde, abzufragen. Vorgeschlagener Platz ist onWindowFocusChanged(boolean). Weitere Informationen finden Sie in dieser Frage: How to get the absolute coordinates of a view

Auch wenn Sie es wagen, Ihre Layout-Klasse zu erweitern, z. machst eine Unterklasse von LinearLayout etc., können Sie außer Kraft setzen, es ist onLayout-() auf diese Weise:

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