我有一个与延迟加载视图/布局性能有关的问题。有时,我们希望动态显示/隐藏多个视图。在这种情况下,我们有四种选择:
哪一个表现最好?我在谷歌上搜索了一下,发现ViewStub是专门为此设计的,但我不确定。也许我错了,或者甚至还有第五个我不知道的选择。你对此有不同的看法或经验吗?谢谢!
发布于 2016-09-08 08:11:47
这取决于你想要膨胀的视图。您提到的每一种方法都有自己的开销,您需要决定妥协的位置。
View.GONE即可。如果它相当复杂或布局最好不要这样做。ViewFlipper和ViewSwitcher的目的是在不同的视图之间进行动画。它的目的不是显示和隐藏一个视图。如果您在不同的时间在同一地点显示不同的视图,请使用它。ViewStub只是一个占位符,它用更复杂的布局代替了自己。ViewStub而不需要布局信息。如果您需要以编程方式创建或设置视图,则这可能是一个很好的选择。发布于 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的代码片段:
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)
}
}
)
}https://stackoverflow.com/questions/39385438
复制相似问题