Android 4.2 RadioButton android:drawableLeft bug?

pet*_*syn 8 android radio-button

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

左侧的drawable与Radio按钮图形重叠.并且至少Android 2.2-4.1似乎可以使用drawableLeft.

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

4.2 Android问题

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" />
Run Code Online (Sandbox Code Playgroud)

cha*_*aon 6

你可以使用单选按钮:

设置按钮@null和drawable left设置你的按钮:

   <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>    
Run Code Online (Sandbox Code Playgroud)

这个风格:

<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>   
Run Code Online (Sandbox Code Playgroud)

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

  <item name="android:drawablePadding">10dp</item>
Run Code Online (Sandbox Code Playgroud)


pet*_*syn 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>
Run Code Online (Sandbox Code Playgroud)

然而,由于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);
    }
}
Run Code Online (Sandbox Code Playgroud)