Android radiobutton text padding

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):

Готово! Можете запускать проект и проверять работу переключателей.

Источник

Добавить маржу между RadioButton и его лейблом в Android?

Можно ли добавить немного пространства между RadioButton и лейблом, все еще используя встроенные компоненты Android? По умолчанию текст выглядит немного раздраженным.

Я пробовал пару вещей:

Задание поля и отступов кажется добавленным пространством вокруг всего элемента (кнопка и текст вместе). Это имеет смысл, но не делает то, что мне нужно.

Создание пользовательского чертежа с помощью XML, определяющего изображения для отмеченных и непроверенных состояний, затем добавление нескольких дополнительных пикселей в правую сторону каждого изображения. Это должно работать, но теперь вы выходите за пределы пользовательского интерфейса по умолчанию. (Не конец света, но не идеальный)

Добавьте дополнительные пробелы в начало каждой метки. Android, похоже, обрезает ведущий символ пробела, как в «My String», но указание unicode U + 00A0, как в «\ u00A0My String», делает трюк. Это работает, но кажется грязным.

Какие-нибудь лучшие решения?

Для тех, кто читает это сейчас. Принятый ответ приведет к некоторым проблемам с макетом на более поздней apis, вызвав слишком много отступов.

В интерфейсе API Кроме того, патч девять фона также изменяет границы представления относительно представления.

В API 17 левое заполнение относится к переключателю с переключателем. То же самое касается девятого патча. Чтобы лучше проиллюстрировать различия в отступлении, см. Прикрепленный снимок экрана.

Если вы копаете код, вы найдете новый метод в api 17, называемый getHorizontalOffsetForDrawables . Этот метод вызывается при вычислении левого заполнения для переключателя (следовательно, дополнительное пространство, показанное на рисунке).

TL; DR У вас должен быть стиль радиокнига для минимального sdk, который вы поддерживаете, и другой стиль для api 17+

Не уверен, что это исправит вашу проблему, но вы пробовали свойство Radio Pad «Padding left» со значением 50dip или более

Я попробовал несколько способов и закончил с этим, правильно работающим как на эмуляторе, так и на устройствах:

  • Андроид: фон должен быть прозрачным, как кажется на api10, есть фон с внутренними paddings (не пробовал с другим apis, но решение работает и на других)
  • Android: кнопка должна быть нулевой, поскольку paddings не будут работать правильно, иначе
  • Android: drawableLeft необходимо указать вместо android: button
  • Android: drawablePadding – это пространство, которое будет находиться между вашим рисунком и вашим текстом

Добавьте марку между ярлыком для радиопередатчика с помощью paddingLeft :

Просто установите свое пользовательское дополнение .

Свойство xml RadioButton.

Готово

Используйте следующие атрибуты XML. Это сработало для меня

Для использования API

Для использования API> = 17

Дополнительно: атрибут drawablePadding не работает. Он работает только в том случае, если вы добавили в свой переключатель. Например:

Не могу попробовать это прямо сейчас, чтобы проверить, но попытались ли вы проверить, делает ли атрибут android: drawablePadding то, что вам нужно?

Прокладка между чертежами и текстом. Это будет достигнуто добавлением строки ниже в xml-файл. android:drawablePadding=»@dimen/10dp»

Я попробовал, «android: paddingLeft» будет работать. PaddingLeft будет влиять только на текст, сохраняя изображение радио в исходном положении.

«Android: paddingLeft» работает корректно только в Android 4.2.2

Я пробовал почти все версии Android и работает только в версии 4.2.2.

Я пришел сюда, чтобы найти ответ, и самый простой способ (после некоторого размышления) заключался в том, чтобы добавить начало в начале самого ярлыка

Для меня работает:

Вы можете попробовать использовать атрибут гравитации переключателя.

