Добавить поле между RadioButton и его меткой в ​​Android? - PullRequest
73 голосов
/ 25 января 2010

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

<RadioButton android:id="@+id/rb1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:text="My Text"/>

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

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

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

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

Есть ли лучшие решения?

Ответы [ 19 ]

101 голосов
/ 24 мая 2013

Для тех, кто читает это сейчас, принятый ответ приведет к некоторым проблемам с макетом на новых API, вызывающим слишком большое заполнение.

В API <= 16 вы можете установить <code>paddingLeft для переключателя, чтобы установить отступ относительно границ представления переключателя. Кроме того, фон патча 9 также меняет границы вида относительно вида.

При API> = 17 paddingLeft (или paddingStart) относится к переключаемой кнопке. То же относится и к пятому патчу. Чтобы лучше проиллюстрировать различия между отступами, смотрите прикрепленный скриншот.

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

TL; DR Просто используйте paddingLeft, если ваш minSdkVersion равен> = 17. Если вы поддерживаете API <= 16, у вас должен быть стиль переключателя для поддерживаемого min SDK и другой стиль для API 17+. </p>

combine screenshots showing left padding differences between API versions

61 голосов
/ 03 сентября 2010

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

56 голосов
/ 19 февраля 2013

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

    <RadioButton
        android:background="@android:color/transparent"
        android:button="@null"
        android:drawableLeft="@drawable/your_own_selector"
        android:drawablePadding="@dimen/your_spacing" />
  • android: фон должен быть прозрачным, как кажется на api10 есть фон с внутренними отступами (не пробовал с другими apis, но решение работает и на других)
  • android: кнопка должна быть null , так как в противном случае отступы не будут работать правильно
  • android: drawableLeft необходимо указать вместо android: кнопка
  • android: drawablePadding - это расстояние между вашим рисунком и текстом
29 голосов
/ 31 января 2015

Добавить поле между радиокнопкой его меткой от 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" />

Выполнено

21 голосов
/ 11 августа 2016

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

Для API <= 16 используйте </p>

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" />

enter image description here

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

<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" />
5 голосов
/ 25 января 2010

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

4 голосов
/ 18 июня 2014
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),

    checkBox.getPaddingTop(),
    checkBox.getPaddingRight(),
    checkBox.getPaddingBottom());
1 голос
/ 04 ноября 2014

Отступ между рисованными объектами и текстом. Это будет достигнуто путем добавления строки ниже в XML-файл. android:drawablePadding="@dimen/10dp"

0 голосов
/ 16 января 2018

Я знаю, что это старый вопрос, но с этим решением я наконец-то успокоился и забыл об уровне 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>
0 голосов
/ 25 октября 2017

Создайте стиль в 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 косвенно наследует кнопку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...