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

Можно ли добавить немного пространства между 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», делает трюк. Это работает, но кажется грязным.

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

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

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

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

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

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

Объединить скриншоты, показывающие различия в пробелах между версиями api

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

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

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

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

 android:paddingLeft="10dip" 

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

Свойство xml RadioButton.

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

Готово

Используйте следующие атрибуты 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" /> 

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

 final float scale = this.getResources().getDisplayMetrics().density; checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f), checkBox.getPaddingTop(), checkBox.getPaddingRight(), checkBox.getPaddingBottom()); 

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

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

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

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

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

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

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

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

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

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

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

Вы можете использовать этот код в своем 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); 

Использовать гравитацию

  android:gravity="center_horizontal|center_vertical" 

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

 <View android:layout_width="20dp" android:layout_height="1dp" /> 

Это должно дать вам заполнение 20dp.

Intereting Posts