8

使用 android:drawableLeft 时,Android 4.2 无法正确显示 RadioButton。drawableRight 没问题。

左侧的可绘制对象与单选按钮图形重叠。而且至少 Android 2.2-4.1 似乎可以使用 drawableLeft。

您知道解决方法吗?以编程方式设置 drawableLeft 无法解决此问题。

4.2 安卓问题

4.2 问题

4.1 Android 正确渲染(至少 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" />
4

4 回答 4

6

您可以在单选按钮处使用:

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

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

对于按钮和文本之间的空间,请使用:

  <item name="android:drawablePadding">10dp</item>
于 2013-06-03T10:20:48.817 回答
0

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

我建议在http://b.android.com提交一个错误,因为在 RTL 模式下,我希望可绘制按钮也位于另一侧。同时,您可以尝试通过向layoutDirection您添加一个属性TextView并将其强制为 LTR 来强制布局方向,以使其看起来符合您的预期。您也可以从 Java 代码中调用它setLayoutDirection()

于 2012-11-26T21:24:23.883 回答
0

我对这个错误的临时解决方案是用包含和的(s)替换父RadioGroup布局。尽管还有其他解决方案。TableLayoutTableRowRadioButtonTextView

<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不能与嵌套布局一起使用,选择/取消选中状态必须在事件处理方法的关联活动中手动完成:

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);
    }
}
于 2013-02-20T21:14:21.660 回答
0

这似乎已在 Android 4.2.2 中修复。

于 2013-02-22T11:07:11.760 回答