在不使用setEnabled属性的情况下禁用按钮

时间:2019-04-03 12:36:35

标签: android android-layout

我有一个选择器类似的按钮

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/bg_circle_selected"/>
    <item android:drawable="@drawable/bg_circle_disabled" />
</selector>

因此,当我单击按钮时,背景将显示红色圆圈。 我需要根据情况禁用此按钮,因此不应显示突出显示。

如果我将其设为setEnabled false,它将起作用 但是在另一种情况下,禁用按钮应该提供听觉反馈。

因此,当我将setEnabled设置为false时,其他要求将不起作用,因为触摸被禁用了。

除了setEnabled()之外,是否有其他方法可以禁用按钮?

2 个答案:

答案 0 :(得分:0)

您可以通过自定义选择器实现上述目的,在该选择器中,该按钮似乎已被禁用,但实际上该按钮仍处于启用状态并触发了点击操作。 您可以使用

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@drawable/bg_circle_disabled />
<item android:state_pressed="true" android:drawable="@drawable/bg_circle_disabled"/>
<item android:state_enabled="false" android:drawable="@drawable/bg_circle_disabled" />

也不要忘记跟踪按钮状态(启用/禁用)

答案 1 :(得分:0)

您可能要考虑通过Java文件(而不是XML)以编程方式设置按钮的属性。 给您的XML布局文件中的按钮一个ID,然后从Java文件中引用它。这样,您将可以更好地控制其行为。

例如,XML中的android:id="@+id/my_button"。 然后使用Button button = findViewById(R.id.my_button);方法中的onCreate

然后,为其提供所需的任何属性。