13

我想将一个按钮变灰,使其对用户显示为禁用,但仍会监听点击,以便我可以向用户显示一条消息,解释为什么该按钮不适用。

我想确保 Android API 是一个配置适当的标准禁用外观的 API,而不是手动将按钮颜色设置为灰色等。最好的方法是什么?

相关:Android - 收听禁用的按钮

4

6 回答 6

10

这是自定义按钮,当禁用它时会显示触摸事件,它肯定会工作,并经过测试。专为您设计

public class MyObservableButton extends Button
{
public MyObservableButton(Context context, AttributeSet attrs)
{
    super(context, attrs);
}

private IOnClickWhenEnabledListner mListner;

public void setOnClickWhenEnabledListener(IOnClickWhenEnabledListner listener) {
    mListner = listener;
}

private interface IOnClickWhenEnabledListner {
    public void onClickWhenEnabled();
}

@Override
public boolean onTouchEvent(MotionEvent event)
{       
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (!isEnabled() && mListner != null) {
            mListner.onClickWhenEnabled();
        }
    }

    return super.onTouchEvent(event);
}

}

从我作为 android 开发人员的角度来看,这是完成您想要的事情的正确方法。

扩展所有android的视图没有问题,并在xml文件上使用它们,而不是源..

祝你好运

于 2012-06-02T07:10:45.550 回答
5

您还可以手动将 Button 的背景设置为禁用的默认背景。但是保持按钮启用并以正常方式处理点击事件

像这样的事情应该这样做:

mBtn.setBackgroundResource(android.R.drawable.btn_default_normal_disabled);
于 2012-06-01T15:36:30.310 回答
0

我不是 Android 专家,所以可能有更好的方法,但是禁用按钮并覆盖将捕获事件的透明视图呢?

您可以让视图始终位于按钮下方,因此您只需要更改 z-index 或在需要时动态创建它。

于 2012-06-01T15:30:18.000 回答
0

如果您的按钮位于通过backgroundTint而不是控制颜色的较新类型上,那么background您应该这样做:

if (enabled) {
    ViewCompat.setBackgroundTintList(btn, getResources().getColorStateList(R.color.button_states)); // either use a single color, or a state_list color resource
} else {
    ViewCompat.setBackgroundTintList(btn, ColorStateList.valueOf(Color.GRAY));
}
// make sure we're always clickable
btn.setEnabled(true);
btn.setClickable(true);
于 2019-01-01T05:25:31.067 回答
-2

由于按钮扩展了文本视图。您可以使用 textview 中的方法,例如 .setTextColor() 或 .setBackgroundColor() 。

现在对于显示,您有 2 个选项:

  • AlertDialog - 显示警报,但除非指定,否则不会自行关闭。
  • Toast - 在给定时间内显示文本并自动关闭。

任你选。

于 2012-06-01T15:38:17.823 回答
-2

您还可以将Button' 的样式设置为灰显(对于按下和未按下状态),然后setOnClickListener()像往常一样,但让onClick()方法给出它不可点击的消息。

于 2012-06-01T15:37:13.127 回答