【问题标题】:Android - Listen to a disabled buttonAndroid - 收听禁用的按钮
【发布时间】:2012-01-26 09:24:46
【问题描述】:

如何响应基于单击禁用的Button 的事件。 我有一个要求,我必须提供 Dialog,当单击禁用的 Button 但即使我 setClickable(false) 时我分配的侦听器也不会触发

我是安卓菜鸟,抱歉。

【问题讨论】:

    标签: android button actionlistener


    【解决方案1】:

    例如,您可以改用#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】:

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

    【讨论】:

    • 尽管这是公认的答案,但它并不是特别有用。 :-(
    【解决方案3】:

    与其禁用它,不如让它保持启用状态,但使用一个标志来控制你的“内部状态”

    【讨论】:

    • 请您(或某人)对此进行扩展?
    • 当您可以使用按钮非常自己的 setActivated() 方法然后使用 isActivated() 进行检查时,无需添加新标志
    【解决方案4】:

    你可以重写 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()
    }
    

    【讨论】:

      【解决方案5】:

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

      private boolean isMyButtonEnabled = false;
      
      public void onMyButtonClick(View v) {
         if(isMyButtonEnabled){
            ..
         }
      }
      

      【讨论】:

        【解决方案6】:

        您可以像这样在 xml 中为您的按钮添加 android:allowClickWhenDisabled 属性:

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

        【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          我将通过使用selected 状态来解决这个问题,该状态通常可用于小部件,也可用于状态列表可绘制对象。对isSelected 的使用进行简单搜索会在ListView、GridView、TextView 和TabLayout 中找到结果。并且文档状态

          视图通常是 * 在像 ListView 或 GridView 这样的 AdapterView 的上下文中选择; * 选中的视图是高亮的视图。

          【讨论】:

            【解决方案9】:

            您应该使用激活状态来启用或禁用按钮。它是可点击的,或者作为某人点使用选择或选中状态。这些状态中的每一个都有不同的含义,因此请谨慎使用它

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-03-03
              • 2016-10-02
              • 2014-09-27
              • 1970-01-01
              • 1970-01-01
              • 2016-02-12
              • 2011-05-22
              相关资源
              最近更新 更多