Android - 监听禁用按钮

问题描述 投票:0回答:11

如何通过单击禁用的

Button
来响应事件。 我有一个要求,当单击禁用的
Dialog
但我分配的监听器即使在我
Button
 时也不会触发时,必须呈现 
setClickable(false)

我是一个 Android 菜鸟,抱歉。

android button actionlistener
11个回答
62
投票

例如,您可以使用

#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>

8
投票

禁用按钮无法监听任何事件,但您可以通过扩展

Button
类来自定义自己的按钮,以自定义禁用


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

在您的活动中:

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

4
投票

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


2
投票

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

private boolean isMyButtonEnabled = false;

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

2
投票

您可以在 xml 中向按钮添加

android:allowClickWhenDisabled
属性,如下所示:

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:allowClickWhenDisabled="true"/>

0
投票

我寻找它但没有任何东西可以监听 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


0
投票

我将通过使用

selected
状态来解决这个问题,该状态通常可在小部件中使用,并且可以在状态列表可绘制对象中使用。简单搜索
isSelected
的用法即可在 ListView、GridView、TextView 和 TabLayout 中找到结果。文档指出

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


0
投票

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


0
投票

在 res/color/color_state.xml 中创建

  <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:color="#767C7F" android:state_activated="true" />
     <item android:color="#CBCBCB" android:state_activated="false" />
     <item android:color="#CBCBCB" />
  </selector>

设置文本颜色:

   android:textColor="@color/color_state"

设置事件点击改变状态颜色:

   binding.format1.setOnClickListener {
        binding.format1.isActivated = true
        binding.format2.isActivated = false
        binding.format3.isActivated = false
    }

0
投票

API级别31之后,您可以使用

android:allowClickWhenDisabled="true"

© www.soinside.com 2019 - 2024. All rights reserved.