【发布时间】:2012-01-26 09:24:46
【问题描述】:
如何响应基于单击禁用的Button 的事件。
我有一个要求,我必须提供 Dialog,当单击禁用的 Button 但即使我 setClickable(false) 时我分配的侦听器也不会触发
我是安卓菜鸟,抱歉。
【问题讨论】:
标签: android button actionlistener
如何响应基于单击禁用的Button 的事件。
我有一个要求,我必须提供 Dialog,当单击禁用的 Button 但即使我 setClickable(false) 时我分配的侦听器也不会触发
我是安卓菜鸟,抱歉。
【问题讨论】:
标签: android button actionlistener
例如,您可以改用#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>
【讨论】:
禁用的按钮无法监听任何事件,但您可以通过扩展Button 类来自定义您自己的按钮,以进行自己的禁用定义
【讨论】:
与其禁用它,不如让它保持启用状态,但使用一个标志来控制你的“内部状态”
【讨论】:
你可以重写 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()
}
【讨论】:
我通过使用标志来保持按钮的状态解决了这个问题。
private boolean isMyButtonEnabled = false;
public void onMyButtonClick(View v) {
if(isMyButtonEnabled){
..
}
}
【讨论】:
您可以像这样在 xml 中为您的按钮添加 android:allowClickWhenDisabled 属性:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:allowClickWhenDisabled="true"/>
【讨论】:
我找了它,但没有听到 EditText 块。所以我找到了另一种方法来激活它。如果您已经在收听附近的按钮或区域,您可以启用SetOnLongClickListener 来激活该块。这将是一个秘密,但您可以告诉用户。
button.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
editText.setEnabled(true)
return true;
}
});
【讨论】:
我将通过使用selected 状态来解决这个问题,该状态通常可用于小部件,也可用于状态列表可绘制对象。对isSelected 的使用进行简单搜索会在ListView、GridView、TextView 和TabLayout 中找到结果。并且文档状态
视图通常是 * 在像 ListView 或 GridView 这样的 AdapterView 的上下文中选择; * 选中的视图是高亮的视图。
【讨论】:
您应该使用激活状态来启用或禁用按钮。它是可点击的,或者作为某人点使用选择或选中状态。这些状态中的每一个都有不同的含义,因此请谨慎使用它
【讨论】: