web-dev-qa-db-ja.com

AndroidでRadioButtonとそのラベルの間にマージンを追加しますか?

Androidの組み込みコンポーネントを使用しながら、RadioButtonとラベルの間に少しスペースを追加することは可能ですか?デフォルトでは、テキストは少しくしゃくしゃに見えます。

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

私はいくつかのことを試しました:

  1. マージンとパディングを指定すると、要素全体の周りにスペースが追加されるようです(ボタンとテキストを一緒に)。それは理にかなっていますが、必要なことはしません。

  2. チェックされた状態とチェックされていない状態の画像を指定し、各画像の右側にいくつかの余分なピクセルを追加するXMLを介してカスタムドローアブルを作成します。これは機能するはずですが、現在はデフォルトのUIの外に出ています。 (世界の終わりではないが、理想的ではない)

  3. 各ラベルの先頭に余分な空白を追加します。 Androidは「My String」のように先頭のスペース文字をトリムするようですが、「\ u00A0My String」のようにユニコードU + 00A0を指定するとうまくいきます。汚れた。

より良い解決策はありますか?

74
allclaws

今これを読んでいる人にとって、受け入れられた答えは、あまりにも多くのパディングを引き起こす新しいAPIのレイアウトの問題につながります。

API <= 16では、ラジオボタンにpaddingLeftを設定して、ラジオボタンのビューの境界に対してパディングを設定できます。さらに、パッチ9の背景は、ビューに対するビューの境界も変更します。

API> = 17では、paddingLeft(またはpaddingStart)はラジオボタンのドロウアブルに関連しています。パッチ9についても同様です。パディングの違いをわかりやすく説明するには、添付のスクリーンショットを参照してください。

コードを掘り下げると、API 17で getHorizo​​ntalOffsetForDrawables と呼ばれる新しいメソッドが見つかります。このメソッドは、ラジオボタンの左余白を計算するときに呼び出されます(したがって、図に示されている追加のスペース)。

TL; DR paddingLeftが17以上の場合、minSdkVersionを使用します。API<= 16をサポートする場合、サポートする最小SDKのラジオボタンスタイルとAPIの別のスタイルが必要です。 17+。

combine screenshots showing left padding differences between API versions

105
Jim Baca

これで問題が解決するかどうかはわかりませんが、50dip以上の値を使用してラジオボタンの「Padding left」プロパティを試しましたか

62
user438650

私はいくつかの方法を試してみましたが、エミュレータとデバイスの両方で正しく動作するこの方法で終了しました:

    <RadioButton
        Android:background="@Android:color/transparent"
        Android:button="@null"
        Android:drawableLeft="@drawable/your_own_selector"
        Android:drawablePadding="@dimen/your_spacing" />
  • Android:background api10には固有のパディングがあるバックグラウンドがあるように見えるため、透明である必要があります(他のAPIでは試されませんが、ソリューションは他でも機能します)
  • Android:buttonは、nullである必要があります。
  • Android:drawableLeftAndroid:buttonの代わりに指定する必要があります
  • Android:drawablePaddingは、ドロアブルとテキストの間にあるスペースです
56
Gianluca P.

追加marginの間にradiobuttonそのlabel by paddingLeft

Android:paddingLeft="10dip"

カスタムpaddingを設定するだけです。

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

完了

29
Hiren Patel

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

enter image description here

さらに:drawablePadding属性は機能しません。ラジオボタンにドロウアブルを追加した場合にのみ機能します。例えば:

<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" />
21
Srikar Reddy

すぐにこれを試して検証することはできませんが、属性 Android:drawablePadding が必要なことを行うかどうかを確認しようとしましたか?

5
Mark B
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),

    checkBox.getPaddingTop(),
    checkBox.getPaddingRight(),
    checkBox.getPaddingBottom());
4
Dilavar M

「Android:paddingLeft」が機能するか試してみました。 paddingLeftは、ラジオ画像を元の位置に保ちながら、テキストにのみ影響を与えます。

1
David Guo

ドロアブルとテキストの間のパディング。これは、xmlファイルに以下の行を追加することにより実現されます。 Android:drawablePadding="@dimen/10dp"

1
Faakhir

このようにstyle.xmlでスタイルを作成します

<style name="Button.Radio">

    <item name="Android:paddingLeft">@dimen/spacing_large</item>
    <item name="Android:textSize">16sp</item>
</style>

そのスタイルをラジオボタンに入れる

 <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はボタンを間接的に継承するため、ボタンと同じ属性を変更できます。

「Android:paddingLeft」は、Android 4.2.2でのみ正しく動作するようです

Androidのほぼすべてのバージョンを試しましたが、4.2.2バージョンでのみ動作します。

0
Lowerland

重力を使用する

            Android:gravity="center_horizontal|center_vertical"
0
Hossam Gamal

私はここに答えを探しに来ましたが、最も簡単な方法は(考えてから)、ラベル自体の先頭にスペースを追加することです

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

私のために働く:

<?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>
0
Vadim

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);
<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" />
0
Dhaval Shingala

ラジオボタンの重力属性を使用してみてください。

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

これにより、テキストが右端に揃えられます。画像の最初のラジオをご覧ください。

enter image description here

0
Salil Kaul