如何使ImageButton消失时禁用仅使用xml?



这是我的第一个android项目,

事实上第一个编程项目。

我有一个ImageButton我想要隐藏被禁用,启用/禁用状态是使用到视图模型的xml连接完成的。所以我不能引用片段来编程地做它。

我尝试使用一个选择器列表来传递一个灰色版本的图像,但我想完全隐藏按钮,而不仅仅是src图像。

片段布局中的按钮:

<ImageButton
android:id="@+id/work_button"
android:src="@drawable/ic_desktop_windows_black"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:enabled="@{timerViewModel.pcButtonState}"
android:onClick="@{() -> timerViewModel.activityTypeWork()}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/gaming_button"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.40"
tools:ignore="ContentDescription" />

控制禁用/启用状态的变量:

val pcButtonState = Transformations.map(lastSession){
it == null
}

这样做是为了使按钮只有在最后一次会话为空时才启用

所以有任何方式来控制android:可视性或android:alpha通过一个选择器,或什么?

谢谢…


编辑

问题解决了,我的答案和Henry Twist的答案都是正确的,

我个人更喜欢Henry的方法,因为它更容易实现和维护。

我不认为有必要使解决方案如此复杂,如果一个按钮应该在禁用时隐藏,在启用时可见,你不需要使用启用/禁用状态,你可以只设置可见性依赖于timerViewModel.pcButtonState

例如:

android:enabled="true"
android:visibility="@{timerViewModel.pcButtonState ? View.VISIBLE : View.GONE}"

编辑

为了在数据绑定中使用外部类,您必须在data标记中导入它们,因此:

<data>
<import type="android.view.View" />
</data>

就是这样,如果其他人遇到类似的奇怪情况

我找到了一个解决方法,

通过在片段中设置一个观察者对象来观察控制状态的变量

val pcButton = binding.pcButton

timerViewModel.pcButtonState.observe(viewLifecycleOwner, Observer { state ->
state.let {
if (it == true) {
binding.pcButton.visibility = View.VISIBLE
}
}
})

现在我可以根据变量

的状态以编程方式调整按钮属性

相关内容

  • 没有找到相关文章

最新更新