723 Stimmen

Wurzelansicht der aktuellen Aktivität abrufen

Ich weiß, wie man die Root-Ansicht mit View.getRootView() . Ich bin auch in der Lage, die Ansicht von einer Schaltfläche zu erhalten onClick Ereignis, bei dem das Argument ein Siehe . Aber wie kann ich die ver in einem Tätigkeit ?

1167voto

Dmitry Ryadnenko Punkte 21694

Wenn Sie die Wurzelansicht Ihrer Aktivität benötigen (damit Sie dort Ihre Inhalte hinzufügen können), verwenden Sie

findViewById(android.R.id.content).getRootView()

Außerdem wurde berichtet, dass man auf einigen Geräten die

getWindow().getDecorView().findViewById(android.R.id.content)

stattdessen.

Bitte beachten Sie, dass sich dies, wie Booger berichtet, auf einigen Geräten hinter der Navigationsleiste (mit der Schaltfläche "Zurück" usw.) befinden kann (auf den meisten Geräten scheint dies jedoch nicht der Fall zu sein).

Wenn Sie die Ansicht, die Sie Ihrer Aktivität hinzugefügt haben, mit setContentView() Methode können Sie dann, wie pottedmeat schrieb, die

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

Aber besser einfach id zu dieser Ansicht in Ihrem Xml-Layout und verwenden Sie diese id statt.

278voto

pottedmeat Punkte 3341

Dies ist, was ich verwende, um die Root-Ansicht zu erhalten, wie in der XML-Datei mit zugewiesen gefunden setContentView :

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

149voto

Sudar Nimalan Punkte 3902

Ich habe dies nur unter Android 4.0.3 getestet:

getWindow().getDecorView().getRootView()

die gleiche Ansicht vermitteln, die wir von

anyview.getRootView();

com.android.internal.policy.impl.PhoneWindow$DecorView@#########

et

getWindow().getDecorView().findViewById(android.R.id.content)

das Kind seiner

android.widget.FrameLayout@#######

Bitte bestätigen.

35voto

Jorgesys Punkte 119076

Erhalten Sie die Wurzelansicht der aktuellen Aktivität.

Innerhalb unserer Aktivität können wir die root Ansicht mit:

ViewGroup rootView = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

oder

View rootView = getWindow().getDecorView().getRootView();

33voto

Artem Botnev Punkte 1810

In Kotlin können wir es ein wenig kürzer machen:

val rootView = window.decorView.rootView

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X