iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0

在Android中,CheckBox是一種常見的 UI 控制元件,讓使用者可以勾選更多的選項,具有「選取」或「未選取」兩種狀態,可利用CheckBox做一些問卷、表單等頁面

activity_main

<CheckBox
    android:id="@+id/checkBox"//元件id
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="我不是機器人"//設置文字,也可不設置,額外用texeview顯示在旁
    android:textSize="20sp"//文字大小/>

MainActivity

開頭須加上:

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) {}
};

上一篇
Day 15.正規表達式(Regular Expressions)
下一篇
Day 17.BMI
系列文
Android 新手的 30 天進化論:從初學者到小專案開發者21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言