web-dev-qa-db-fra.com

Pourquoi n'y a-t-il pas de méthode getContentView () pour Activity?

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é?

51
kencorbin

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(), "");
51
mikeplate

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);
50
moonlightdock

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.

3
bibby