Android 安卓-听一个被禁用的按钮

Android 安卓-听一个被禁用的按钮,android,button,actionlistener,Android,Button,Actionlistener,单击禁用的按钮,如何响应事件。 我有一个要求,当单击禁用的按钮时,我必须显示对话框,但我分配的侦听器即使在我设置可点击(false) 我是安卓noob,抱歉。禁用的按钮无法监听任何事件,但您可以通过扩展按钮类自定义自己的按钮,以定义禁用按钮,而不是禁用按钮,保持启用按钮,但使用标志控制“内部状态”我通过使用一个标志来保持按钮的状态,解决了这个问题 private boolean isMyButtonEnabled = false; public void onMyButtonClick(Vie

单击禁用的
按钮
,如何响应事件。 我有一个要求,当单击禁用的
按钮
时,我必须显示
对话框
,但我分配的侦听器即使在我
设置可点击(false)


我是安卓noob,抱歉。

禁用的按钮无法监听任何事件,但您可以通过扩展
按钮
类自定义自己的按钮,以定义禁用按钮,而不是禁用按钮,保持启用按钮,但使用标志控制“内部状态”

我通过使用一个标志来保持按钮的状态,解决了这个问题

private boolean isMyButtonEnabled = false;

public void onMyButtonClick(View v) {
   if(isMyButtonEnabled){
      ..
   }
}

我找了一下,但没有找到任何东西来听编辑文本块。所以我找到了另一种方法来激活它。如果您已经在收听附近的按钮或区域,则可以启用
SetOnLongClickListener
来激活该块。这将是一个秘密,但你可以告诉用户

button.setOnLongClickListener(new OnLongClickListener() { 
        @Override
        public boolean onLongClick(View v) {
            // TODO Auto-generated method stub
            editText.setEnabled(true)
            return true;
        }
    });

我将通过使用
选定的
状态来解决这个问题,该状态通常可用于小部件,也可用于状态列表绘图。只需搜索isSelected的用法,就会在ListView、GridView、TextView和TableLayout中显示结果。文件说明

视图通常是 *在AdapterView(如ListView或GridView)的上下文中选择; *选定视图是高亮显示的视图


您应该使用激活状态来启用或禁用按钮。它是可点击的,或者当有人指向时使用选中或选中状态。每个状态都有不同的含义,因此请仔细使用它。例如,您可以使用
#setActivated()
方法。禁用视图将忽略所有事件。 . 然后,如果需要,您可以使用
android:state\u 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>

您可以覆盖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
    }
}
在您的活动中:

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()
}

尽管这是公认的答案,但并不特别有用-(你(或其他人)可以对此进行扩展吗?当你可以使用自己的setActivated()方法,然后使用isActivated()检查时,无需添加新标志。这是一个很好的选择。应该更高,甚至是公认的答案,imho。