Android में एक RadioButton और उसके लेबल के बीच मार्जिन जोड़ें?


88

क्या एंड्रॉइड के अंतर्निहित घटकों का उपयोग करते समय रेडियोबटन और लेबल के बीच थोड़ी सी जगह जोड़ना संभव है? डिफ़ॉल्ट रूप से पाठ थोड़ा उभरा हुआ दिखता है।

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

मैंने कुछ चीजों की कोशिश की है:

  1. निर्दिष्ट मार्जिन और पैडिंग पूरे तत्व (बटन और पाठ, एक साथ) के आसपास जगह जोड़ने के लिए लगता है। यह समझ में आता है, लेकिन वह नहीं करता है जो मुझे चाहिए।

  2. एक्सएमएल के माध्यम से चेक और अनियंत्रित राज्यों के लिए छवियों को निर्दिष्ट करने के माध्यम से एक कस्टम ड्रॉबल बनाना, फिर प्रत्येक छवि के दाईं ओर कुछ अतिरिक्त पिक्सेल जोड़ना। यह काम करना चाहिए, लेकिन अब आप डिफ़ॉल्ट यूआई के बाहर कदम रख रहे हैं। (दुनिया का अंत नहीं, लेकिन आदर्श नहीं)

  3. प्रत्येक लेबल की शुरुआत में अतिरिक्त व्हाट्सएप जोड़ें। एंड्रॉइड एक प्रमुख अंतरिक्ष चरित्र को ट्रिम करने के लिए लगता है, जैसा कि "माय स्ट्रिंग" में है, लेकिन यूनिकोड U + 00A0 को निर्दिष्ट करते हुए, जैसा कि "\ u00A0My स्ट्रिंग" करता है। यह काम करता है, लेकिन यह थोड़े गंदा लगता है।

कोई बेहतर उपाय?

जवाबों:


120

अब इसे पढ़ने वाले किसी भी व्यक्ति के लिए, स्वीकृत उत्तर नए एपीआई पर कुछ लेआउट समस्याओं को जन्म देगा, जिससे बहुत अधिक पैडिंग हो जाएगी।

API <= 16 पर आप paddingLeftरेडियो बटन पर रेडियो बटन के दृश्य सीमा के सापेक्ष पैडिंग सेट कर सकते हैं । इसके अतिरिक्त, एक पैच नौ पृष्ठभूमि भी दृश्य के सापेक्ष दृश्य सीमा को बदल देती है।

API पर = = 17 paddingLeft(या paddingStart) रेडियो बटन के संगत है। एक पैच नौ के बारे में भी लागू होता है। बेहतर पैडिंग अंतरों को समझने के लिए संलग्न स्क्रीनशॉट देखें।

यदि आप कोड के माध्यम से खोदते हैं, तो आपको एपीआई 17 में एक नया तरीका मिलेगा, जिसे getHor क्षैतिजOffsetForDrawables कहा जाता है । रेडियो बटन के लिए बाईं गद्दी की गणना करते समय इस विधि को कहा जाता है (इसलिए चित्र में चित्रित अतिरिक्त स्थान)।

TL; DR बस का उपयोग करें paddingLeftयदि आपका minSdkVersionहै = = 17. यदि आप API <= 16 का समर्थन करते हैं, तो आपके पास मिन एसडीके के लिए रेडियो बटन शैली होनी चाहिए जिसका आप समर्थन कर रहे हैं और एपीआई 17+ के लिए एक और शैली है।

एपीआई संस्करणों के बीच बाएं पैडिंग अंतर दिखाने वाले स्क्रीनशॉट को मिलाएं


2
Api

11
ऐसा करने का सबसे अच्छा तरीका "मूल्यों-वी 17" निर्देशिका के साथ है; अपने API 17+ डायमेंशन को वहाँ संसाधन xml में डालें और मानक एक के लिए 16 और नीचे सादे "मान" में।

15
आश्चर्यजनक है कि Google डेवलपर / प्रबंधन हमारे साथ सामान्य व्यवहार कर रहे हैं। वे जो चाहते हैं, जब भी चाहते हैं, करते हैं। संगति और अखंडता का मतलब उनके लिए कुछ भी नहीं है।
यार

66

निश्चित नहीं है कि यह आपकी समस्या को ठीक करेगा, लेकिन क्या आपने 50d या अधिक के मान के साथ रेडियो बटन की "पैडिंग लेफ्ट" संपत्ति की कोशिश की है


2
यह काम करता है, और डिफ़ॉल्ट ड्रॉबल की चौड़ाई को कवर करने के लिए 50dip की आवश्यकता होती है। सबसे पहले मैंने 20dip का उपयोग किया और पाठ बाईं ओर चला गया! ऐसा इसलिए है क्योंकि एंकरिंग बिंदु ड्रॉबल का सही किनारा नहीं है; यह ड्रॉबल का बायाँ किनारा है।
रॉबर्ट क्लयपूल

58

मैंने कई तरीके आज़माए और इसे एमुलेटर और डिवाइस दोनों पर सही तरीके से काम करने के साथ पूरा किया:

    <RadioButton
        android:background="@android:color/transparent"
        android:button="@null"
        android:drawableLeft="@drawable/your_own_selector"
        android:drawablePadding="@dimen/your_spacing" />
  • एंड्रॉइड: पृष्ठभूमि को पारदर्शी होने की आवश्यकता है क्योंकि यह एपी 10 पर लगता है आंतरिक पृष्ठभूमि के साथ एक पृष्ठभूमि है (अन्य एपिस के साथ प्रयास नहीं किया गया है लेकिन समाधान दूसरों पर भी काम करता है)
  • एंड्रॉइड: बटन को शून्य होना चाहिए क्योंकि पैडिंग अन्यथा सही ढंग से काम नहीं करेगा
  • Android: drawableLeft को Android: बटन के बजाय निर्दिष्ट करने की आवश्यकता है
  • android: drawablePadding वह स्थान है जो आपके drawable और आपके टेक्स्ट के बीच होगा

