哈囉大家好今天一樣會來示範CheckBox的用法,那今天會示範CheckBox複選要怎麼做出來,廢話不多說一樣先上程式碼。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A選項"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B選項"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox1" />
<CheckBox
android:id="@+id/checkBox3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C選項"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox2" />
<CheckBox
android:id="@+id/checkBox4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D選項"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox3" />
<CheckBox
android:id="@+id/checkBox5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="E選項"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox4" />
<Button
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="送出"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_allChoose" />
<Button
android:id="@+id/btn_allChoose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="12dp"
android:text="全選"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox5" />
<Button
android:id="@+id/btn_allNotChoose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="12dp"
android:text="全不選"
app:layout_constraintStart_toEndOf="@+id/btn_allChoose"
app:layout_constraintTop_toBottomOf="@+id/checkBox5" />
</androidx.constraintlayout.widget.ConstraintLayout>
我來解釋一下我的佈局,一開始我先新增了A~E選項一共五個CheckBox,然後再新增了三個按鈕分別是"全選"、"全不選"和"送出",全選的功能是會將全部的CheckBox勾起來,反之全不選的則是將全部的CheckBox取消勾選,而送出按鈕的功能是會檢查有哪些CheckBox有被勾選並且彈出一個Toast來告訴使用者。
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
CheckBox ch;
Button btnSend,btnAllChoose,btnAllNotChoose;
String msg="";
int[] id = {R.id.checkBox1, R.id.checkBox2, R.id.checkBox3, R.id.checkBox4, R.id.checkBox5};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSend = findViewById(R.id.btn_send);
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Boolean check = false;
msg = "";
for (int i:id){
ch = findViewById(i);
if (ch.isChecked()) {
check = true;
msg += "\n" + ch.getText();
}
}
if (check == true){
Toast.makeText(getApplicationContext(),"您選擇的選項有:"+msg,Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplicationContext(),"您沒有選擇任何選項,請重新選取後再送出",Toast.LENGTH_SHORT).show();
}
}
});
btnAllChoose = findViewById(R.id.btn_allChoose);
btnAllChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i:id){
ch = findViewById(i);
ch.setChecked(true);
}
}
});
btnAllNotChoose = findViewById(R.id.btn_allNotChoose);
btnAllNotChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i:id){
ch = findViewById(i);
ch.setChecked(false);
}
}
});
}
}
在程式碼裡int[] id來裝取checkBox的id,然後在按下送出按鈕時會使用迴圈讓他可以輪流掃描每一個CheckBox,當檢查到有CheckBox被勾選時會將該CheckBox的名稱加入msg字串裡面,最後當每一個checkBox檢查完時會將msg使用Toast來讓使用者了解到有哪一些CheckBox被選擇到,在這裡我也有做一個小小的防呆機制,當沒有CheckBox沒有被勾選就按下送出按鈕時會彈出一個Toast來通知使用者。
那今天就示範得差不多了,謝謝大家的觀看。