51 votes

Pourquoi n'est-il pas getContentView() méthode pour l'Activité?

L'Activité de la classe a un setContentView() la méthode. Le PopupWindow Classe a un getContentView() la méthode, mais rien d'autre ne. Est-il une autre façon d'obtenir le contenu principal de la vue pour une activité?

51voto

mikeplate Points 709

J'ai été en mesure d'obtenir le contenu d'une Activité avec cet appel:

ViewGroup view = (ViewGroup)getWindow().getDecorView();

Vous devriez probablement vérifier que getDecorView retourne un instanceof ViewGroup pour tous les cas, mais avec un LinearLayout dans l'Activité le code ci-dessus fonctionne très bien. Pour obtenir le LinearLayout vous pouvez alors simplement:

LinearLayout content = (LinearLayout)view.getChildAt(0);

Et si vous avez une fonction comme ceci:

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 pourriez parcourir tous les points de vue et d'enregistrer les noms de classe avec l'appel suivant à l'intérieur de votre Activité:

logContentView(getWindow().getDecorView(), "");

50voto

moonlightdock Points 782

Ligne suivante fera l'affaire:

findViewById(android.R.id.content);

c'est essentiellement la même que (il doit être appelée sur le contexte d'une Activité)

this.findViewById(android.R.id.content);

3voto

bibby Points 562

Je suis à la recherche pour cela, mais j'ai juste pensé qu'il pourrait être plus facile d'ajouter un id pour l'extérieur ViewGroup.

<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 pour quelques minutes de plus, bien que. Je suis en elle, de sorte que je peux utiliser findViewWithTag de l'extrème mise en page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X