Android - 收听已禁用的按钮

Jus*_*tin 12 android button actionlistener

如何基于单击禁用来响应事件Button.我有一个要求,我必须出现Dialog,当Button点击一个残疾人但我分配的听众即使我没有开火setClickable(false)

我是一个安卓机器人,抱歉.

Ric*_*ard 12

您可以例如使用#setActivated()method代替。禁用视图将忽略所有事件。 https://developer.android.com/reference/android/view/View.html#setActivated(boolean)。然后,您可以根据android:state_activate需要使用属性来自定义文本和背景样式:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="false"
      android:color="@color/a_color" />
    <item android:state_activated="true"
      android:color="@color/another_color" />
</selector>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个相当不错的选择。应该更高,甚至是公认的答案,恕我直言。 (9认同)

Pet*_*ton 8

禁用按钮无法侦听任何事件,但您可以通过扩展Button类来自定义自己的按钮,以自行定义禁用

  • 即使这是公认的答案,但它并不是特别有用.:-( (13认同)

Ben*_*det 8

您可以重写 onTouchEvent 并创建一个侦听器,如下所示:

class MyButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.materialButtonStyle) : MaterialButton(context, attrs, defStyleAttr) {

    private var onDisableClickListener: OnClickListener? = null

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        if (!isEnabled && event?.action == MotionEvent.ACTION_DOWN) {
            onDisableClickListener?.onClick(this)
        }
        return super.onTouchEvent(event)
    }

    fun setOnDisableClickListener(l: OnClickListener?) {
        onDisableClickListener = l
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的活动中:

button.setOnDisableClickListener {
            Toast.makeText(this), "The button is disabled", Toast.LENGTH_SHORT).show()
}
button.setOnClickListener {
            Toast.makeText(this), "The button is enabled", Toast.LENGTH_SHORT).show()
}
Run Code Online (Sandbox Code Playgroud)