Android - 收听已禁用的按钮

时间:2012-01-26 09:24:46

标签: android button actionlistener

如何根据点击已停用的Button来回复活动。 当我点击已禁用的Dialog但我已分配的监听器即使在我Button

时也未启动,我要求我必须提供setClickable(false)

是一个安卓机器人,对不起。

8 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:6)

例如,您可以改用#setActivated()方法。禁用视图将忽略所有事件。 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>

答案 2 :(得分:4)

不是禁用它,而是启用它,但使用标志来控制“内部状态”

答案 3 :(得分:1)

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

private boolean isMyButtonEnabled = false;

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

答案 4 :(得分:1)

我找了它,但没有听取EditText块。所以我找到另一种方法来激活它。如果您已经听过近距离按钮或区域,则可以启用SetOnLongClickListener来激活该按钮。这将是一个秘密,但你可以告诉用户。

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

enter image description here

答案 5 :(得分:0)

我即将通过使用selected状态来解决这个问题,该状态通常可用于小部件,并且可以在状态列表drawable中使用。对isSelected的使用进行简单搜索会在ListView,GridView,TextView和TabLayout中生成结果。文档说明

  

通常是视图        *在ListView或GridView等AdapterView的上下文中选择;        *所选视图是突出显示的视图。

答案 6 :(得分:0)

您应该使用激活状态来启用或禁用按钮。它是可单击的,或者有人指出使用选中或选中状态。每个状态都有不同的含义,因此请小心使用

答案 7 :(得分:0)

您可以覆盖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 (event?.action == MotionEvent.ACTION_DOWN && !isEnabled) {
            onDisableOnClickListener?.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()
}