CustomizeCheckBoxActivity.java
package com.mw.app.view.activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.mw.app.R;
import java.util.ArrayList;
import java.util.List;
public class CustomizeCheckBoxActivity extends AppCompatActivity {
private CheckedTextView checkedTextView;
ArrayAdapter adapter = null;
ListView listView = null;
ArrayList<String> dataList = null;
List<CheckedTextView> checkedList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.customize_checkbox_layout);
checkedList = new ArrayList<>();
//单独一个checkBox
checkedTextView = findViewById(R.id.customize_checkbox_item_layout_text1);
checkedTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("mw","自定义当前状态是:"+(checkedTextView.isChecked()?"选中":"未选中"));
checkedTextView.setChecked(!checkedTextView.isChecked());
}
});
//模拟数据
ArrayList<String> dataList = new ArrayList<>();
for (int i = 0; i < 13; i++) {
dataList.add("选择数据"+i);
}
//初始化ListView
listView = (ListView) findViewById(R.id.customize_checkbox_layout_listview);
listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);//设置多模式
//ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_multiple_choice); 系统样式
adapter = new ArrayAdapter(this,R.layout.customize_checkbox_item_layout);
//将模拟数据添加到adapter适配器中
adapter.addAll(dataList);
listView.setAdapter(adapter);
//点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView c = (CheckedTextView)view;
Log.i("mw","被执行了onItemClick,当前状态是:"+c.isChecked());
checkedList.add(c);
}
});
}
public void getAllSelectVal(View view){
Log.i("mw","11111111");
// Toast.makeText(getApplicationContext(),"被选中N条",Toast.LENGTH_SHORT);
int count = 0;
for (int i=0;i<checkedList.size();i++){
CheckedTextView c= (CheckedTextView) checkedList.get(i);
if(c.isChecked()){
Log.i("mw",c.getText()+"被选中");
++count;
}
//if(c.isChecked()){ Log.i("mw","333");}
}
Log.i("mw","被选中"+count+"条");
}
}
customize_checkbox_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="多选实现" />
<CheckedTextView
android:id="@+id/customize_checkbox_item_layout_text1"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:background="@drawable/border_style"
android:text="单独一个"
android:checkMark="@drawable/customize_checkbox_item_layout_text_bg"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" />
<ListView
android:id="@+id/customize_checkbox_layout_listview"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"></ListView>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getAllSelectVal"
android:text="确定" />
</LinearLayout>
border_style.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 这里是设置背景色-->
<solid android:color="#fafafa" />
<!-- 这里是设置为四周 也可以单独设置某个位置为圆角-->
<corners android:topLeftRadius="5dp"
android:topRightRadius="5dp"
android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"/>
<!-- 这里设置边框 -->
<stroke android:width="1dp" android:color="#e9e9e9" />
</shape>
customize_checkbox_item_layout_text_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checked" android:state_selected="true" />
<item android:drawable="@drawable/state_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/timg" android:state_checked="true" />
<item android:drawable="@drawable/state_pressed" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/customize_checkbox_item_layout_text"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:checkMark="@drawable/customize_checkbox_item_layout_text_bg"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" />
图标