Android的AlertDialog中可以通过builder.setMultiChoiceItems(....)来添加一个多选项,但是并不能实现对选项的全选/反选功能,所以需要自定义一个控件。原理是通过ListView + CheckBox来实现,实现效果如下。
一、定义布局样式:
首先需要定义多选弹出框的样式,custom_mutiplechoice_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@android:color/background_dark"
>
<TextView
android:id="@+id/mutiplechoice_title"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center_vertical"
android:padding="5dp"
android:background="@android:color/darker_gray"
android:textSize="18sp"
android:textColor="@android:color/black"
android:text="标题"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="1dp"
android:background="@android:color/background_light">
<ListView
android:id="@+id/mutiplechoice_listview"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_weight="4"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal"
android:background="@android:color/darker_gray">
<Button
android:id="@+id/mutiplechoice_selectall_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="全选" />
<Button
android:id="@+id/mutiplechoice_ok_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
ListView条目的样式, custom_mutiplechoice_view_list_item.xml:
<?xml version="1.0" encod