我知道我可以通过说setContentView(int)在Android应用中设置视图的内容。有没有我可以用来了解当前内容视图的功能?我不知道这是否有意义,但我正在寻找的是一个名为getContentView的函数,它返回一个int。
理想情况下,它看起来像这样:
setContentView(R.layout.main); // sets the content view to main.xml
int contentView = getContentView(); // does this function exist?
我该怎么做?
答案 0 :(得分:6)
引用Any easy, generic way in Android to get the root View of a layout?
这个答案和评论提供了一种方法:[Get root view from current activity
findViewById(android.R.id.content)
如果您的层次结构中有任何视图,您也可以调用:
view.getRootView()
获取该层次结构的根视图。
“装饰视图”也可以通过getWindow()。getDecorView()获得。这是视图层次结构的根和它附加到窗口的点,但我不确定你是否想要直接搞乱它。
答案 1 :(得分:4)
你可以通过id
制作当前视图的setter和getterprivate int currentViewId = -1;
public void setCurrentViewById(int id)
{
setContentView(id);
currentViewId = id;
}
public int getCurrentViewById()
{
return currentViewId;
}
然后在
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setCurrentViewById(R.layout.main_layout);
}
希望这有帮助。
答案 2 :(得分:1)
如果您有两个内容视图,那么您可以在每个视图的相对布局中放置一个标记。然后按标记名称获取视图。如果标签名称是一个愿望然后blablabla。希望对寻求解决方案的人有所帮助。
答案 3 :(得分:1)
在活动中,您可以
View rootView = null;
View currentFocus = getWindow().getCurrentFocus();
if (currentFocus != null)
rootView = currentFocus.getRootView();
如上所述,还有
View decorView = getWindow().getDecorView();
以及
View decorView = getWindow().peekDecorView();
后两者之间的区别在于,如果尚未创建装饰视图,则peekDecorView()
可能会返回null
,而如果不存在,则getDecorView()
将创建新的装饰视图( )。如果当前没有焦点,则第一个示例也可能返回null
。
我还没有尝试过根视图和装饰视图是否是同一个实例。但是,基于documentation,我会假设它们是,并且可以通过几行代码轻松验证。