如何获取活动内容视图?

时间:2011-03-11 13:24:17

标签: android

我应该调用哪种方法来了解一个Activity是否有contentView(一旦调用 setContentView()方法)?

8 个答案:

答案 0 :(得分:514)

this.getWindow().getDecorView().findViewById(android.R.id.content)

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

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

答案 1 :(得分:21)

如果您在布局中添加了ID,则可以返回视图。

<RelativeLayout
    android:id="@+id/my_relative_layout_id"

从findViewById中调用它......

答案 2 :(得分:11)

怎么样

View view = Activity.getCurrentFocus();

答案 3 :(得分:10)

您可以尝试View.getRootView()

答案 4 :(得分:5)

您还可以覆盖onContentChanged(),其中setContentView()被调用时会被触发。

答案 5 :(得分:1)

没有“isContentViewSet”方法。您可以在setContentView之前将一些伪requestWindowFeature调用放入try / catch块中,如下所示:

try {
  requestWindowFeature(Window.FEATURE_CONTEXT_MENU);
  setContentView(...)
} catch (AndroidRuntimeException e) {
  // do smth or nothing
}

如果已经设置了内容视图,requestWindowFeature将抛出异常。

答案 6 :(得分:0)

如果您使用的是Kotlin

    this.findViewById<View>(android.R.id.content)
                         .rootView
                         .setBackgroundColor(ContextCompat.getColor(this, R.color.black))

答案 7 :(得分:-4)

我发现的最佳选择和不太干扰的是在xml中设置标签参数,例如

PHONE XML LAYOUT

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="phone"/>

平板电脑XML布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="tablet">

    ...

</RelativeLayout>

然后在您的活动类中调用它:

View viewPager = findViewById(R.id.pager);
Log.d(getClass().getSimpleName(), String.valueOf(viewPager.getTag()));

希望它适用于你。