如何获得Activity的内容视图?


279

我应该调用哪种方法才能知道一个Activity是否具有它的contentView(一旦调用了setContentView()方法)?

Answers:


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

要么

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

要么

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

4
getWindow().findViewById(android.R.id.content):)
亚历克斯·洛克伍德

1
就获取父视图而言,这工作正常。BUt ..如果我尝试this.findViewById(android.R.id.content).setBackgroundDrawable(d); 它的确有用。.请您提出建议..在此先感谢
Rajesh Wadhwa

3
如果使用来从XML安装布局setContentView(R.layout.my_view),则返回该布局的父级
杰伊·里斯克

您好@ernest我有一个排序问题,例如在我的版式中,我在顶部有一个图像,而在标签栏中则有两个标签。在“卫星菜单”的底部,打开了“要对菜单项进行模糊处理”。
Devendra Singh

1
Android.Resource.Id的内容不存在。
贾斯汀

23

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

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

并从findViewById调用它...


这是获得已安装布局根源的最可靠的方法。
杰伊·里斯克

3
你传给findViewById什么?
2016年

1
@trans View contentView = findViewById(R.id.my_relative_layout_id);
贾斯汀·刘

11

怎么样

View view = Activity.getCurrentFocus();

这怎么没有更多的赞许呢?很棒!
aeskreis

1
@aeskreis因为在我的情况下,它返回nullcurrentFocus?.let { ... }
user924


5

您还可以覆盖调用onContentChanged()时触发的其他事件setContentView()


ernest的答案即使包含可滚动视图,也能为您提供当前的聚焦视图
YuDroid 2012年

2

如果您正在使用 Kotlin

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

1

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

尝试{
  requestWindowFeature(Window.FEATURE_CONTEXT_MENU);
  setContentView(...)
} catch(AndroidRuntimeException e){
  //不做任何事
}

如果已经设置了内容视图,则requestWindowFeature将引发异常。


-3

我发现的最好的选择是,在您的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"/>

数位板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()));

希望它对你有用。


2
这如何回答这个问题?
奥尼克(Onik)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.