Добавить маржу между RadioButton и его ярлыком в Android?
Можно ли добавить немного места между RadioButton и лейблом при использовании встроенных компонентов Android? По умолчанию текст выглядит немного раздраженным.
<RadioButton android:id="@+id/rb1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="My Text"/>
Я пробовал пару вещей:
-
Задание поля и отступов кажется добавленным пространством вокруг всего элемента (кнопка и текст вместе). Это имеет смысл, но не делает того, что мне нужно.
-
Создание настраиваемого изображения с помощью XML, определяющего изображения для отмеченных и непроверенных состояний, затем добавление нескольких дополнительных пикселей в правую сторону каждого изображения. Это должно работать, но теперь вы выходите за пределы пользовательского интерфейса по умолчанию. (Не конец света, но не идеальный)
-
Добавьте дополнительные пробелы в начало каждой метки. Android, похоже, обрезает ведущий символ пробела, как в "My String", но указание юникода U + 00A0, как и в "\ u00A0My String", делает трюк. Это работает, но кажется грязным.
Любые лучшие решения?
Ответы
Ответ 1
Для тех, кто читает это сейчас, принятый ответ приведет к некоторым проблемам с макетом в новых API, вызывающим слишком много заполнения.
В API <= 16 вы можете установить paddingLeft
для переключателя, чтобы установить отступ относительно границ представления переключателя. Кроме того, патч девятого фона также изменяет границы вида относительно вида.
При API> = 17 paddingLeft
(или paddingStart
) относится к переключаемому переключателю. То же относится и к пятому патчу. Чтобы лучше проиллюстрировать различия между отступами, смотрите прикрепленный скриншот.
Если вы покопаетесь в коде, вы найдете новый метод в API 17, который называется getHorizontOffsetForDrawables. Этот метод вызывается при расчете левого отступа для переключателя (отсюда и дополнительное пространство, показанное на рисунке).
TL; DR Просто используйте paddingLeft
если ваш minSdkVersion
> = 17. Если вы поддерживаете API <= 16, у вас должен быть стиль переключателя для поддерживаемого min SDK и другой стиль для API 17+.
![combine screenshots showing left padding differences between API versions]()
Ответ 2
Не уверен, что это исправит вашу проблему, но вы пробовали функцию Radio Button "Padding left" со значением 50dip и более
Ответ 3
Я попробовал несколько способов и закончил работу с этим, правильно работающим как на эмуляторе, так и на устройствах:
<RadioButton
android:background="@android:color/transparent"
android:button="@null"
android:drawableLeft="@drawable/your_own_selector"
android:drawablePadding="@dimen/your_spacing" />
- андроид: фон должен быть прозрачным, как кажется на api10, есть фон с внутренними paddings (не пробовал с другим apis, но решение работает и на других)
- андроид: кнопка должна быть пустой, поскольку paddings не будут работать правильно.
- android: drawableLeft необходимо указать вместо android: button
- android: drawablePadding - это пространство, которое будет находиться между вашим рисующим и вашим текстом.
Ответ 4
Добавьте margin между радиоблоком ярлыком paddingLeft:
android:paddingLeft="10dip"
Просто настройте свой собственный дополнение.
Свойство RadioButton xml.
<RadioButton
android:id="@+id/radHighest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/YourImageResource"
android:drawablePadding="50dp"
android:paddingLeft="10dip"
android:text="@string/txt_my_text"
android:textSize="12sp" />
Готово
Ответ 5
Используйте следующие атрибуты XML. Это сработало для меня
Для API <= 16 использовать
android:paddingLeft="16dp"
Для API >= 17 используйте
android:paddingStart="@16dp"
Например:
<android.support.v7.widget.AppCompatRadioButton
android:id="@+id/popularityRadioButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:paddingEnd="@dimen/radio_button_text"
android:paddingLeft="@dimen/radio_button_text"
android:paddingRight="@dimen/radio_button_text"
android:paddingStart="@dimen/radio_button_text"
android:text="Popularity"
android:textSize="@dimen/sort_dialog_text_size"
android:theme="@style/AppTheme.RadioButton" />
![введите описание изображения здесь]()
Далее: атрибут drawablePadding
не работает. Он работает только в том случае, если вы добавили в свой переключатель. Например:
<RadioButton
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:button="@null"
android:drawableEnd="@android:drawable/btn_radio"
android:drawablePadding="56dp"
android:drawableRight="@android:drawable/btn_radio"
android:text="New RadioButton" />
Ответ 6
Не могу попробовать это прямо сейчас, чтобы проверить, но попытались ли вы проверить, действительно ли атрибут android:drawablePadding делает что вам нужно?
Ответ 7
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
Ответ 8
Отступы между выводами и текстом. Это будет достигнуто путем добавления строки ниже в xml файл. android:drawablePadding="@dimen/10dp"
Ответ 9
Я попробовал, "android: paddingLeft" будет работать. paddingLeft будет влиять только на текст, сохраняя изображение радиоизображения в исходном положении.
Ответ 10
"android: paddingLeft" работает корректно только в android 4.2.2
Я пробовал почти все версии Android и работает только с версией 4.2.2.
Ответ 11
Я пришел сюда, чтобы найти ответ, и самый простой способ (после некоторого размышления) добавить расстояние в начале самого ярлыка таким образом
<RadioGroup
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/btnChangeMode"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_below="@+id/view3"
android:gravity="center|left"
android:id="@+id/ledRadioGroup">
<RadioButton
android:button="@drawable/custom_radio_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" On"
android:layout_marginRight="6dp"
android:id="@+id/ledon"
android:textColor="@color/white" />
<RadioButton
android:button="@drawable/custom_radio_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Off"
android:layout_marginLeft="6dp"
android:id="@+id/ledoff"
android:textColor="@color/white" />
Ответ 12
для меня работает:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<layer-list>
<item android:right="5dp">
<shape android:paddingLeft="5dp" android:shape="oval">
<size android:width="20dp" android:height="20dp" />
<solid android:color="@color/blue" />
</shape>
</item>
</layer-list>
</item>
<item android:paddingLeft="5dp" android:state_checked="false">
<layer-list>
<item android:right="5dp">
<shape android:paddingLeft="5dp" android:shape="oval">
<size android:width="20dp" android:height="20dp" />
<solid android:color="@color/grey" />
</shape>
</item>
</layer-list>
</item>
</selector>
Ответ 13
<RadioButton
android:id="@+id/rb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@null"
android:paddingLeft="20dp"
android:text="1"
android:textColor="@color/text2"
android:textSize="16sp"
android:textStyle="bold" />
Ответ 14
Вы можете попробовать использовать атрибут гравитации переключателя.
<RadioButton
android:id="@+id/rb_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:gravity="right|center_vertical"
android:padding="@dimen/padding_30dp"
android:text="@string/filter_inv_all"
android:textColor="@color/black"
android:textSize="@dimen/text_size_18" />
Это выровняет текст по правому краю. Проверьте первое радио на изображении.
![enter image description here]()
Ответ 15
Этот код можно использовать в файле XML
<RadioButton
android:id="@+id/rButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="50dp"
android:paddingLeft="10dip"
android:text="@string/your_text" />
или использовать его для класса Activity
radioButton.setPadding(12, 10, 0, 10);
Ответ 16
Использовать гравитацию
android:gravity="center_horizontal|center_vertical"
Ответ 17
Создайте стиль в style.xml, как этот
<style name="Button.Radio">
<item name="android:paddingLeft">@dimen/spacing_large</item>
<item name="android:textSize">16sp</item>
</style>
Поместите этот стиль в радиокнопку
<RadioButton
android:id="@+id/rb_guest_busy"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="@string/guest_is_waiting"
android:textSize="@dimen/font_size_3x_medium"
android:drawablePadding="@dimen/spacing_large"
android:textColor="@color/color_text_heading_dark"
style="@style/Button.Radio"/>
Вы можете изменить любой атрибут так же, как и кнопку, так как RadioButton косвенно наследует кнопку.
Ответ 18
Я использую другой подход, который, я думаю, должен работать на всех версиях API.
Вместо применения дополнения я добавляю пустой вид между RadioButtons:
<View
android:layout_width="20dp"
android:layout_height="1dp" />
Это должно дать вам 20dp дополнение.
Ответ 19
Я знаю, что это старый вопрос, но с этим решением я наконец-то успокоился и забыл об уровне API.
Вертикальная левосторонняя радиогруппа с вертикальным текстовым обзором справа.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RadioGroup>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="8dp"
android:gravity="center_vertical"
android:text="Radio 1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="8dp"
android:gravity="center_vertical"
android:text="Radio 2"/>
</LinearLayout>
</LinearLayout>