8

Android 4.2 では、android:drawableLeft を使用すると、RadioButton が正しく表示されません。drawableRight は問題ありません。

左側のドローアブルは、ラジオ ボタンのグラフィックに重なっています。そして、少なくとも 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" />
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それまでの間、属性を追加して LTR にすることで、レイアウトの方向をTextView強制して、期待どおりに見えるようにしてみてください。これをJavaコードから呼び出すこともできますsetLayoutDirection()

于 2012-11-26T21:24:23.883 に答える
0

RadioGroupこのバグに対する私の一時的な解決策は、親レイアウトをTableLayoutとをTableRow含む (s)に置き換えることでした。他の解決策もありますが。RadioButtonTextView

<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 に答える