首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ViewStub vs View.GONE与充气vs ViewSwitcher

ViewStub vs View.GONE与充气vs ViewSwitcher
EN

Stack Overflow用户
提问于 2016-09-08 07:53:27
回答 2查看 1.8K关注 0票数 12

我有一个与延迟加载视图/布局性能有关的问题。有时,我们希望动态显示/隐藏多个视图。在这种情况下,我们有四种选择:

  1. 在.xml中包含所有布局,并使用setVisibility方法(如View.GONE和VIEW.VISIBLE)
  2. 使用ViewFlipper / ViewSwitcher
  3. 使用ViewStub
  4. 以编程方式膨胀新布局。

哪一个表现最好?我在谷歌上搜索了一下,发现ViewStub是专门为此设计的,但我不确定。也许我错了,或者甚至还有第五个我不知道的选择。你对此有不同的看法或经验吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 08:11:47

这取决于你想要膨胀的视图。您提到的每一种方法都有自己的开销,您需要决定妥协的位置。

  1. 如果您的视图非常简单,并且不需要大量初始化,只需将其设置为View.GONE即可。如果它相当复杂或布局最好不要这样做。
  2. ViewFlipperViewSwitcher的目的是在不同的视图之间进行动画。它的目的不是显示和隐藏一个视图。如果您在不同的时间在同一地点显示不同的视图,请使用它。
  3. ViewStub只是一个占位符,它用更复杂的布局代替了自己。
  4. 手动执行所有操作就像使用ViewStub而不需要布局信息。如果您需要以编程方式创建或设置视图,则这可能是一个很好的选择。
票数 10
EN

Stack Overflow用户

发布于 2020-08-18 02:01:46

2017年,安卓团队在支持库v24上发布了v24。在2020年,它是Jetpack库的一部分。

AsyncLayoutInflater是另一种懒散地膨胀布局的方法。正如API文档所述

用于异步膨胀布局的Helper类。要使用,请在UI线程上构造一个AsyncLayoutInflater实例并调用inflate(int、ViewGroup、OnInflateFinishedListener)。当充气请求完成后,将在UI线程上调用AsyncLayoutInflater.OnInflateFinishedListener。 这是针对那些懒散地创建或响应用户交互的UI的部分。这允许UI线程继续响应&动画,而相对沉重的充气正在执行。

这是使用AsyncLayoutInflater的代码片段:

代码语言:javascript
运行
复制
button.setOnClickListener { view ->
    val container = findViewById(R.id.container)
    val asyncLayoutInflater = AsyncLayoutInflater(this@MainActivity)
    asyncLayoutInflater.inflate(
        R.layout.view_sample,
        container,
        object : OnInflateFinishedListener() {
            fun onInflateFinished(view: View, resId: Int, parent: ViewGroup) {
                parent.addView(view)
            }
        }
    )
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39385438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档