Android 4.2 RadioButton android:drawableLeft bug?

当使用android:drawableLeft时,Android 4.2不会正确显示RadioButton。 drawableRight是可以的。

左侧的绘图与单选buttongraphics重叠。 至lessAndroid 2.2-4.1似乎可以用drawableLeft。

你知道这个解决方法吗? 以编程方式设置drawableLeft并不能解决这个问题。

4.2 Android的问题

4.2问题

4.1 Android正确呈现(至less也是Android 2.2-4.0也正确渲染)

4.1是正确的

Android的XML布局代码为:

<RadioButton android:id="@+id/radio_cloud_dropbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:drawableLeft="@drawable/dropbox_logo" android:checked="true" android:text="@string/lbl_cloud_dropbox" /> 

Solutions Collecting From Web of "Android 4.2 RadioButton android:drawableLeft bug?"

你可以使用单选button:

设置button@null和可绘制的左侧设置您的button:

  <RadioGroup android:id="@+id/hn_radio_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <RadioButton android:id="@+id/rb_Select_by_proposal" style="@style/RadioButtonText" android:checked="true" android:tag="1" android:text="@string/select_by_proposal" /> <RadioButton android:id="@+id/rb_Select_by_first_letter" style="@style/RadioButtonText" android:tag="2" android:text="@string/select_by_first_letter" /> </RadioGroup> 

这样的风格:

 <style name="RadioButtonText"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:button">@null</item> <item name="android:drawableLeft">@drawable/radio_selector</item> <item name="android:drawablePadding">10dp</item> </style> 

对于button和文本之间的空间使用:

  <item name="android:drawablePadding">10dp</item> 

这可能是在Android 4.2中添加到平台的新布局方向支持的产品(即支持从左到右或从右到左的布局)。 这会影响他们如何放置左侧和右侧的可绘制内容。 什么是你的android:targetSdkVersion清单属性设置为? 从技术上讲,我相信,如果设置为16或更低,这些布局更改应该被默认禁用,即使您的语言环境可以启用它们。

我build议在http://b.android.com提交一个bug,因为在RTL模式下,我希望drawable的button也在另一边&#x3002; 与此同时,您可以尝试通过在TextView添加layoutDirection属性来强制布局方向,并强制它成为LTR,使其看起来像您期望的一样。 你也可以使用setLayoutDirection()从Java代码中调用它,

我对这个bug的临时解决scheme是用TableLayoutreplace包含RadioButtonTextView TableRowRadioGroup布局。 即使还有其他解决scheme。

 <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TableRow android:onClick="onDropboxClick" > <RadioButton android:id="@+id/radio_cloud_dropbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:onClick="onDropboxClick" /> <TextView android:drawableLeft="@drawable/cloud_logo_dropbox" android:gravity="center_vertical" android:text="Dropbox" /> </TableRow> <TableRow android:onClick="onGoogleDriveClick" > <RadioButton android:id="@+id/radio_cloud_google_drive" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:onClick="onGoogleDriveClick" /> <TextView android:drawableLeft="@drawable/cloud_logo_google_drive" android:gravity="center_vertical" android:text="Google Drive" /> </TableRow> </TableLayout> 

然而,由于RadioGroup不能与嵌套布局一起使用,select/取消选中状态必须在事件处理程序方法的相关活动中手动完成:

 public void onDropboxClick(View view) { checkRadio(R.id.radio_cloud_dropbox); } public void onGoogleDriveClick(View view) { checkRadio(R.id.radio_cloud_google_drive); } private void checkRadio(int radioId) { if (radioId == R.id.radio_cloud_dropbox) { dropboxRadio.setChecked(true); googleDriveRadio.setChecked(false); } else if (radioId == R.id.radio_cloud_google_drive) { dropboxRadio.setChecked(false); googleDriveRadio.setChecked(true); } } 

这似乎是固定在Android 4.2.2。