- RadioButton и RadioGroup
- Методы
- Программное добавление переключателя
- Добавление картинок к переключателю
- Пример с переключателями
- Слушатель OnCheckedChangeListener
- Метод clearCheck()
- Метод getCheckedRadioButtonId(): Узнать выбранный элемент
- Кот или муж?
- Собственные стили
- Собственный вид
- Radio Button style programmatically
- 4 Answers 4
- Изменение размера и стиля шрифта через Radiobutton (Android Studio)
- RadioButton
- 1. Добавление через XML
- 2. Добавление программно
- 1. Метод android:onClick
- 2. Метод setOnClickListener()
- 3. Метод setOnCheckedChangeListener()
RadioButton и RadioGroup
Познакомимся с компонентом RadioButton, который находится в разделе Buttons. Главная особенность элемента состоит в том, что он не используется в одиночестве. Всегда должно быть два и более переключателя и только один из них может быть выбранным. Это похоже на кнопки на старых радиоприёмниках, когда нажимая на одну из кнопок, вы заставляете отключиться другую нажатую кнопку.
Компоненты RadioButton (переключатель) используются в составе контейнера RadioGroup. Обратите внимание на два момента. Первое — в контейнер RadioGroup можно включать не только RadioButton, но и другие элементы, например, TextView. Второе — переключатели работают в своём контейнере, т.е. если у вас два контейнера RadioGroup, то переключатели из одного контейнера не влияют на поведение переключателей второго контейнера.
Методы
Основным методом для переключателя является toggle(), который инвертирует состояние переключателя. Также представляют интерес методы isChecked(), который возвращает состояние кнопки, и setChecked(), изменяющий состояние кнопки в зависимости от параметра.
Для уведомления о переходе положения переключателя в активное или неактивное состояние в результате определённых событий, нужно вызывать метод setOnCheckedChangeListener() с применением слушателя OnCheckedChangeListener.
Программное добавление переключателя
Получив ссылку на группу переключателей, можно добавить в неё ещё один переключатель (или другой элемент управления) через метод addView():
Добавление картинок к переключателю
Вы можете добавить изображение в левой, правой, верхней и нижней части переключателя, используя либо определённые атрибуты XML или программно.
Через атрибут drawableRight и ему подобных:
Программно через метод setCompoundDrawables(left, top, right, bottom):
В этом примере мы указали только одно значение для правого края, остальным присвоили значение null. Можно одновременно задействовать все стороны переключателя.
Пример с переключателями
Создадим новую форму с четырьмя кнопками-переключателями, с помощью которых будем заливать фон приложения выбранным цветом. Сначала подготовим строковые ресурсы.
Создадим простейшую разметку на основе LinearLayout. Заполним форму текстовым блоком определённого цвета и присвоим ему текст «Текущий цвет». В нижней части формы расположим четыре цветных текстовых блока, а под ними четыре переключателя, с помощью которых мы будем менять цвет основного текстового блока.
Обратите внимание, что элементы RadioButton помещаются в контейнер RadioGroup. Если теперь посмотреть на форму, то увидим одно большое серое поле. А снизу расположились в ряд четыре метки, а ещё ниже также в ряд расположились четыре переключателя. Причём последний серый переключатель имеет выбранный статус (android:checked=»true»).
Переходим к программной части. Добавляем слушатель для обработки щелчков на кнопках-переключателях.
Запустим приложение и посмотрим, что у нас получилось. Пощёлкаем по переключателям и убеждаемся, что всё работает.
Слушатель OnCheckedChangeListener
Показанный выше способ использует щелчок, так как переключатели можно рассматривать как кнопки. Но на самом деле у переключателей есть свой слушатель OnCheckedChangeListener. Я расположил в новом проекте RadioGroup с тремя RadioButton и написал простенький пример.
Этот способ намного удобней. Вам даже не нужно объявлять ссылки на переключатели и назначать им слушатели. Код получается более компактным.
Обратите внимание, что метод onCheckedChanged() принимает параметр RadioGroup, что позволяет применять один и тот же слушатель OnCheckedChangeListener() для нескольких групп переключателей. Вариант -1 сработает, когда группа переключателей будет сброшена в коде с помощью метода clearCheck().
Метод clearCheck()
Когда пользователь выберет любой из переключателей, то он уже не сможет снять с него отметку. Какой-нибудь из переключателей обязательно будет выбран в одном контейнере с ним. Единственный способ очистить все переключатели — программно вызвать метод clearCheck(), который относится к классу RadioGroup.
Метод getCheckedRadioButtonId(): Узнать выбранный элемент
У RadioGroup есть также метод getCheckedRadioButtonId(), который позволяет узнать идентификатор выбранного переключателя. Можем узнать выбранный переключатель через нажатие кнопки.
Также можно узнать индекс выбранного переключателя через метод indexOfChild():
Кот или муж?
Теперь, когда вы познакомились с новым элементом, то вам не составит труда написать программу для нелёгкого выбора.
Девушки, нужен ли вам такой муж? Если он не любит котиков, то будет ли любить вас? Возьмите лучше котёнка. Он клёвый.
Собственные стили
Если вы используете стандартный проект, то переключатели будут использовать цвета Material Design, в частности цвет colorAccent для кружочка с точкой.
В файле res/values/styles.xml добавим строки:
Свойство colorControlNormal отвечает за окружность в невыбранном состоянии, а colorControlActivated за точку и окружность в выбранном состоянии.
Присваиваем созданный стиль атрибуту android:theme:
Теперь цвета флажков изменились.
Собственный вид
Если вас не устраивает стандартный вид элементов RadioButton, то не составит никакого труда реализовать свои представления о дизайне.
В папке res/drawable создаём файл radiobutton_selector.xml:
Также необходимо подготовить два изображения для двух состояний — выбран и не выбран.
Осталось прописать селектор в элементе RadioButton при размещении на экране (атрибут android:button):
Готово! Можете запускать проект и проверять работу переключателей.
Источник
Radio Button style programmatically
I would to create a number of radio button dinamically in a fragment, I only have problem with style. If I put radiobutton code in the xml file, default style is applied correctly, but when I create radiobutton through a function I see different style!
This code is put in onCreateView in the fragment
As you can see radio buttons have different style, someone could help me, if is possibile, to apply default style programmatically?
4 Answers 4
you have to create style on drawable or style.xml, as your requirement.
drawable/null_selector.xml
Set each button to use it (and to center the text) like this (R.drawable.null_selector is selector XML):
Now, In your Activity, you must be implement such style.
I think, this will help you for implementing custom style in Radio Button.
Thanks Dharma, I followed your suggestion, changing something, and I solved!
XML RADIO BUTTON SELECTOR with checked and unchecked button image
Use an Inflater instance to inflate a custom layout and easily get a custom Radiobutton
by Ubirajara (México)
Programmatically, I recommend setting a ColorStateList to each radio button in the loop like this: radioButton.setButtonTintList(getRadioButtonColors());
Where android.R.attr.state_checked defines the color for the checked button (green) and android.R.attr.state_enabled defines the color for unchecked buttons (blue).
Personally I think this is a better solution because it’s more concise than creating styles and other dependencies elsewhere in the codebase. Whenever possible use the most concise and efficient approach.
Источник
Изменение размера и стиля шрифта через Radiobutton (Android Studio)
Вывод строки с изменение размера шрифта и стиля
Доброго времени суток, форумчане, подскажите пожалуйста. Как сделать вывод строки в TextBlock.
Изменение шрифта, стиля шрифта, толщины и т.д., надписи у кнопки
Всем доброго времени суток! Появился вопрос. Есть ли способ изменить размер шрифта, его стиль.
Изменение стиля RadioButton
Здравствуйте! Не подскажите, возможно ли сделать так, что бы точка, которая выделяется при нажатии.
Изменение стиля шрифта
Здравствуйте, имеется имеется RichTextBox: 9
Tim11, 1. Не нужно писать везде this
2. Зачем тебе два onCreate?
3. Скинь лог ошибки
Добавлено через 5 минут
Tim11,
у тебя у кнопки в layout android:onClick=»onClickSave»
но в коде ты не вызвал этот клик
Не нужно так делать
Это logcat при нажатии на любую радиокнопку при вылете, много «This», сори, спасибо туториалам индийцев из ютуба
Добавлено через 4 минуты
Sergey_997, если нужно, могу скинуть весь проект
Теперь вообще активити настроек не открывает..
Переход из main activity происходит и все, окно настроек открыто, но ничего не отображается.
Вот что пишет в Run
05/03 11:19:33: Launching ‘app’ on samsung SM-A305FN.
App restart successful without requiring a re-install.
$ adb shell am start -n «com.example.shablon_recepty/com.example.shablon_recepty.MainActivity» -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 25819 on device ‘samsung-sm_a305fn-R58M53SNJSA’.
Capturing and displaying logcat messages from application. This behavior can be disabled in the «Logcat output» section of the «Debugger» settings page.
W/ComponentDiscovery: Class com.google.firebase.dynamicloading.DynamicLoadingRegistrar is not an found.
I/FirebaseApp: Device unlocked: initializing all Firebase APIs for app [DEFAULT]
I/FirebaseInitProvider: FirebaseApp initialization successful
I/MultiWindowDecorSupport: updateCaptionType >> DecorView@3a47247[], isFloating: false, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true
D/MultiWindowDecorSupport: setCaptionType = 0, DecorView = DecorView@3a47247[]
W/shablon_recept: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/RectZ (greylist, reflection, allowed)
Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
D/ViewRootImpl@1477e78[MainActivity]: setView = com.android.internal.policy.DecorView@3a47247 TM=true MM=false
D/ViewRootImpl@1477e78[MainActivity]: Relayout returned: old=(0,0,1080,2340) new=(0,0,1080,2340) req=(1080,2340)0 dur=8 res=0x7 s=
D/OpenGLRenderer: createReliableSurface : 0x764057abc0, 0x76404fd000
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
W/Gralloc3: mapper 3.x is not supported
I/gralloc: Arm Module v1.0
D/ViewRootImpl@1477e78[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager: prepareNavigationBarInfo() DecorView@3a47247[MainActivity]
getNavigationBarColor() -855310
D/EmergencyMode: [EmergencyManager] android createPackageContext successful
D/InputMethodManager: prepareNavigationBarInfo() DecorView@3a47247[MainActivity]
getNavigationBarColor() -855310
V/InputMethodManager: Starting input: tba=com.example.shablon_recepty ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager: startInputInner — Id : 0
I/InputMethodManager: startInputInner — mService.startInputOrWindowGainedFocus
D/ViewRootImpl@1477e78[MainActivity]: MSG_RESIZED: frame=(0,0,1080,2340) ci=(0,83,0,126) vi=(0,83,0,126) or=1
D/InputMethodManager: prepareNavigationBarInfo() DecorView@3a47247[MainActivity]
getNavigationBarColor() -855310
V/InputMethodManager: Starting input: tba=com.example.shablon_recepty ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager: startInputInner — Id : 0
После нажатия на кнопку перехода в другое активити «Настройки»
Источник
RadioButton
RadioButton представляет собой ещё один элемент списка, аналогичный CheckBox. Однако в отличие от него, RadioButton обладает двумя отличиями:
- RadioButton должен находиться в специальном контейнере RadioGroup.
- Если в наборе может быть выбрано несколько CheckBox, то RadioButton может быть выбран только один.
Поэтому предназначение RadioButton заключается в том, чтобы выбирать какой-то один пункт из списка. Причём выбор элемента списка происходит только в пределах контейнера: RadioButton, расположенные в разных контейнерах, друг с другом никак не связываются.
Перед тем, как создать RadioButton, нужно в коде разметки добавить контейнер RadioGroup.
Добавить в контейнер RadioButton можно двумя способами: через XML и программно.
1. Добавление через XML
Для этого в коде разметки внутри нужно добавить .
С помощью атрибута android:text можно задать текст, описывающий действие, происходящее при выборе пункта списка.
2. Добавление программно
Аналогично первому способу, сначала нужно добавить в разметку RadioGroup о задать ему идентификатор. После этого определяем его в коде разметки.
Теперь нужно создать экземпляры RadioButton и добавить их в контейнер с помощью метода addView().
Как видно, с помощью метода setText() можно задать текст для элемента. Получить текст можно с помощью метода getText().
Оба способа в результате создадут список из трёх элементов.
Выбор элемента происходит с помощью клика пользователя, также разработчик может сам выбирать нужный элемент. Сделать это можно в коде разметки:
Или в коде активности:
Узнать, выбран ли элемент списка, можно с помощью метода isChecked(), который вернёт true, если элемент выбран, и false — не выбран.
Обрабатывать нажатия на элементы списка можно тремя разными способами:
1. Метод android:onClick
Аналогично любым другим компонентам, в XML можно задать атрибут android:onClick и передать в него имя метода, обрабатывающего нажатия.
Чтобы использовать метод для обработки кликов, он должен соответствовать следующим требованиям:
- быть public
- возвращать void
- принимать в качестве единственного параметра экземпляр класса View
Затем в этом методе можно определять идентификатор нажатого элемента и выполнять соответствующие операции.
2. Метод setOnClickListener()
В коде активности можно создать экземпляр класса OnClickListener, который будет обрабатывать нажатия на элементы списка.
Затем этот слушатель назначается кнопкам с помощью метода setOnClickListener().
3. Метод setOnCheckedChangeListener()
Предыдущий метод отслеживает сами нажатия, однако существует также метод setOnCheckedChangeListener(), который отслеживает изменение выбранного элемента в контейнере RadioGroup.
На всех трёх способах мы заранее знаем идентификаторы нажатых элементов. Однако если идентификатор нужно получить программно, это можно сделать с помощью метода getCheckedRadioButtonId().
При необходимости, можно изменить цвет кружка со стандартного на какой-либо другой. Для этого в папке res/values/styles.xml нужно создать новый стиль. Возьмём, например, основной цвет приложения.
После этого в коде разметки для RadioButton нужно добавить атрибут android:theme и указать созданный стиль.
В результате кнопки перекрасятся в тот цвет, который мы указали.
Источник