我知道如何使用View.getRootView()获取根视图。我还可以从按钮的onClick
事件中获取视图,其中参数为View。但是如何在activity中获得视图?
答案 0 :(得分:970)
如果您需要活动的根视图(这样您可以在那里添加内容),请使用
findViewById(android.R.id.content)
据报道,在某些设备上你必须使用
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。
答案 1 :(得分:257)
这是我用来获取分配了setContentView
的XML文件中的根视图:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
答案 2 :(得分:123)
我在android 4.0.3中测试了这个,只有:
getWindow().getDecorView().getRootView()
给出我们从
得到的相同的观点anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
和
getWindow().getDecorView().findViewById(android.R.id.content)
给予孩子
android.widget.FrameLayout@#######
请确认。
答案 3 :(得分:26)
在我们的活动中,我们可以使用以下内容获取root
视图:
ViewGroup rootView = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
或
View rootView = getWindow().getDecorView().getRootView();
答案 4 :(得分:17)
只是因为有人需要一种更简单的方法:
以下代码提供了整个活动的视图:
View v1 = getWindow().getDecorView().getRootView();
要在活动中获取certian视图,例如活动中的imageView,只需添加您想要获取的视图的ID:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
希望这有助于某人
答案 5 :(得分:12)
在Kotlin中,我们可以做的短一些:
val rootView = window.decorView.rootView
答案 6 :(得分:3)
使用它来简化活动中的访问。然后,您可以直接从“活动”中引用rootView
,也可以直接在活动之外引用activity.rootView
:
val Activity.rootView get() = window.decorView.rootView
如果您想为片段添加相同的内容,请添加:
val Fragment.rootView get() = view?.rootView
答案 7 :(得分:2)
anyview.getRootView();
将是最简单的方式。
答案 8 :(得分:1)
对于那些使用Data Binding Library的人来说,要获取当前活动的根源,只需使用:
View rootView = dataBinding.getRoot();
对于Kotlin用户,它甚至更简单:
val rootView = dataBinding.root
答案 9 :(得分:1)
如果您的活动视图是在xml中声明的(例如activity_root.xml
),请打开xml并将ID分配给根视图:
android:id="@+id/root_activity"
现在在您的课程中,使用以下命令导入视图:
import kotlinx.android.synthetic.main.activity_root.root_activity
您现在可以将root_activity
用作视图。
答案 10 :(得分:0)
如果你在一个活动中,假设只有一个根视图,你就可以这样做。
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
然后你可以将它投射到真正的班级
或者您可以使用
getWindow().getDecorView();
请注意,这将包含操作栏视图,您的视图位于操作栏视图
下方答案 11 :(得分:0)
获取当前活动的视图
在任何onClick中我们将获得“查看视图”,通过使用“view”获取rootView。
查看视图= view.getRootView();
并获取片段中的视图
View view = FragmentClass.getView();