Это приведет к выравниванию текста до самого конца. Проверьте первое радио на изображении ( http://imgur.com/r9tHJCf )

Вы можете использовать этот код в своем XML-файле

Или использовать его для класса Activity

Я использую другой подход, который, я думаю, должен работать на всех версиях API. Вместо применения дополнения я добавляю пустой вид между RadioButtons:

Источник

Android RadioButton with Examples

In android, Radio Button is a two-states button that can be either checked or unchecked and it’s the same as CheckBox control, except that it will allow only one option to select from the group of options.

The user can press or click on the radio button to make it select. In android, CheckBox control allow users to change the state of control either Checked or Unchecked but the radio button cannot be unchecked once it is checked.

Читайте также:  Закрыть alertdialog android studio

Generally, we can use RadioButton controls in an android application to allow users to select only one option from the set of values.

Following is the pictorial representation of using RadioButton control in android applications.

In android, we use radio buttons with in a RadioGroup to combine multiple radio buttons into one group and it will make sure that users can select only one option from the group of multiple options.

By default, the android RadioButton will be in OFF (Unchecked) state. We can change the default state of RadioButton by using android:checked attribute.

In case, if we want to change the state of RadioButton to ON (Checked), then we need to set android:checked = “true” in our XML layout file.

In android, we can create RadioButton control in two ways either in the XML layout file or create it in the Activity file programmatically.

Create RadioButton in XML Layout File

Following is the sample way to define RadioButton control using RadioGroup in the XML layout file in the android application.

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= «match_parent» >
RadioGroup
android :layout_width= «match_parent»
android :layout_height= «wrap_content»
android :orientation= «vertical» >
RadioButton
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :text= «Java»
android :checked= «true»/>
RelativeLayout >

If you observe above code snippet, here we defined RadioButton control and setting RadioButton state ON using android:checked attribute in xml layout file.

Create RadioButton Control in Activity File

In android, we can create RadioButton control programmatically in activity file based on our requirements.

Following is the example of creating a RadioButton control dynamically in activity file.

LinearLayout layout = (LinearLayout)findViewById(R.id. l_layout );
RadioButton rd = new RadioButton( this );
rd.setText( «Tutlane» );
rd.setChecked( true );
layout.addView(rd);

This is how we can define RadioButton in XML layout file or programmatically in activity file based on our requirements.

Handle Android RadioButton Click Events

Generally, whenever the user click on RadioButton to Select or Deselect the RadioButton object will receives an on-click event.

In android, we can define RadioButton click event in two ways either in the XML layout file or create it in Activity file programmatically.

Define RadioButton Click Event in XML Layout File

We can define click event handler for button by adding the android:onClick attribute to the element in our XML layout file.

The value of android:onClick attribute must be the name of the method which we need to call in response to a click event and the Activity file which hosting XML layout must implement the corresponding method.

Following is the example of defining a RadioButton click event using android:onClick attribute in XML layout file.

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= «match_parent» >
RadioGroup
android :layout_width= «match_parent»
android :layout_height= «wrap_content»
android :orientation= «vertical» >
RadioButton
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :text= «Java»
android :onClick= «onRadioButtonClicked»/>

In Activity that hosts our XML layout file, we need to implement click event method like as shown below.

public void onRadioButtonClicked(View view) <
// Is the view now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which RadioButton was clicked
switch (view.getId()) <
case R.id.chk1:
if (checked)
// Do your coding
else
// Do your coding

break ;
// Perform your logic
>
>

Define RadioButton Click Event in Activity File

In android, we can define RadioButton click event programmatically in Activity file rather than XML layout file.

To define RadioButton click event programmatically, create View.OnClickListener object and assign it to the button by calling setOnClickListener(View.OnClickListener) like as shown below.

This is how we can handle RadioButton click events in android applications based on our requirements.

Android RadioButton Control Attributes

Following are the some of commonly used attributes related to RadioButton control in android applications.

Attribute Description
android:id It is used to uniquely identify the control
android:checked It is used to specify the current state of radio button
android:gravity It is used to specify how to align the text like left, right, center, top, etc.
android:text It is used to set the text for the radio button.
android:textColor It is used to change the color of text.
android:textSize It is used to specify the size of the text.
android:textStyle It is used to change the style (bold, italic, bolditalic) of text.
android:background It is used to set the background color for radio button control.
android:padding It is used to set the padding from left, right, top and bottom.
android:onClick It’s the name of the method to invoke when the radio button clicked.
android:visibility It is used to control the visibility of control.

Android RadioButton Control Example

Following is the example of defining a multiple RadioButton controls, one TextView control and one Button control in RelativeLayout to get the selected values of RadioButton controls when we click on Button in the android application.

Create a new android application using android studio and give names as RadioButtonExample. In case if you are not aware of creating an app in android studio check this article Android Hello World App.

Now open an activity_main.xml file from \res\layout path and write the code like as shown below

activity_main.xml

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= «match_parent» >
TextView
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :layout_marginTop= «150dp»
android :layout_marginLeft= «100dp»
android :textSize= «18dp»
android :text= «Select Your Course»
android :textStyle= «bold»
android :id= «@+id/txtView»/>
RadioGroup
android :layout_width= «match_parent»
android :layout_height= «wrap_content»
android :orientation= «vertical»
android :id= «@+id/rdGroup»
android :layout_below= «@+id/txtView» >
RadioButton
android :id= «@+id/rdbJava»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :padding= «10dp»
android :layout_marginLeft= «100dp»
android :text= «Java»
android :onClick= «onRadioButtonClicked»/>
RadioButton
android :id= «@+id/rdbPython»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :padding= «10dp»
android :layout_marginLeft= «100dp»
android :text= «Python»
android :onClick= «onRadioButtonClicked»/>
RadioButton
android :id= «@+id/rdbAndroid»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :padding= «10dp»
android :layout_marginLeft= «100dp»
android :text= «Android»
android :onClick= «onRadioButtonClicked»/>
RadioButton
android :id= «@+id/rdbAngular»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :padding= «10dp»
android :layout_marginLeft= «100dp»
android :text= «AngularJS»
android :onClick= «onRadioButtonClicked»/>
RadioGroup >
Button
android :id= «@+id/getBtn»
android :layout_width= «wrap_content»
android :layout_height= «wrap_content»
android :layout_marginLeft= «100dp»
android :layout_below= «@+id/rdGroup»
android :text= «Get Course»/>
RelativeLayout >

If you observe above code we created a multiple RadioButton controls, one TextView control and one Button control in XML Layout file.

Once we are done with the creation of layout with required controls, we need to load the XML layout resource from our activity onCreate() callback method, for that open main activity file MainActivity.java from \java\com.tutlane.radiobuttonexample path and write the code like as shown below.

MainActivity.java

package com.tutlane.radiobuttonexample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity <
RadioButton android , java , angular , python ;
@Override
protected void onCreate(Bundle savedInstanceState) <
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
android = (RadioButton)findViewById(R.id. rdbAndroid );
angular = (RadioButton)findViewById(R.id. rdbAngular );
java = (RadioButton)findViewById(R.id. rdbJava );
python = (RadioButton)findViewById(R.id. rdbPython );
Button btn = (Button)findViewById(R.id. getBtn );
btn.setOnClickListener( new View.OnClickListener() <
@Override
public void onClick(View v) <
String result = «Selected Course: » ;
result+= ( android .isChecked())? «Android» 🙁 angular .isChecked())? «AngularJS» 🙁 java .isChecked())? «Java» 🙁 python .isChecked())? «Python» : «» ;
Toast.makeText(getApplicationContext(), result, Toast. LENGTH_SHORT ).show();
>
>);
>
public void onRadioButtonClicked(View view) <
boolean checked = ((RadioButton) view).isChecked();
String str= «» ;
// Check which radio button was clicked
switch (view.getId()) <
case R.id. rdbAndroid :
if (checked)
str = «Android Selected» ;
break ;
case R.id. rdbAngular :
if (checked)
str = «AngularJS Selected» ;
break ;
case R.id. rdbJava :
if (checked)
str = «Java Selected» ;
break ;
case R.id. rdbPython :
if (checked)
str = «Python Selected» ;
break ;
>
Toast.makeText(getApplicationContext(), str, Toast. LENGTH_SHORT ).show();
>
>

If you observe above code we are calling our layout using setContentView method in the form of R.layout.layout_file_name in our activity file. Here our xml file name is activity_main.xml so we used file name activity_main and we are getting the status of RadiButton controls when they Select / Deselect and getting selected RadioButton control value on Button click.

Generally, during the launch of our activity, onCreate() callback method will be called by the android framework to get the required layout for an activity.

Output of Android RadioButton Example

When we run the above example using android virtual device (AVD) we will get a result like as shown below.

If you observe the above result, we are able to select only one option from the set of values and getting the selected RadioButton value on button click.

This is how we can use RadioButton control in android applications to allow users to select only one option from a set of values based on our requirements.

Источник

Читайте также:  Charles proxy сертификат для android
Оцените статью