53

ActivityクラスにはsetContentView()メソッドがあります。PopupWindowクラスにはメソッドがありますが、getContentView()他には何もありません。アクティビティのメイン コンテンツ ビューを取得する別の方法はありますか?

4

3 に答える 3

52

次の行はトリックを行います:

findViewById(android.R.id.content);

基本的に同じです(アクティビティのコンテキストで呼び出す必要があります)

this.findViewById(android.R.id.content);
于 2013-01-07T05:42:11.203 に答える
52

この呼び出しでアクティビティの内容にアクセスできました。

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

おそらく、すべてのケースで getDecorView が ViewGroup のインスタンスを返すことを確認する必要がありますが、Activity に LinearLayout がある場合、上記のコードは正常に実行されます。LinearLayout に到達するには、次のようにします。

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

そして、次のような関数がある場合:

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 + " ");
    }
}

アクティビティ内で次の呼び出しを使用して、すべてのビューを反復処理し、それらのクラス名をログに記録できます。

logContentView(getWindow().getDecorView(), "");
于 2010-11-21T20:45:28.070 に答える
3

これも探していますが、最も外側のViewGroupにIDを追加する方が簡単かもしれないと思いました。

<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">

ただし、あと数分探し続けます。最も外側のレイアウトからfindViewWithTagを使用できるように、私はそれに夢中になっています。

于 2010-11-21T05:52:59.423 に答える