Czy można dodać trochę miejsca między RadioButton a etykietą, nadal korzystając z wbudowanych komponentów Androida? Domyślnie tekst wygląda na nieco zgnieciony.
<RadioButton android:id="@+id/rb1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="My Text"/>
Próbowałem kilku rzeczy:
Wydaje się, że określenie marginesu i dopełnienia powoduje zwiększenie przestrzeni wokół całego elementu (przycisku i tekstu razem). To ma sens, ale nie robi tego, czego potrzebuję.
Tworzenie niestandardowego elementu rysunkowego za pomocą XML, określając obrazy dla stanów zaznaczonych i niezaznaczonych, a następnie dodając kilka dodatkowych pikseli po prawej stronie każdego obrazu. To powinno działać, ale teraz wychodzisz poza domyślny interfejs użytkownika. (Nie koniec świata, ale nie ideał)
Dodaj dodatkowe spacje na początku każdej etykiety. Wygląda na to, że Android przycina początkowy znak spacji, jak w „Mój ciąg”, ale podanie kodu Unicode U + 00A0, jak w przypadku „\ u00A0Mój ciąg” załatwia sprawę. To działa, ale wydaje się trochę brudne.
Jakieś lepsze rozwiązania?
źródło
Nie jestem pewien, czy to rozwiąże problem, ale czy wypróbowałeś właściwość „Padding left” przycisku radiowego o wartości 50dip lub więcej
źródło
Wypróbowałem kilka sposobów i skończyłem z tym działającym poprawnie zarówno na emulatorze, jak i na urządzeniach:
<RadioButton android:background="@android:color/transparent" android:button="@null" android:drawableLeft="@drawable/your_own_selector" android:drawablePadding="@dimen/your_spacing" />
źródło
Dodaj margines między radiobuttonem jego etykietą , wypełniając po lewej stronie :
android:paddingLeft="10dip"
Po prostu ustaw niestandardowe wypełnienie .
Właściwość xml RadioButton.
<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" />
Gotowe
źródło
Użyj następujących atrybutów XML. U mnie to zadziałało
Dla API <= 16 użyj
android:paddingLeft="16dp"
Dla API> = 17 użyj
android:paddingStart="@16dp"
Na przykład:
<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" />
Więcej informacji:
drawablePadding
atrybut nie działa. Działa tylko wtedy, gdy dodałeś element do rysowania w przycisku opcji. Na przykład:<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" />
źródło
Nie możesz teraz tego spróbować, aby zweryfikować, ale czy próbowałeś sprawdzić, czy atrybut android: drawablePadding spełnia Twoje wymagania ?
źródło
final float scale = this.getResources().getDisplayMetrics().density; checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f), checkBox.getPaddingTop(), checkBox.getPaddingRight(), checkBox.getPaddingBottom());
źródło
Dopełnienie między elementami rysunkowymi a tekstem. Zostanie to osiągnięte poprzez dodanie poniższej linii w pliku xml.
android:drawablePadding="@dimen/10dp"
źródło
@dimen/10dp
zła praktykaPróbowałem, „android: paddingLeft” będzie działać. paddingLeft wpłynie tylko na tekst, a obraz radia pozostanie w pierwotnym położeniu.
źródło
Wydaje się, że „android: paddingLeft” działa poprawnie tylko w systemie Android 4.2.2
Wypróbowałem prawie wszystkie wersje Androida i działa tylko w wersji 4.2.2.
źródło
Używam innego podejścia, które moim zdaniem powinno działać na wszystkich wersjach API. Zamiast stosować dopełnienie, dodaję pusty widok między RadioButtons:
<View android:layout_width="20dp" android:layout_height="1dp" />
Powinno to zapewnić wypełnienie 20 dp.
źródło
Przyszedłem tutaj szukając odpowiedzi i najprostszym sposobem (po pewnym zastanowieniu) było dodanie spacji na początku samej etykiety tak
<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" />
źródło
u mnie działa:
<?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>
źródło
<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" />
źródło
Możesz ten kod w swoim pliku 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" />
lub użyj tego w klasie Activity
radioButton.setPadding(12, 10, 0, 10);
źródło
Utwórz styl w style.xml w ten sposób
<style name="Button.Radio"> <item name="android:paddingLeft">@dimen/spacing_large</item> <item name="android:textSize">16sp</item> </style>
Umieść ten styl w przycisku opcji
<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"/>
Możesz zmienić dowolny atrybut tak samo jak przycisk, ponieważ RadioButton pośrednio dziedziczy przycisk.
źródło
Wiem, że to stare pytanie, ale dzięki takiemu rozwiązaniu w końcu odzyskałem spokój i zapomniałem o poziomie API.
Lewa strona pionowa RadioGroup z pionowym widokiem tekstu po prawej stronie.
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical"> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RadioGroup> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="8dp" android:gravity="center_vertical" android:text="Radio 1"/> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="8dp" android:gravity="center_vertical" android:text="Radio 2"/> </LinearLayout> </LinearLayout>
źródło
Możesz spróbować użyć atrybutu grawitacji przycisku opcji.
<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" />
Spowoduje to wyrównanie tekstu do skrajnego prawego końca. Sprawdź pierwsze radio na obrazku.
źródło