我知道如何使用view . getrootview()获得根视图。我也能够从一个按钮的onClick事件中获得视图,其中参数是一个视图。但是我如何在活动中获得视图呢?
如果你需要根视图你的活动(所以你可以添加你的内容)使用
findViewById(android.R.id.content).getRootView()
此外,据报道,在某些设备上,你必须使用
getWindow().getDecorView().findViewById(android.R.id.content)
代替。
请注意,正如Booger所报告的,这可能在某些设备上位于导航栏后面(带有返回按钮等)(但在大多数设备上似乎不是这样)。
如果你需要使用setContentView()方法获取你添加到你的活动的视图,然后作为pottedmeat写你可以使用
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
但最好在xml布局中设置id为这个视图,并使用这个id。
这是我用来获得根视图,因为在XML文件中找到了setContentView赋值:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
我在android 4.0.3中测试了这个功能,只有:
getWindow().getDecorView().getRootView()
给我们同样的观点
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
and
getWindow().getDecorView().findViewById(android.R.id.content)
给它的孩子
android.widget.FrameLayout@#######
请证实。
以防有人需要更简单的方法:
下面的代码给出了整个活动的视图:
[View]
要在活动中获取某个视图,例如在活动中获取imageView,只需添加你想要获取的视图的id:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
希望这对大家有所帮助
如果你在一个活动中,假设只有一个根视图,你可以像这样得到它。
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
然后可以将其强制转换为真正的类
或者你可以用
getWindow().getDecorView();
注意这将包括动作栏视图,你的视图在动作栏视图下面
从当前活动获取根视图。
在我们的活动中,我们可以通过以下方式获得根视图:
ViewGroup rootView = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
or
View rootView = getWindow().getDecorView().getRootView();
获取当前活动的视图
在任何onClick我们将得到“视图视图”,通过使用“视图”得到rootView。
View View = View . getrootview ();
并在片段中获取View
View view = FragmentClass.getView();
Kotlin扩展解决方案
使用它来简化活动中的访问。然后你可以直接从Activity或Activity中引用rootView。它外面的rootView:
val Activity.rootView get() = window.decorView.rootView
如果你想为Fragments添加相同的一致性,添加:
val Fragment.rootView get() = view?.rootView
对于那些正在使用数据绑定库的人来说,要获得当前活动的根,只需使用:
View rootView = dataBinding.getRoot();
对于Kotlin用户来说,它甚至更简单:
val rootView = dataBinding.root
另一个Kotlin扩展解决方案
如果你的activity的视图是在xml中声明的(ex activity_root.xml),打开xml并给根视图分配一个id:
android:id="@+id/root_activity"
现在在你的类中,使用以下方法导入视图:
import kotlinx.android.synthetic.main.activity_root.root_activity
现在可以使用root_activity作为视图。
推荐文章
- 如何隐藏动作栏之前的活动被创建,然后再显示它?
- 是否有一种方法以编程方式滚动滚动视图到特定的编辑文本?
- 在Android中将字符串转换为Uri
- 如何在NestedScrollView内使用RecyclerView ?
- 移动到另一个EditText时,软键盘下一步点击Android
- Android应用中的GridView VS GridLayout
- Activity和FragmentActivity的区别
- 右对齐文本在android TextView
- 权限拒绝:start前台需要android.permission.FOREGROUND_SERVICE
- 如何更改android操作栏的标题和图标
- Android Split字符串
- 让一个链接在安卓浏览器启动我的应用程序?
- 如何在Android工作室的外部库中添加一个jar ?
- GridLayout(不是GridView)如何均匀地拉伸所有子元素
- 如何让一个片段删除自己,即它的等效完成()?