SS2*_*095 31 android kotlin kotlin-android-extensions android-constraintlayout
当我尝试在按钮单击时设置组的可见性时,它不会影响视图的可见性.使用com.android.support.constraint:constraint-layout:1.1.0-beta4.我已经尝试过没有问题地设置元素,但是没有成功.
我的MainActivity.kt
private fun toggleLoginUI(show: Boolean) {
if (show) {
group.visibility = VISIBLE
} else {
group.visibility = INVISIBLE
}
}
fun onClick(view: View) {
when (view.id) {
R.id.button -> toggleLoginUI(true)
R.id.button4 -> toggleLoginUI(false)
}
}
Run Code Online (Sandbox Code Playgroud)
我的activity_main.xml
<android.support.constraint.ConstraintLayout..
<TextView
android:id="@+id/textView"
... />
<TextView
android:id="@+id/textView2"
... />
<Button
android:id="@+id/button"
.../>
<Button
android:id="@+id/button4"
... />
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:constraint_referenced_ids="textView,textView2" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
Che*_*amp 28
对我来说这看起来像个错误.GONE有效,但INVISIBLE没有,我认为应该.它可能值得一个错误报告,除非有人可以发布我认为错误的地方.(我正在使用constraint-layout:1.1.0-beta4.)
与此同时,这是一个解决方法,显式检索组内的ID并设置每个检索到的视图的可见性.
在MainActivity.kt中
private fun toggleLoginUI(show: Boolean) {
if (show) {
setGroupVisibility(mLayout, group, Group.VISIBLE)
} else {
setGroupVisibility(mLayout, group, Group.INVISIBLE)
}
}
private fun setGroupVisibility(layout: ConstraintLayout, group: Group, visibility: Int) {
val refIds = group.referencedIds
for (id in refIds) {
layout.findViewById<View>(id).visibility = visibility
}
}
Run Code Online (Sandbox Code Playgroud)
mLayout是的ConstraintLayout.
更新:这是另一种解决方案,它利用了更改为/ GONE按预期工作的事实:
private fun toggleLoginUI(show: Boolean) {
if (show) {
group.visibility = GONE
group.visibility = VISIBLE
} else {
group.visibility = GONE
group.visibility = INVISIBLE
}
}
Run Code Online (Sandbox Code Playgroud)
luk*_*jar 24
您还可以requestLayout在将组可见性更改为之后简单地调用方法View.INVISIBLE.
fun makeGroupInvisible(group: Group) {
group.visibility = View.INVISIBLE
group.requestLayout()
}
Run Code Online (Sandbox Code Playgroud)
问题是,android.support.constraint.Group它的成员在更新可视性updatePreLayout的方法是从所谓onMeasure的ConstraintLayout.
android.support.constraint.Group具有公共方法
public void updatePreLayout(ConstraintLayout container) {
...
}
Run Code Online (Sandbox Code Playgroud)
更新儿童的能见度,所以打电话
dataGroup.visibility = if (visible) View.VISIBLE else View.INVISIBLE
dataGroup.updatePreLayout(root)
Run Code Online (Sandbox Code Playgroud)
为我工作
| 归档时间: |
|
| 查看次数: |
11062 次 |
| 最近记录: |