- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 2 组 View 的 Activity ,它们不能位于同一个 LAYOUT 组但属于同一个 LOGIC 组,这意味着它们应该显示或隐藏并绑定(bind)点击事件在同一时间。问题是我觉得写这样的东西真的很糟糕:
fun hide() {
view1.visibility = View.GONE
view2.visibility = View.GONE
view3.visibility = View.GONE
// ...
view9.visibility = View.GONE
}
fun show() {
view1.visibility = View.VISIBLE
view2.visibility = View.VISIBLE
view3.visibility = View.VISIBLE
// ...
view9.visibility = View.VISIBLE
view1.setOnClickListener{ run() }
view2.setOnClickListener{ run() }
view3.setOnClickListener{ run() }
// ...
view9.setOnClickListener{ run() }
}
我确实读过一篇描述 kotlin 技能 的文章,该文章通过以某种方式对这些 View 进行分组然后处理这些组来简化这一困惑局面,但不幸的是我再也找不到那篇文章了。
帮助将不胜感激!
========= 2019-07-31 更新 =========
我找到了解决方案,但忘记更新这个问题,我一直在寻找的“分组”实际上不是 Kotlin 特定的功能,而是简单地使用 vararg,我们可以使用 Kotlin 扩展(非常棒)来进一步简化:
// assume we have a base activity or fragment, then put below functions in there
fun View.show() {
visibility = View.VISIBLE
}
fun show(vararg views: View) {
views.forEach { it.show() }
}
fun View.hide() {
visibility = View.GONE
}
fun hide(vararg views: View) {
views.forEach { it.hide() }
}
// then in any activity or fragment
show(v1, v2, v3, v4)
v9.hide()
============= 更新于 2020-03-07 ================
这正是 androidx.constraintlayout.widget.Group 设计的目的,它可以从任何地方对一堆 View 进行逻辑分组,并通过仅更改组的可见性来控制它们的可见性。
最佳答案
自 ConstraintLayout
1.1 你可以使用 Group 而不是 LayoutGroup
。您可以简单地将这段代码添加到您的 XML 布局中
<android.support.constraint.Group
android:id="@+id/profile"
app:constraint_referenced_ids="profile_name,profile_image" />
然后您可以从代码中调用它来实现您需要的行为
profile.visibility = GONE
profile.visibility = VISIBLE
有关更多详细信息,请阅读本文 https://medium.com/androiddevelopers/introducing-constraint-layout-1-1-d07fc02406bc
关于android - 如何将一堆 View 分组并一起更改它们的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835750/
我是一名优秀的程序员,十分优秀!