在Android的RadioButton和它的标签之间添加边距?

是否可以添加一个RadioButton和标签之间的空间,而仍然使用Android的内置组件? 默认情况下,文本看起来有点</s> </s>。

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

我已经尝试了几件事情:

  1. 指定边距和填充似乎会在整个元素周围增加空间(button和文本在一起)。 这是有道理的,但没有做我所需要的。

  2. 创build一个自定义绘图通过XML指定图像的选中和未选中的状态,然后在每个图像的右侧添加一些额外的像素。 这应该工作,但现在你正在超出默认的用户界面。 (不是世界的尽头,但不是理想的)

  3. 将额外的空格添加到每个标签的开头。 Android似乎修剪了一个前导空格字符,如在“我的string”,但指定unicode U + 00A0,如“\ u00A0Mystring”诀窍。 这工作,但似乎有点肮脏。

有更好的解决scheme

现在任何人读这个。 接受的答案会导致一些布局问题更新的apis造成太多的填充。

在API <= 16上,您可以在单选button上设置填充以设置相对于单选button视图边界的填充。 另外补丁九的背景也改变了相对于视图的视图边界。

在API 17上,左侧填充与可绘制的单选button有关。 这同样适用于大约九个补丁。 为了更好地说明填充差异,请参阅附加的屏幕快照。

如果您仔细查看代码,您将会在api 17中find一个名为getHorizo​​ntalOffsetForDrawables的新方法。 计算单选button的左侧填充(因此在图片中显示额外空间)时会调用此方法。

TL; DR您应该拥有您正在支持的min sdk的单选button样式,以及api 17+的另一个样式

结合屏幕截图显示api版本之间的左侧填充差异

不知道这是否能解决你的问题,但你有没有尝试单选button的“填充左”属性值为50dip或更多

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

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

paddingLeft 标签单选 button之间添加边距

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

完成

使用以下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属性不起作用。 它只有在你的单选button中添加了一个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" /> 

现在不能尝试这个validation,但你有没有尝试看看属性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" /> 

你可以尝试使用单选button的重力属性。

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

这将使文本与最右端alignment。 查看图片中的第一个广播( 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" 

像这样在style.xml中创build样式

 <style name="Button.Radio"> <item name="android:paddingLeft">@dimen/spacing_large</item> <item name="android:textSize">16sp</item> </style> 

把这种风格放在单选button中

  <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间接inheritance的button相同的任何属性button。

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

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

这应该会给你20dp的填充。