【问题标题】:How to get current content view in Android programming?如何在 Android 编程中获取当前内容视图?
【发布时间】:2023-03-21 00:20:01
【问题描述】:

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

理想情况下,它应该是这样的:

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

我该怎么做?

【问题讨论】:

  • AFAIK,无法获取内容视图。为什么需要它?

标签: java android


【解决方案1】:

引用Any easy, generic way in Android to get the root View of a layout?

这个答案和 cmets 给出了一种方法:[Get root view from current activity

findViewById(android.R.id.content)

给定层次结构中的任何视图,您也可以调用:

view.getRootView()

获取该层次结构的根视图。

“装饰视图”也可以通过getWindow().getDecorView()获得。这是视图层次结构的根,也是它附加到窗口的点,但我不确定你想直接弄乱它。

【讨论】:

    【解决方案2】:

    您可以只通过 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);
    
    }
    

    希望这会有所帮助。

    【讨论】:

    【解决方案3】:

    在一个Activity中,你可以做

    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,我认为它们是,并且可以通过几行代码轻松验证。

    【讨论】:

      【解决方案4】:

      如果您有两个内容视图,那么您可以在每个内容视图的相对布局中放置一个标签。然后通过标签名称获取视图。如果标签名称是一个愿望,那么 blablabla。希望这对正在寻找解决方案的人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-22
        • 2012-09-24
        • 1970-01-01
        • 2014-12-11
        相关资源
        最近更新 更多