Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 禁用视图设置,但保留颜色_Java_Android_Xml_Checkbox - Fatal编程技术网

Java 禁用视图设置,但保留颜色

Java 禁用视图设置,但保留颜色,java,android,xml,checkbox,Java,Android,Xml,Checkbox,我有一个与BaseExpandableListAdapter关联的ExpandableListView。在这个列表中,当用户单击一个子项时,它会触发一些方法,并且如果用户再次单击,它会设置一个复选框来选中相同的内容,但复选框将被取消选中 为了能够正确使用onChildClick方法,我将复选框设置为android:enabled=false,正如许多帖子所建议的那样 问题是,复选框自动变为灰色,无论是否选中。它不会影响活动的行为,但与检查为浅绿色时的视觉效果不同 我如何保持完全相同的行为,但带有

我有一个与BaseExpandableListAdapter关联的ExpandableListView。在这个列表中,当用户单击一个子项时,它会触发一些方法,并且如果用户再次单击,它会设置一个复选框来选中相同的内容,但复选框将被取消选中

为了能够正确使用onChildClick方法,我将复选框设置为android:enabled=false,正如许多帖子所建议的那样

问题是,复选框自动变为灰色,无论是否选中。它不会影响活动的行为,但与检查为浅绿色时的视觉效果不同

我如何保持完全相同的行为,但带有彩色复选框

或者换句话说,使用android:enabled=false并保持视图的颜色是否可能且简单

以下是复选框的xml代码:

<CheckBox android:id="@+id/config_can_spn_checkbox"
android:layout_marginRight="30dip"
android:layout_weight="1"
android:layout_width="0dip"
android:layout_height="match_parent"
android:enabled="false"
android:focusable="false" />

您可以将按钮的选择器改写为以下内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false" android:drawable="@drawable/image_enabled" />
   <item android:drawable="@drawable/image_enabled" />
</selector>

不确定这段代码是否适合您,但这是一个想法:检查并获取教程。

您可以使用单击侦听器拦截单击并更改回值,而不是禁用复选框。听起来有点像黑客;您也可以选择将视图子类化,并以这种方式覆盖不希望出现的行为。

您只需设置android:clickable=false和android:focusable=false,这将消除所有点击,不会聚焦,但保持启用的外观,就像您想要的那样。

我试图拦截复选框上的点击,但不知怎的,就我所知,该复选框没有更改,android:focusable=false将焦点从复选框中移除,允许使用onChildClickListener。android:clickable=false删除onClickListeners的触发器,但并不阻止用户单击复选框。因此,状态会更改,但onChildClickListener的代码不会触发。这就是我基本上想要避免的事实,它也不起作用,因为可绘制的内容仍将显示为灰色…不,可绘制的内容将显示为您想要的内容。。。请记住,您正在覆盖它们。就像你从头开始做一个自定义按钮一样。也请查看此帖子:
expandableList.setOnChildClickListener(new OnChildClickListener() {

    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
        // TODO Auto-generated method stub
        CheckBox cb = (CheckBox)v.findViewById(R.id.config_can_spn_checkbox);
        cb.toggle();
        Toast.makeText(getBaseContext(), "Group = " + String.valueOf(groupPosition) + " child = " + String.valueOf(childPosition), Toast.LENGTH_SHORT).show();
        return false;
    }
});
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false" android:drawable="@drawable/image_enabled" />
   <item android:drawable="@drawable/image_enabled" />
</selector>