2

Ich erstelle eine Aktivität, die als Dialogformat gilt: Sie deckt nicht den gesamten Bildschirm ab, sondern nur einen Teil davon. Was ich tat, war in der onCreate() -Methode dieser Aktivität, nach dem Aufruf setContentView() Ich nenne:Einstellen des Fensterlayouts nach dem Aufruf von setContentView()

window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT); 

Und es funktioniert nicht. Ich brauche die folgenden stattdessen zu tun, damit es funktioniert:

window.getDecorView().post(new Runnable() { 
    @Override 
    public void run() { 
     window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT); 
    } 
}); 

Auch dies NACH setContentView ist() aufgerufen wird. Warum muss ich es in die Nachrichtenwarteschlange stellen, anstatt es direkt anzurufen? Danke!

Antwort

1

Wenn Sie die Inhaltsansicht festlegen, wird nur das Layout für das Android-Framework angezeigt. Das Layout wurde noch nicht vollständig konfiguriert. Dies geschieht erst, wenn das Android-Framework die Kontrolle zurückerhält (dh in der nächsten Ereignisschleife). Dies wird nicht passieren, bis die onCreate() Methode endet.

Indem Sie Ihren Code an eine Handler senden, verzögern Sie die Ausführung dieses Codes, bis das Android-Framework das Layout vollständig konfiguriert hat.

+0

Vielen Dank für Ihre Antwort! Gibt es ein anderes Signal für das Layout, das vollständig konfiguriert ist (außer der Methode onCreate())? – seemuch

+1

Einige Leute benutzen 'ViewTreeObserver's addOnGlobalLayoutListener()'. –

+1

Weitere Informationen finden Sie unter http://stackoverflow.com/questions/4393612/when-can-i-first-measure-a-view. Hier schlägt jemand vor, 'ViewTreeObserver.addOnPreDrawListener()' –

Verwandte Themen