我应该调用什么方法来知道一个活动是否有它的contentView(一旦方法setContentView()被调用)?


您可能想尝试View.getRootView()。


如果你在布局中添加一个ID,你就可以得到视图。

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

从findViewById调用它…


你也可以覆盖onContentChanged(),当setContentView()被调用时,onContentChanged()会被触发。


没有“isContentViewSet”方法。你可以把一些伪requestWindowFeature调用放到setContentView之前的try/catch块中,像这样:

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

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


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

or

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

or

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

如何

View view = Activity.getCurrentFocus();

我发现最好的选择和侵入性较小,是在xml中设置一个标记参数,如

电话XML布局

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

Tablet 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()));

希望这对你有用。


如果您正在使用Kotlin

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