我想将一个按钮变灰,使其对用户显示为禁用,但仍会监听点击,以便我可以向用户显示一条消息,解释为什么该按钮不适用。
我想确保 Android API 是一个配置适当的标准禁用外观的 API,而不是手动将按钮颜色设置为灰色等。最好的方法是什么?
我想将一个按钮变灰,使其对用户显示为禁用,但仍会监听点击,以便我可以向用户显示一条消息,解释为什么该按钮不适用。
我想确保 Android API 是一个配置适当的标准禁用外观的 API,而不是手动将按钮颜色设置为灰色等。最好的方法是什么?
这是自定义按钮,当禁用它时会显示触摸事件,它肯定会工作,并经过测试。专为您设计
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文件上使用它们,而不是源..
祝你好运
您还可以手动将 Button 的背景设置为禁用的默认背景。但是保持按钮启用并以正常方式处理点击事件
像这样的事情应该这样做:
mBtn.setBackgroundResource(android.R.drawable.btn_default_normal_disabled);
我不是 Android 专家,所以可能有更好的方法,但是禁用按钮并覆盖将捕获事件的透明视图呢?
您可以让视图始终位于按钮下方,因此您只需要更改 z-index 或在需要时动态创建它。
如果您的按钮位于通过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);
由于按钮扩展了文本视图。您可以使用 textview 中的方法,例如 .setTextColor() 或 .setBackgroundColor() 。
现在对于显示,您有 2 个选项:
任你选。
您还可以将Button
' 的样式设置为灰显(对于按下和未按下状态),然后setOnClickListener()
像往常一样,但让onClick()
方法给出它不可点击的消息。