我知道如何使用View.getRootView()获得根视图。我也可以从按钮的onClick
事件中获取视图,其中参数为View。但我怎么能得到视图中的活动?
我知道如何使用View.getRootView()获得根视图。我也可以从按钮的onClick
事件中获取视图,其中参数为View。但我怎么能得到视图中的活动?
Answers:
如果您需要活动的根视图(以便可以在其中添加内容),请使用
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);
ActionBar
?
我只在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@#######
请确认。
在Kotlin中,我们可以缩短操作时间:
val rootView = window.decorView.rootView
万一有人需要一种更简单的方法:
以下代码提供了整个活动的视图:
View v1 = getWindow().getDecorView().getRootView();
要在活动中获取证书视图,例如活动中的imageView,只需添加要获取的视图的ID:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
希望这对某人有帮助
findViewById(R.id.imageView1);
如果需要特定的视图,则可以仅调用活动。
如果您处于活动中,则假定只有一个根视图,您可以像这样获得它。
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
然后可以将其投放到您的真实班级
或者你可以使用
getWindow().getDecorView();
请注意,这将包括操作栏视图,您的视图位于操作栏视图下方
Activity
课堂上没有这样的方法。
setContentView()
并且提供的视图已经是根。如果需要该视图的句柄,只需在XAML中为其添加一个ID,findViewById()
就可以了。