Добавить маржу между 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>