12

setContentView(int)と言うことで、Androidアプリでビューのコンテンツを設定できることを知っています。現在のコンテンツビューを知るために使用できる関数はありますか?それが意味があるかどうかはわかりませんが、私が探しているのは、たとえば、intを返すgetContentViewという関数です。

理想的には、次のようになります。

setContentView(R.layout.main); // sets the content view to main.xml
int contentView = getContentView(); // does this function exist?

どうすればいいですか?

4

4 に答える 4

9

Androidでレイアウトのルートビューを取得する簡単で一般的な方法はありますか?

この回答とコメントは1つの方法を提供します:[現在のアクティビティからルートビューを取得する

findViewById(android.R.id.content)

階層内の任意のビューを指定して、次を呼び出すこともできます。

view.getRootView()

その階層のルート ビューを取得します。

「装飾ビュー」は getWindow().getDecorView() でも取得できます。これはビュー階層のルートであり、ウィンドウに接続するポイントですが、直接いじる必要があるかどうかはわかりません。

于 2012-11-16T03:01:10.503 に答える
4

IDのみで現在のビューのセッターとゲッターを作成できます

private int currentViewId = -1;

    public void setCurrentViewById(int id)
    {
        setContentView(id);
        currentViewId = id;
    }

    public int getCurrentViewById()
    {
        return currentViewId;
    }

そして、

protected void onCreate(Bundle savedInstanceState)
{
        super.onCreate(savedInstanceState);
        setCurrentViewById(R.layout.main_layout);

}

お役に立てれば。

于 2012-11-16T03:18:59.453 に答える
3

アクティビティでは、次のことができます

View rootView = null;
View currentFocus = getWindow().getCurrentFocus();
if (currentFocus != null)
    rootView = currentFocus.getRootView();

また、上記のように、

View decorView = getWindow().getDecorView();

としても

View decorView = getWindow().peekDecorView();

後者の 2 つの違いは、装飾ビューがまだ作成されていない場合にpeekDecorView()返される可能性があるのに対し、 (まだ) 存在しない場合は新しい装飾ビューを作成することです。最初の例は、現在フォーカスのあるビューがない場合にも返されます。nullgetDecorView()null

ルート ビューと装飾ビューが同じインスタンスであるかどうかは試していません。ただし、ドキュメントに基づいて、そうであると想定し、数行のコードで簡単に確認できます。

于 2016-01-27T08:39:45.387 に答える
1

2 つのコンテンツ ビューがある場合は、それぞれの相対レイアウト内にタグを配置できます。タグ名でビューを取得します。タグ名が 1 つの希望である場合は、blablabla です。解決策を探している人にとって、このヘルプが役立つことを願っています。

于 2013-06-09T12:36:52.767 に答える