在Android中,CheckBox是一種常見的 UI 控制元件,讓使用者可以勾選更多的選項,具有「選取」或「未選取」兩種狀態,可利用CheckBox做一些問卷、表單等頁面
<CheckBox
android:id="@+id/checkBox"//元件id
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我不是機器人"//設置文字,也可不設置,額外用texeview顯示在旁
android:textSize="20sp"//文字大小/>
開頭須加上:
import android.widget.CheckBox;
此處實作是透過CheckBox是否被勾選來判斷是否啟用按鈕,平時勾選「我不是機器人」就是用到這種判斷,下面是最基礎的判斷式
//監聽是否有被點擊
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (checkBox.isChecked()){
// 如果勾選,啟用按鈕(可點擊)
button.setEnabled(true);
}else{
// 如果未勾選,停用按鈕(無法點擊)
button.setEnabled(false);
}
}
});
若是想在Login畫面判斷使用者是否全部欄位都有輸入完畢並勾選的話,可參考以下程式碼
1.自訂函數(檢查EditText是否填寫完畢並勾選CheckBox)
private void checkForm() {
String phone = phoneEditText.getText().toString().trim();
String email = emailEditText.getText().toString().trim();
String password = passwordEditText.getText().toString().trim();
String date = dateEditText.getText().toString().trim();
boolean isAllFilled = !phone.isEmpty() && !email.isEmpty() && !password.isEmpty() && !date.isEmpty();
boolean isChecked = robotCheckBox.isChecked();
sendButton.setEnabled(isAllFilled && isChecked);
}
2.dateEditText每被點擊填答後就呼叫 checkForm檢查
dateEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar calendar = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(LoginActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int y, int m, int d) {
String result = y + "-" + (m + 1) + "-" + d;
dateEditText.setText(result); // 把選取的日期顯示在 EditText 裡
checkForm();//每被點擊填答後就呼叫 checkForm檢查一次
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
dialog.show();
}
});
3.checkbox 勾選變動時也檢查,是這篇文章上面有提到的部分
robotCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkForm();
}
});
4.每次EditText被點擊輸入後就檢查一次
TextWatcher inputWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
checkForm(); // 每次輸入改變都即時檢查
}
@Override
public void afterTextChanged(Editable s) {}
};