В этом уроке мы рассмотрим пример использования радио кнопки в Android. Для тех, кто только начал изучать программирование под Android, советую сначала посмотреть пример работы с простым виджетом Button.
Что такое радио кнопка в Android
Виджет RadioButton
— это кнопка, которая может принимать только два положения (ВКЛ и ВЫКЛ). RadioButton
обычно работает с RadioGroup
, который содержит несколько радио кнопок. При работе с RadioGroup
активным может быть только один виджет RadioButton
. После нажатия на одну радио кнопку, пользователь уже не может повторным нажатием отключить ту же кнопку. Это можно сделать только с помощь нажатия на другую кнопку в RadioGroup
.
Атрибуты и свойства виджета RadioButton
- Атрибут
android:orientation
использованный вRadioGroup
, определяет расположение дочернего элемента. Это может быть как горизонтальное, так и вертикальное положение элементов. - Метод
check(id)
активирует радио кнопку по переданному в параметр идентификатору. - Метод
clearCheck()
— очищает или отменяет выбор какого-то переключателяRadioButton
. После применения этого метода ни одна кнопка вRadioGroup
не будет выбрана и последующий вызов методаgetCheckedRadioButtonId()
возвращаетnull
. - Метод
getCheckedRadioButtonId()
возвращает идентификатор выбранного переключателя в этой группе радио кнопок. Если вRadioGroup
нет дочерних элементовRadioButton
, то будет возвращено -1. - Метод
setOnCheckedChangeListener()
применяет функцию обратного вызова, которая будет вызвана в случае изменения переключателя в даннойRadioGroup
. При использовании методаsetOnCheckedChangeListener()
необходимо указать экземплярRadioGroup.OnCheckedChangeListener
.
Пример использования RadioButton в Android
Для начала нам нужно создать простой андроид-проект. Как это сделать описано в этой статье. Ниже представлено содержимое макета activity_main.xml
:
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 60 61 62 63 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="20dp"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Как вам сайт Javadevblog.com?" android:textAppearance="?android:attr/textAppearanceLarge" /> <RadioGroup android:id="@+id/radioGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:orientation="vertical"> <RadioButton android:id="@+id/radioButton1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Отличный сайт, все устраивает" /> <RadioButton android:id="@+id/radioButton2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Хороший сайт, но мало статей" /> <RadioButton android:id="@+id/radioButton3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Не нравится, читаю только документацию" /> </RadioGroup> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/radioGroup" android:orientation="horizontal"> <Button android:id="@+id/clearBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:onClick="onClear" android:text="Сбросить выбор" /> <Button android:id="@+id/submitBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:onClick="onSubmit" android:text="ОК" /> </RelativeLayout> </RelativeLayout> |
Обратите внимание, я использовал атрибут android:onClick
в макете виджетов Button
, чтобы сразу назначить методы, которые будут вызываться по нажатию на эти кнопки. Эти методы (onClear и onSubmit) представлены в классе 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 |
package ua.com.prologistic.radiobuttons; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private RadioGroup radioGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Инициализируем объект RadioGroup и устанавливаем обработчик нажатий radioGroup = (RadioGroup) findViewById(R.id.radioGroup); radioGroup.clearCheck(); // Устанавливаем onСheckedChangeListener на виджет RadioGroup radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // находим по идентификатору нажатую пользователем радио кнопку RadioButton rb = (RadioButton) group.findViewById(checkedId); if (rb != null && checkedId > -1) { // если такая кнопка есть и все нормально, то вызываем всплывающее окно // с текстом радиокнопки Toast.makeText(MainActivity.this, rb.getText(), Toast.LENGTH_SHORT).show(); } } }); } // Сбросить выбор всех клавиш public void onClear(View v) { radioGroup.clearCheck(); } // метод, который срабатывает по нажатию кнопки 'OK' public void onSubmit(View v) { // инициализируем по id нажатой радио кнопки RadioButton rb = (RadioButton) radioGroup.findViewById(radioGroup.getCheckedRadioButtonId()); if (rb != null) { // если все в порядке, то выводим на экран содержимое радиокнопки Toast.makeText(MainActivity.this, rb.getText(), Toast.LENGTH_SHORT).show(); } else { // если же кнопки были сброшены, то выводим на экран сообщение об ошибке Toast.makeText(MainActivity.this, "Ничего не выбрано!", Toast.LENGTH_SHORT).show(); } } } |
Теперь запустим приложение на устройстве или эмуляторе и проверим работоспособность наших радио кнопок:
Как видим, все запустилось нормально и отлично работает. Следите за другими уроками раздела Программирование под Android.