4
सबसे अच्छा जवाब! आप android: background = "@ null" भी सेट कर सकते हैं और जैसा कि आपने बिना किसी पैडिंग के बताया होगा।
सईयाँकोडर १३'१४

2
जब मैं एंड्रॉइड सेट कर रहा हूं: बटन = "@ नल", रेडियो बटन को चेक नहीं किया जा रहा है (क्लिक किया गया)। क्या मैं कुछ गलत कर रहा हूँ? कृपया सहायता करें stackoverflow.com/questions/28052820/…
शिरीष हेरवाडे

@ इस समाधान का आपके बटन पर क्लिक न होने से कोई लेना-देना नहीं है। मैंने इसे लागू किया और इसे क्लिक किया गया।
यार

समाधान के लिए धन्यवाद!
विमलाथिथान राजसेकरन

32

जोड़े मार्जिन एक के बीच radiobutton अपने लेबल द्वारा paddingLeft :

android:paddingLeft="10dip"

बस अपना कस्टम पैडिंग सेट करें ।

रेडियोबटन की 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" />

किया हुआ


22

निम्न XML विशेषताओं का उपयोग करें। इसने मेरे लिए काम किया

एपीआई के लिए <= 16 का उपयोग करें

android:paddingLeft="16dp"

एपीआई के लिए = = 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" />

6

सत्यापित करने के लिए अभी यह कोशिश नहीं कर सकता, लेकिन क्या आपने यह देखने की कोशिश की है कि क्या विशेषता android: drawablePadding को आपकी आवश्यकता है?


1
हम्म। यह एक कोशिश है और यह इस स्थिति में कोई प्रभाव नहीं लगता है। सुझाव के लिए धन्यवाद, यह निश्चित रूप से वर्णन से सही लगता है: "चित्र और पाठ के बीच पैडिंग"।
Allclaws

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

    checkBox.getPaddingTop(),
    checkBox.getPaddingRight(),
    checkBox.getPaddingBottom());

1

ड्रॉबल्स और टेक्स्ट के बीच पैडिंग। इसे xml फ़ाइल में नीचे लाइन जोड़कर प्राप्त किया जाएगा। android:drawablePadding="@dimen/10dp"


मैं बिल्कुल इसके लिए देख रहा था ... मेरी बहुत मदद की
शिरीष हेरवाडे

2
@dimen/10dpबुरी प्रथा
व्लाद

0

मैंने कोशिश की है, "android: paddingLeft" काम करेगा। पेडिंग लाईट केवल पाठ को प्रभावित करेगा जबकि रेडियो इमेज को मूल स्थिति में बनाए रखना है।


-1

"Android: paddingLeft" केवल Android 4.2.2 के तहत सही ढंग से काम करने लगता है

मैंने एंड्रॉइड के लगभग सभी संस्करणों की कोशिश की है और यह केवल 4.2.2 संस्करण पर काम करता है।


-1

मैं अलग-अलग दृष्टिकोण का उपयोग कर रहा हूं जो मुझे लगता है कि सभी एपीआई संस्करणों पर काम करना चाहिए। गद्दी लगाने के बजाय मैं RadioButtons के बीच एक खाली दृश्य जोड़ रहा हूं:

<View
        android:layout_width="20dp"
        android:layout_height="1dp" />

यह आपको 20dp पैडिंग देना चाहिए।


-1

मैं यहां एक उत्तर की तलाश में आया और सबसे सरल तरीका (कुछ सोच के बाद) लेबल की शुरुआत में रिक्ति को जोड़ रहा था जैसे कि

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

-1

मेरे लिए काम करता है:

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

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

इस समस्या को हल करने के तरीके को समझाने के लिए कुछ टिप्पणियों को जोड़ने पर विचार करें;)
डेडलीजेस

-1

आप इस कोड को अपनी 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" />

या गतिविधि वर्ग पर इसका उपयोग करें

radioButton.setPadding(12, 10, 0, 10);

-1

इस तरह से 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"/>

आप किसी भी विशेषता को बटन के रूप में बदल सकते हैं क्योंकि यह रेडियोबटन अप्रत्यक्ष रूप से विरासत में बटन है।


-1

मुझे पता है कि यह एक पुराना सवाल है, लेकिन इस समाधान के साथ, मुझे आखिरकार मन की शांति मिली और एपीआई स्तर के बारे में भूल गया।

दाईं ओर लंबवत पाठ दृश्य के साथ लेफ्ट साइड वर्टिकल रेडियोग्रुप।

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

@ मार्क बुईकेमा, बिल्कुल यह लेबल नहीं है, लेकिन यह यहां लेबल की तरह काम करता है! यदि आप क्लिक लेबल चाहते हैं, तो आप क्लिक श्रोताओं को TextViews में जोड़ सकते हैं। मेरा कहना है कि, क्या हमें Android OS के हर संस्करण के लिए लेआउट लागू करने की आवश्यकता है? मेरे ख़्याल से नहीं।
स्टेनली

-1

आप रेडियो बटन के गुरुत्व गुण का उपयोग करके देख सकते हैं।

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

यह पाठ को सबसे अंत में संरेखित करेगा। छवि में पहले रेडियो देखें।

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.