Androidの組み込みコンポーネントを使用しながら、RadioButtonとラベルの間に少しスペースを追加することは可能ですか?デフォルトでは、テキストは少しくしゃくしゃに見えます。
<RadioButton Android:id="@+id/rb1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="My Text"/>
私はいくつかのことを試しました:
マージンとパディングを指定すると、要素全体の周りにスペースが追加されるようです(ボタンとテキストを一緒に)。それは理にかなっていますが、必要なことはしません。
チェックされた状態とチェックされていない状態の画像を指定し、各画像の右側にいくつかの余分なピクセルを追加するXMLを介してカスタムドローアブルを作成します。これは機能するはずですが、現在はデフォルトのUIの外に出ています。 (世界の終わりではないが、理想的ではない)
各ラベルの先頭に余分な空白を追加します。 Androidは「My String」のように先頭のスペース文字をトリムするようですが、「\ u00A0My String」のようにユニコードU + 00A0を指定するとうまくいきます。汚れた。
より良い解決策はありますか?
今これを読んでいる人にとって、受け入れられた答えは、あまりにも多くのパディングを引き起こす新しいAPIのレイアウトの問題につながります。
API <= 16では、ラジオボタンにpaddingLeft
を設定して、ラジオボタンのビューの境界に対してパディングを設定できます。さらに、パッチ9の背景は、ビューに対するビューの境界も変更します。
API> = 17では、paddingLeft
(またはpaddingStart
)はラジオボタンのドロウアブルに関連しています。パッチ9についても同様です。パディングの違いをわかりやすく説明するには、添付のスクリーンショットを参照してください。
コードを掘り下げると、API 17で getHorizontalOffsetForDrawables と呼ばれる新しいメソッドが見つかります。このメソッドは、ラジオボタンの左余白を計算するときに呼び出されます(したがって、図に示されている追加のスペース)。
TL; DR paddingLeft
が17以上の場合、minSdkVersion
を使用します。API<= 16をサポートする場合、サポートする最小SDKのラジオボタンスタイルとAPIの別のスタイルが必要です。 17+。
これで問題が解決するかどうかはわかりませんが、50dip以上の値を使用してラジオボタンの「Padding left」プロパティを試しましたか
私はいくつかの方法を試してみましたが、エミュレータとデバイスの両方で正しく動作するこの方法で終了しました:
<RadioButton
Android:background="@Android:color/transparent"
Android:button="@null"
Android:drawableLeft="@drawable/your_own_selector"
Android:drawablePadding="@dimen/your_spacing" />
追加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" />
完了
次の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" />
さらに: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" />
すぐにこれを試して検証することはできませんが、属性 Android:drawablePadding が必要なことを行うかどうかを確認しようとしましたか?
final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
checkBox.getPaddingTop(),
checkBox.getPaddingRight(),
checkBox.getPaddingBottom());
「Android:paddingLeft」が機能するか試してみました。 paddingLeftは、ラジオ画像を元の位置に保ちながら、テキストにのみ影響を与えます。
ドロアブルとテキストの間のパディング。これは、xmlファイルに以下の行を追加することにより実現されます。 Android:drawablePadding="@dimen/10dp"
このように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バージョンでのみ動作します。
重力を使用する
Android:gravity="center_horizontal|center_vertical"
私はここに答えを探しに来ましたが、最も簡単な方法は(考えてから)、ラベル自体の先頭にスペースを追加することです
<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" />
私のために働く:
<?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>
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" />
ラジオボタンの重力属性を使用してみてください。
<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" />
これにより、テキストが右端に揃えられます。画像の最初のラジオをご覧ください。