在Android中添加RadioButton及其标签之间的边距?

时间:2010-01-25 18:30:51

标签: android radio-button

在使用Android的内置组件时,是否可以在RadioButton和标签之间添加一点空间?默认情况下,文本看起来有点紧张。

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

我尝试过几件事:

  1. 指定边距和填充似乎在整个元素周围添加空间(按钮和文本,一起)。这是有道理的,但不能满足我的需要。

  2. 通过XML创建自定义drawable,为已检查和未检查的状态指定图像,然后在每个图像的右侧添加一些额外的像素。这应该可行,但现在您已经超出默认UI。 (不是世界末日,但不理想)

  3. 在每个标签的开头添加额外的空格。 Android似乎修剪了一个领先的空格字符,如“我的字符串”,但是指定unicode U + 00A0,就像“\ u00A0My String”一样。这有效,但看起来有点脏。

  4. 有更好的解决方案吗?

19 个答案:

答案 0 :(得分:99)

对于现在读这篇文章的人。接受的答案将导致新的api上的一些布局问题导致填充太多。

在API&lt; = 16上,您可以在单选按钮上设置填充,以设置相对于单选按钮视图边界的填充。此外,补丁九背景也会改变相对于视图的视图边界。

在API 17上,左边的填充与可绘制的单选按钮相关。同样适用于九个补丁。为了更好地说明填充差异,请参阅随附的屏幕截图。

如果您仔细查看代码,您会在api 17中找到一个名为getHorizontalOffsetForDrawables的新方法。计算单选按钮的左边距时会调用此方法(因此图中所示的附加空间)。

TL; DR您应该为您支持的min sdk设置单选按钮样式,并为api 17 +

设置另一种样式

combine screen shots showing left padding differences between api versions

答案 1 :(得分:61)

不确定这是否可以解决您的问题,但您是否尝试过Radio Button的“Padding left”属性,其值为50dip或更多

答案 2 :(得分:56)

我尝试了几种方法,并在模拟器和设备上完成了正确的工作:

    <RadioButton
        android:background="@android:color/transparent"
        android:button="@null"
        android:drawableLeft="@drawable/your_own_selector"
        android:drawablePadding="@dimen/your_spacing" />
  • android:background 需要透明,因为它似乎在api10上有一个带有内在填充的背景(没有尝试过其他apis但是解决方案也适用于其他apis)。
  • android:按钮需要 null ,因为paddings无法正常工作,否则
  • 需要指定
  • android:drawableLeft 而不是 android:button
  • android:drawablePadding 是您的drawable和您的文字之间的空间

答案 3 :(得分:29)

radiobutton 标签之间添加保证金 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" />

完成

答案 4 :(得分:21)

使用以下XML属性。它对我有用

对于API&lt; = 16,使用

android:paddingLeft="16dp"

对于API&gt; = 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时,它才有效。对于Eg:

<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 :(得分:5)

现在无法尝试验证,但您是否尝试过查看属性android:drawablePadding是否符合要求?

答案 6 :(得分:4)

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

    checkBox.getPaddingTop(),
    checkBox.getPaddingRight(),
    checkBox.getPaddingBottom());

答案 7 :(得分:1)

drawables和text之间的填充。它将通过在xml文件中添加以下行来实现。    android:drawablePadding="@dimen/10dp"

答案 8 :(得分:0)

“android:paddingLeft”似乎只能在android 4.2.2下正常工作

我已经尝试了几乎所有版本的android,它只适用于4.2.2版本。

答案 9 :(得分:0)

我试过,“android:paddingLeft”会有效。 paddingLeft只会影响文本,同时保持广播图像保持原始位置。

答案 10 :(得分:0)

我来到这里寻找答案,最简单的方法(经过一番思考)是在标签开头添加间距,就像这样

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

答案 11 :(得分:0)

对我而言:

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

您可以尝试使用单选按钮的gravity属性。

<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

答案 14 :(得分:0)

您可以在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);

答案 15 :(得分:0)

使用重力

            android:gravity="center_horizontal|center_vertical"

答案 16 :(得分:0)

在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会间接继承按钮。

答案 17 :(得分:-1)

我使用不同的方法,我认为应该适用于所有API版本。 我没有应用填充,而是在RadioButtons之间添加一个空视图:

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

这应该给你20dp填充。

答案 18 :(得分:-1)

我知道这是一个老问题,但是通过这个解决方案,我终于安心了,忘记了API级别。

左侧垂直RadioGroup,右侧垂直文本视图。

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