La classe Activity
a une méthode setContentView()
. La classe PopupWindow
a une méthode getContentView()
mais rien d'autre. Existe-t-il un autre moyen d'obtenir la vue principale du contenu d'une activité?
J'ai pu accéder au contenu d'une activité avec cet appel:
ViewGroup view = (ViewGroup)getWindow().getDecorView();
Vous devriez probablement vérifier que getDecorView renvoie une instance de ViewGroup pour tous les cas, mais avec un LinearLayout dans l'activité, le code ci-dessus fonctionne correctement. Pour accéder au LinearLayout, vous pouvez alors simplement:
LinearLayout content = (LinearLayout)view.getChildAt(0);
Et si vous avez une fonction comme celle-ci:
void logContentView(View parent, String indent) {
Log.i("test", indent + parent.getClass().getName());
if (parent instanceof ViewGroup) {
ViewGroup group = (ViewGroup)parent;
for (int i = 0; i < group.getChildCount(); i++)
logContentView(group.getChildAt(i), indent + " ");
}
}
Vous pouvez parcourir toutes les vues et enregistrer leurs noms de classe avec l'appel suivant dans votre activité:
logContentView(getWindow().getDecorView(), "");
La ligne suivante fera l'affaire:
findViewById(Android.R.id.content);
il est essentiellement identique à (il doit être appelé dans le contexte d'une activité)
this.findViewById(Android.R.id.content);
Je le recherche également, mais je pensais simplement qu'il serait plus facile d'ajouter un identifiant au ViewGroup le plus externe.
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@+id/outer">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
Je vais continuer à chercher encore quelques minutes. Je suis dedans pour pouvoir utiliser findViewWithTag à partir de la disposition la plus externe.