如何在Android编程中获取当前内容视图?

时间:2012-11-16 00:33:14

标签: java android

我知道我可以通过说setContentView(int)在Android应用中设置视图的内容。有没有我可以用来了解当前内容视图的功能?我不知道这是否有意义,但我正在寻找的是一个名为getContentView的函数,它返回一个int。

理想情况下,它看起来像这样:

setContentView(R.layout.main); // sets the content view to main.xml
int contentView = getContentView(); // does this function exist?

我该怎么做?

4 个答案:

答案 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和getter
private 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,我会假设它们是,并且可以通过几行代码轻松验证。