如何通过单击禁用的
Button
来响应事件。
我有一个要求,当单击禁用的 Dialog
但我分配的监听器即使在我 Button
时也不会触发时,必须呈现
setClickable(false)
我是一个 Android 菜鸟,抱歉。
例如,您可以使用
#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 中找到结果。文档指出
视图通常是 * 在 AdapterView(如 ListView 或 GridView)的上下文中选择; * 所选视图是突出显示的视图。
您应该使用激活状态来启用或禁用按钮。它是可点击的,或者当有人点时使用选定或选中状态。每个状态都有不同的含义,因此请小心使用
在 res/color/color_state.xml 中创建
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#767C7F" android:state_activated="true" />
<item android:color="#CBCBCB" android:state_activated="false" />
<item android:color="#CBCBCB" />
</selector>
设置文本颜色:
android:textColor="@color/color_state"
设置事件点击改变状态颜色:
binding.format1.setOnClickListener {
binding.format1.isActivated = true
binding.format2.isActivated = false
binding.format3.isActivated = false
}
API级别31之后,您可以使用
android:allowClickWhenDisabled="true"