例如,有多篇文章,文章列表,有个CheckBox表示全选,全不选,和部分选中。但是android 自带的CheckBox只有2个状态, 选中和不选中,
这种3个状态的Checkbox感觉是个通用的需求,如果自己做一个,还得找图片也麻烦,感觉又在造轮子,请问有推荐的现成的实现吗?你们都是自己做的吗?
可以使用Android自带的CheckedTextView来实现三个状态的选择框。CheckedTextView继承自TextView,可以设置三种状态:选中、未选中和部分选中。可以通过设置CheckedTextView的checkMark属性来改变选中状态的图标。
示例代码:
<CheckedTextView
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Checkbox"
android:checkMark="@drawable/checkbox_selector"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:gravity="center_vertical"
android:textSize="16sp" />
其中,@drawable/checkbox_selector是一个selector,用来设置选中状态的图标。可以在drawable文件夹下创建一个checkbox_selector.xml文件,内容如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_check_box" android:state_checked="true" />
<item android:drawable="@drawable/ic_check_box_outline_blank" android:state_checked="false" />
<item android:drawable="@drawable/ic_indeterminate_check_box" android:state_checked="false" android:state_focused="true" />
</selector>
其中,ic_check_box、ic_check_box_outline_blank和ic_indeterminate_check_box是三种状态的图标,可以自行替换。
XML我是通过约束布局通过拖拽的方式来实现的,三个checkbox选项,
以及全选,全部选,获取内容三个Button按钮,和一个获取内容结果的TextView文本框。
1.需要实现的是点击全选,上面的checkBox全部被选中;
2.点击全不选,上面的checkBox全部不被选中,
3.点击获取内容,右边的TextView显示选中的内容
可以使用第三方库MultiStateCheckbox,它可以实现3个状态的多选框,包括全选、全不选和部分选中。
使用方法如下:
1.导入库
在app的build.gradle中加入以下代码:
dependencies { implementation 'com.github.lazylibrary:MultiStateCheckbox:0.1.0' }
2.在xml布局文件中添加控件
3.在代码中设置监听和状态
MultiStateCheckbox triCheckBox = findViewById(R.id.triCheckBox); triCheckBox.setOnStateChangedListener(new MultiStateCheckbox.OnStateChangedListener() { @Override public void onStateChanged(int state) { switch (state) { case MultiStateCheckbox.STATE_ALL: // 全选 break; case MultiStateCheckbox.STATE_HALF: // 部分选中 break; case MultiStateCheckbox.STATE_NONE: // 全不选 break; } } }); triCheckBox.setState(MultiStateCheckbox.STATE_ALL); // 全选 triCheckBox.setState(MultiStateCheckbox.STATE_HALF); // 部分选中 triCheckBox.setState(MultiStateCheckbox.STATE_NONE); // 全不选
以上就是使用MultiStateCheckbox实现3个状态的多选框的方法。