如何响应基于禁用的
#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()
}
不要禁用它,而是保持启用状态,但使用标志来控制您的“内部状态”
您可以在xml中像这样为按钮添加android:allowClickWhenDisabled
属性:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:allowClickWhenDisabled="true"/>
我通过使用一个标志来保持按钮的状态来解决了这个问题。
private boolean isMyButtonEnabled = false;
public void onMyButtonClick(View v) {
if(isMyButtonEnabled){
..
}
}
我找了一下,但没有找到可以监听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
}