CheckBox это специфичная кнопка, имеющая два состояния (отмечена или не отмечена), которая представляет собой флажок, позволяющий пользователю выбирать один или несколько параметров в наборе.
Флажки удобно использовать, например, в настройках приложения, чтобы отмечать нужные функции, либо в списках, где необходимо выбрать сразу несколько элементов.
Чтобы добавить CheckBox в приложение, достаточно разместить следующий код:
<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test 1" />
Если одного флажка мало, вы можете добавить несколько.
С помощью атрибута android:text вы можете задать текст, который будет пояснять, какое действие произойдёт при активации флажка. Также текст можно задать программно с помощью метода setText(). Получить текст можно с помощью метода getText().
CheckBox check = findViewById(R.id.check_1); check.setText("Какой-то текст");
Состояние флажка меняется, когда пользователь нажимает на него, либо программно. Чтобы изменить программно, можно воспользоваться методами setChecked() или toggle().
CheckBox check = findViewById(R.id.check_1); check.setChecked(true); // установит флажок в одно из состояний: true - активное, false - неактивное check.toggle(); // меняет текущее состояние на противоположное
Также можно задать состояние флажка заранее через XML при создании CheckBox с помощью атрибута android:checked.
<CheckBox android:id="@+id/check_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test 1" android:checked="true" />
Аналогично ToggleButton, к флажкам можно добавить слушатель, который будет выполнять нужные операции при изменении состояния флажка. Сделать это можно с помощью метода setOnCheckedChangeListener(), либо интерфейса OnCheckedChangeListener (о том, как пользоваться интерфейсами, описано здесь).
CheckBox check = findViewById(R.id.check_1); check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (compoundButton.isChecked()) { // делаем работу, если кнопка стала активной } else { // делаем работу, если кнопка перестала быть активной } } });
Чтобы узнать текущее состояние флажка, можно воспользоваться методом isChecked(), который вернёт true, если флажок активен и false – неактивен. Например, можно считывать значения флажков и выполнять соответствующие операции.
final CheckBox check1 = findViewById(R.id.check_1); final CheckBox check2 = findViewById(R.id.check_2); final CheckBox check3 = findViewById(R.id.check_3); Button btn_test = findViewById(R.id.btn_test); btn_test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!check1.isChecked() && !check2.isChecked() && !check3.isChecked()) { Toast.makeText(getApplicationContext(), "Ничего не выбрано", Toast.LENGTH_SHORT).show(); } else { String s = (check1.isChecked() ? "\n" + check1.getText().toString() : "") + (check2.isChecked() ? "\n" + check2.getText().toString() : "") + (check3.isChecked() ? "\n" + check3.getText().toString() : ""); Toast.makeText(getApplicationContext(), "Выбраны:" + s, Toast.LENGTH_SHORT).show(); } } });
При необходимости, можно изменить цвет флажка со стандартного на какой-либо другой. Для этого в папке res/values/styles.xml нужно создать новый стиль. Возьмём, например, основной цвет приложения.
<style name="MyCheckBox" parent="Widget.AppCompat.CompoundButton.CheckBox"> <item name="colorAccent">@color/colorPrimary</item> </style>
После этого в коде разметки для CheckBox нужно добавить атрибут android:theme и указать созданный стиль.
<CheckBox android:id="@+id/check_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test 1" android:textSize="14sp" android:theme="@style/MyCheckBox" /> <CheckBox android:id="@+id/check_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test 2" android:textSize="14sp" android:theme="@style/MyCheckBox" /> <CheckBox android:id="@+id/check_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test 3" android:textSize="14sp" android:theme="@style/MyCheckBox" />
Теперь наши флажки будут окрашены в цвет, который мы задали в стилях.