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