Android 如何防止复选框被选中?
我希望在单击复选框时能够阻止选中复选框(或将其设置为未选中) 我怎样才能做到这一点 我不想简单地禁用复选框。我希望用户认为它是可检查的,但当用户尝试检查它时。。。然后我将(可能)阻止复选框被选中,并显示一条消息。尝试以下操作Android 如何防止复选框被选中?,android,Android,我希望在单击复选框时能够阻止选中复选框(或将其设置为未选中) 我怎样才能做到这一点 我不想简单地禁用复选框。我希望用户认为它是可检查的,但当用户尝试检查它时。。。然后我将(可能)阻止复选框被选中,并显示一条消息。尝试以下操作 CheckBox repeatChkBx = ( CheckBox ) findViewById( R.id.repeat_checkbox ); repeatChkBx.setOnCheckedChangeListener(new OnCheckedCha
CheckBox repeatChkBx =
( CheckBox ) findViewById( R.id.repeat_checkbox );
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
repeatChkBx.setChecked(false); // perform logic of opening message
}
}
});
您可以这样做:
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(isChecked){
cb.setChecked(false);
// Code to display your message.
}
}
});
只需在布局xml中添加
android:clickable=“false”
属性
因此,对我来说:
<CheckBox
android:id="@+id/server_is_online"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:clickable="false"
android:text="@string/server_is_online"
android:textSize="23sp" />
而且效果很好
不,这可能不是你应该使用复选框的方式,但我在原型制作阶段将其作为一个肮脏的黑客使用,而不是使用一个漂亮的图标,绿色勾号表示一切好,邪恶的红十字表示世界末日:)只需将其设置为永不被点击即可
cb.setClickable(false);
这个代码对我来说是完美的
在Android CompoundButton类中,perfumclick()切换按钮的选中状态
@Override
public boolean performClick() {
toggle();
final boolean handled = super.performClick();
if (!handled) {
// View only makes a sound effect if the onClickListener was
// called, so we'll need to make one here instead.
playSoundEffect(SoundEffectConstants.CLICK);
}
return handled;
}
如果您想手动控制行为,可以创建一个类来扩展CheckBox并重写performClick()方法。因为clickable=false对我不起作用。您可以尝试View.TouchListener作为复选框视图的侦听器,如下所示:
inner class TouchListener : View.OnTouchListener {
override fun onTouch(view: View, event: MotionEvent): Boolean {
when (view.id) {
<Your View id> -> {
if (event.action == ACTION_DOWN) {
//do your stuff here
}
return true /*To consume click event so the checkbox doesn't get checked, you can set it checked later once you're done using setChecked(true)*/
}
}
return false
}
}
内部类TouchListener:View.OnTouchListener{
覆盖趣味onTouch(视图:视图,事件:运动事件):布尔值{
何时(view.id){
-> {
如果(event.action==操作_DOWN){
//在这里做你的事
}
return true/*要使用click事件,以便复选框不被选中,可以在使用setChecked(true)完成后将其设置为选中*/
}
}
返回错误
}
}
*此代码段位于Kotlin中,请尝试以下操作
<CheckBox
**android:background="@android:color/transparent"
**android:clickable="false"
android:id="@+id/login_access_tick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:background
用于删除点击涟漪效应
android:clickable=“false” 代码>使其不可点击这是设计UI的正确方法吗??你为什么需要这个?我也需要同样的东西。这是为内置的帮助系统。在帮助模式下,每个活动元素都会显示帮助消息,而不是执行它的操作。如果您希望每次单击时都显示消息,您也可以只执行
cb.setChecked(!isChecked)
。对于辅助功能(如对讲),这不会失败吗?我得检查一下@盖茨布:对我来说,这听起来像是一个无限循环。。。或堆栈溢出。@不,它不会循环或溢出。OP不要求网络可用性。这不是问题的答案。@zgue,我已经改进了我的答案,你为什么不简单地使用按钮view.setChecked(!isChecked)代码>?如果将复选框
放在具有单击侦听器的较大版面中,则直接单击该复选框不会导致单击侦听器启动,除非为该复选框设置可单击=false
。调用performClick()
时,这不起作用
<CheckBox
**android:background="@android:color/transparent"
**android:clickable="false"
android:id="@+id/login_access_tick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>