複数の中からどれかを選択する場合 CheckBox を使うと便利です。CheckBox はチェックされた状態とチックされていない状態のいずれかを取りますが、テストアプリを作って確認してみましょう。
Android Studio
2024.1.1
2024.1.1
CheckBox
ボタンなどと同じようにリスナーをセットします
これにより、タップされるたびにステータスが変化します
1 2 3 4 5 6 7 8 9 |
checkBox = findViewById(R.id.checkbox); checkBox.setChecked(false); checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // } }); |
ステータスは、チェックボックスにチェックが入ることでユーザーにわかりますが、プログラム的には isChecked() で取り出せます。
また、CheckBox としてのテキストも表示できます。
複数のCheckBoxを使うことを想定して、簡単に2つのCheckBoxにしてまとめて、lambda式で簡略化してみます。
lambda
Java8の機能の1つで関数型プログラミングを行うために導入され、Android Studio 2.4 辺りから使える...
MainActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
//package com.example.testcheckbox; import android.os.Bundle; import android.widget.CheckBox; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; public class MainActivity extends AppCompatActivity { private final CheckBox[] checkBox = new CheckBox[2]; private final String[] str = {"未チェックです", "チェックされた", "チェックされてない"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_main); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); checkBox[0] = findViewById(R.id.checkbox_1); // チェック状態を false に設定 checkBox[0].setChecked(false); checkBox[0].setText(str[0]); // リスナーを登録 checkBox[0].setOnClickListener(v -> { // チェックステータス取得 boolean check = checkBox[0].isChecked(); if (check) { checkBox[0].setText(str[1]); } else { checkBox[0].setText(str[2]); } }); checkBox[1] = findViewById(R.id.checkbox_2); // チェック状態を false に設定 checkBox[1].setChecked(false); checkBox[1].setText(str[0]); // リスナーを登録 checkBox[1].setOnClickListener(v -> { // チェックステータス取得 boolean check = checkBox[1].isChecked(); if (check) { checkBox[1].setText(str[1]); } else { checkBox[1].setText(str[2]); } }); } } |
activity_main.xml
LinearLayoutで作ってます
ContraintLayoutでももちろん可能ですが
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingStart="30dp" android:paddingEnd="10dp" android:gravity="center_vertical" tools:context=".MainActivity" > <CheckBox android:id="@+id/checkbox_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="20dp" android:textSize="30sp" /> <CheckBox android:id="@+id/checkbox_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="20dp" android:textSize="30sp" /> </LinearLayout> |
Reference:
Checkboxes | Android Developers