Android - चेकबॉक्स और पाठ के बीच रिक्ति


256

क्या चेकबॉक्स नियंत्रण और संबंधित पाठ में चेकबॉक्स के बीच पैडिंग जोड़ने का एक आसान तरीका है?

मैं सिर्फ अग्रणी स्थान नहीं जोड़ सकता, क्योंकि मेरा लेबल बहु-पंक्ति है।

जैसा कि, पाठ चेकबॉक्स के बहुत करीब है: वैकल्पिक शब्द


1
एक सरल समाधान पाठ के लिए जगह देने के TextViewसाथ drawableLeftऔर उपयोग drawablePaddingकरना होगा। कोड में केवल चयनित और अचयनित राज्यों को टॉगल करें।
मुहम्मद बाबर

मैंने अभी-अभी एक नई xml विशेषता देखी है जिसका नाम है android: drawablePadding, जो कि ड्रा करने योग्य और पाठ के बीच रिक्ति सेट करने वाला है। मैंने इसकी कोशिश नहीं की, लेकिन मुझे लगता है कि यह इस समस्या के लिए Google का "आफ्टर-द-फैक्ट" फिक्स है।
पेरी हार्टमैन

जवाबों:


333

मुझे अपने ही सवाल का जवाब देने से नफरत है, लेकिन इस मामले में मुझे लगता है कि मुझे इसकी जरूरत है। इसकी जाँच करने के बाद, @Falmarri अपने जवाब के साथ सही रास्ते पर था। समस्या यह है कि एंड्रॉइड का चेकबॉक्स नियंत्रण पहले से ही एंड्रॉइड का उपयोग करता है: पाठ को प्राप्त करने के लिए पेडिंग लाईट संपत्ति जहां वह है।

लाल रेखा पूरे चेकबॉक्स का पेडिंग लाईट ऑफसेट मान दिखाती है

वैकल्पिक शब्द

यदि मैं अपने XML लेआउट में उस गद्दी को ओवरराइड करता हूं, तो यह लेआउट को गड़बड़ कर देता है। यहाँ क्या सेटिंग paddingLeft = "0" करता है:

वैकल्पिक शब्द

XML में आप इसे ठीक नहीं कर सकते। आप इसे कोड में करते हैं। यहाँ मेरा स्निपेट 10dp की हार्डकोडेड पैडिंग वृद्धि के साथ है।

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

यह आपको निम्नलिखित देता है, जहां पेडिंग में ग्रीन लाइन वृद्धि है। यह मान को हार्डकोड करने से अधिक सुरक्षित है, क्योंकि विभिन्न डिवाइस चेकबॉक्स के लिए अलग-अलग ड्रॉबल्स का उपयोग कर सकते हैं।

वैकल्पिक शब्द

अद्यतन - जैसा कि लोगों ने हाल ही में नीचे दिए गए उत्तरों में उल्लेख किया है, यह व्यवहार स्पष्ट रूप से जेली बीन (4.2) में बदल गया है। आपके ऐप को यह जांचना होगा कि कौन सा संस्करण चालू है, और उपयुक्त विधि का उपयोग करें।

4.3+ के लिए यह बस पेडिंग_लिफ्ट सेट कर रहा है। विवरण के लिए htafoya का उत्तर देखें।


108
अपने स्वयं के प्रश्न का उत्तर देने में कुछ भी गलत नहीं है - भविष्य में किसी और को शायद यह समस्या होगी और आपने सिर्फ एक अच्छा, व्यापक उत्तर दिया।
एंड्रयूज

4
बस सेटिंग में क्या गड़बड़ है paddingLeft="48sp"? यहाँ ठीक काम करता है, भले ही मैं पैमाने और अभिविन्यास को बदल दूं। आपके कोड ने मुझे आइटमों की सूची में अनियमित गद्दी मान दिया।
harpo

5
@harpo - आपके पास कोई गारंटी नहीं है कि विभिन्न डिवाइस निर्माता चेकबॉक्स के लिए अलग ग्राफिक्स का उपयोग नहीं करेंगे, जिसका अर्थ है कि आपकी हार्ड-कोडिंग पैडिंग विभिन्न उपकरणों पर आपके दृश्य लेआउट को तोड़ सकती है। चूंकि मैं वर्तमान पैडिंग पढ़ रहा हूं और इसे जोड़ रहा हूं जो एक समस्या नहीं होगी, लेकिन आपको यह सुनिश्चित करना होगा कि आप इसे केवल एक बार करें।
डगडब्ल्यू

2
@ ब्लंडेल - जरूरी नहीं। Android का खुला स्रोत। एक उपकरण विक्रेता पूरी तरह से अलग आकार के साथ एक पूरी तरह से अलग ग्राफिक स्थानापन्न कर सकता है। उन्हें किसी कारणवश सामान पसंद करना पसंद है।
डग डब्लू

2
दुर्भाग्य से, आप getView()कस्टम एडेप्टर के इस समाधान का उपयोग नहीं कर सकते हैं (यदि आप अपने विचारों को रीसायकल करते हैं), क्योंकि पैडिंग अंतहीन रूप से बढ़ जाएगी। इस समस्या को मैं कुछ इस तरह इस्तेमाल किया था ठीक करने के लिए: boolean isHackNeeded = Build.VERSION.SDK_INT < 17; float scale = context.getResources().getDisplayMetrics().density; if (isHackNeeded) {CheckBox rb = new CheckBox(context); this.PADDING = rb.getPaddingLeft() + Math.round(10.0f * scale); } else { this.PADDING = Math.round(10.0f * scale); }। और फिर PADDINGहर चेकबॉक्स मैं फुलाए जाने के लिए उपयोग करें :check.setPadding(PADDING, check.getPaddingTop() ...
एलेक्स सेमेनिएक

133

@DougW की प्रतिक्रिया को देखते हुए, मैं संस्करण को प्रबंधित करने के लिए क्या करता हूं, सरल है, मैं अपने चेकबॉक्स दृश्य में जोड़ता हूं:

android:paddingLeft="@dimen/padding_checkbox"

जहाँ डिमेन दो मान फ़ोल्डर में पाया जाता है:

मान

<resources>

    <dimen name="padding_checkbox">0dp</dimen>

</resources>

मान- v17 (4.2 जेलीबीन)

<resources>

    <dimen name="padding_checkbox">10dp</dimen>

</resources>

मेरे पास एक कस्टम चेक है, अपने सबसे अच्छे विकल्प के लिए डीपीएस का उपयोग करें।


2
यह अब तक का सबसे अच्छा जवाब है। हालांकि, यह वास्तव में होना चाहिए values-v17जैसा कि एपीआई 17 में ठीक किया गया था (ऊपर कुछ पदों के अनुसार)
icecreamman

एक सही उत्तर, बस पुराने एपिस (मान / डिमेंस) के लिए मैंने पैडिंग_चेकबॉक्स को 0dip पर सेट किया (एपीआई 10 मार्जिन पहले से ही बहुत बड़ा है) और मूल्यों के लिए- v17 10dip के रूप में htafoya का सुझाव दिया।
यार

70

के android:drawableLeftबजाय विशेषता का उपयोग करें android:button। ड्रा करने योग्य और पाठ उपयोग के बीच पैडिंग सेट करने के लिए android:drawablePadding। ड्रा करने योग्य उपयोग की स्थिति के लिए android:paddingLeft

<CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@null"
        android:drawableLeft="@drawable/check_selector"
        android:drawablePadding="-50dp"
        android:paddingLeft="40dp"
        />

परिणाम


1
नमस्ते, यह अच्छी विधि है, लेकिन ध्यान दें कि यू को चेकबॉक्स की डिफ़ॉल्ट छवि का अतिरिक्त बायाँ मार्जिन bcoz मिलता है .. इसके लिए कोई भी समाधान
Code_Life

4
सेट android:background="@android:color/transparent"और बायाँ मार्जिन गायब हो जाएगा
बनाया हुआ

2
ऊपर दिया गया कोड मेरे रेडियो बटन के लिए पूरी तरह से काम करता है, और 4.2 OS सीमा के पार संगत है। धन्यवाद!
गनिचोला

1
यह बहुत अधिक रैंक किया जाना चाहिए। जैसा कि @gnichola ने कहा, यह एंड्रॉइड संस्करणों में काम करता है और काफी साफ समाधान है। एक शैली बनाएं और इसे अपने थीम में इस तरह से असाइन करें: <item name="android:checkboxStyle">@style/CheckBox</item> इस तरह, आपके पास एक बार परिभाषित शैली है और केवल एक बार संदर्भित है।
रोसोमैक

1
इसके अलावा पृष्ठभूमि को अशक्त (या कुछ कस्टम) पर सेट करें, अन्यथा लॉलीपॉप + पूरे दृश्य को शामिल करते हुए एक विशाल सर्कल तरंग प्रभाव प्राप्त करता है। आप अधिक उपयुक्त रिपल को वापस लगाने के लिए <ripple> टैग का उपयोग करके v21 बटन का उपयोग कर सकते हैं।
Tom

34

एंड्रॉइड 4.2 जेली बीन (एपीआई 17) बटन से टेक्स्ट पेडिंगटेफ्ट को डाल देता है (टिकाऊ दाएं किनारे)। यह RTL मोड के लिए भी काम करता है।

4.2 पेडिंग लाईट से पहले बटन को अनदेखा किया जा रहा था - यह कंपाउंडबटन के बाएं किनारे से लिया गया था।

आप इसे XML के जरिए हल कर सकते हैं - पुराने एंड्रॉइड पर padDLeft से बटन पर क्लिक करें। इसे केवल एपीआई 17 अप पर आवश्यक स्थानों पर सेट करें। उदाहरण के लिए, आयाम संसाधनों का उपयोग करें और मान-v17 संसाधन फ़ोल्डर में ओवरराइड करें।

परिवर्तन android.widget.CompoundButton.getCompoundPaddingLeft () के माध्यम से पेश किया गया था;


4
यहां केवल सही उत्तर है - यह समस्या को इंगित करता है और सरल समाधान प्रदान करता है, जिसे मैंने कई वाणिज्यिक ऐप में सफलतापूर्वक उपयोग किया है।
Madej

1
आपको XML में बटनड्रेसेबल कैसे मिलेगा। क्या आप इसे हार्ड कोड देते हैं?
जारेड क्ल्स

1
मैंने हटाकर इस समस्या को एक पुराने कोड में ठीक कर दिया है android:background="@android:color/transparent"
सीबेक

स्वीकृत उत्तर अच्छा और काम कर रहा है, लेकिन यह सरल और प्रभावी है। इसका उत्तर स्वीकार किया जाना चाहिए।
रीज मुर्शिद

27

हां, आप पेडिंग जोड़कर पैडिंग कर सकते हैं।

android:padding=5dp


4
यह वास्तव में काम करता है ... की तरह। एक के लिए, केवल पेडिंग लाईट की जरूरत होती है, सभी पैडिंग की नहीं। हालाँकि, ऐसा लगता है कि पेडिंग लाईट पहले से ही लगभग 40dp के मान पर सेट है। अगर मैं इसे सेट करता हूं> 40dp यह दूर चला जाता है, अगर मैं इसे सेट करता हूं <40dp यह चेकबॉक्स के तहत चलता है। मैं इसे सही के रूप में चिह्नित करने और एक और प्रश्न खोलने जा रहा हूं, क्योंकि मुझे इसके बारे में चिंता है।
डौग

वैसे मुझे आपके लेआउट को देखे बिना कोई आइडिया नहीं है।
फल्म्रीरी

हाँ काम नहीं कर रहा है..सामान्य रूप से सैमसंग डिवाइस से मुझे समस्या है।
रंजीथ कुमार

1
पैडिंग जोड़कर पैडिंग जोड़ना वैध लगता है!
S

21

यदि आप कोड के बिना एक साफ डिजाइन चाहते हैं, तो उपयोग करें:

<CheckBox
   android:id="@+id/checkBox1"
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:drawableLeft="@android:color/transparent"
   android:drawablePadding="10dp"
   android:text="CheckBox"/>

चाल के लिए रंग सेट करने के लिए पारदर्शी है android:drawableLeftऔर के लिए एक मूल्य आवंटित करना है android:drawablePadding। इसके अलावा, पारदर्शिता आपको साइड इफेक्ट के बिना किसी भी पृष्ठभूमि रंग पर इस तकनीक का उपयोग करने की अनुमति देती है - जैसे कि रंग बेमेल।


16

एपीआई 17 और इसके बाद के संस्करण, आप उपयोग कर सकते हैं:

एंड्रॉयड: paddingStart = "24dp"

एपीआई 16 और नीचे, आप उपयोग कर सकते हैं:

एंड्रॉयड: paddingLeft = "24dp"


1
बहुत अच्छा जवाब। मैं कल्पना नहीं कर सकता कि कैसे पैडिंग चेक बॉक्स और पाठ के बीच की जगह देगा। आमतौर पर पैडिंग लेफ्ट का मतलब घटक के बाएं होता है।
मोहम्मद इब्राहिम

14

मेरे मामले में मैंने XML में निम्न चेकबॉक्स विशेषता का उपयोग करके इस समस्या को हल किया:

*

एंड्रॉयड: paddingLeft = "@ Dimen / activity_horizontal_margin"

*


बहुत अच्छा जवाब। मैं कल्पना नहीं कर सकता कि कैसे पैडिंग चेक बॉक्स और पाठ के बीच की जगह देगा। आमतौर पर पैडिंग लेफ्ट का मतलब घटक के बाएं होता है।
मोहम्मद इब्राहिम

13

सरल समाधान, चेकबॉक्स गुणों में इस पंक्ति को जोड़ें , अपने इच्छित रिक्ति मूल्य के साथ 10dp बदलें

android:paddingLeft="10dp"

10

मैं लोगों को नहीं जानता, लेकिन मैंने परीक्षण किया

<CheckBox android:paddingLeft="8mm" और केवल पाठ को दाईं ओर ले जाता है, संपूर्ण नियंत्रण नहीं।

यह मुझे ठीक लगता है।


1
मैंने हाल ही में यह कोशिश नहीं की है, इसलिए यह निश्चित रूप से संभव है कि यह एक विशिष्ट डिवाइस, या एक नया एंड्रॉइड ओएस संस्करण पर काम करता है। मैं अत्यधिक अनुशंसा करूंगा कि आप अलग-अलग सेटअपों पर परीक्षण करें, क्योंकि यह निश्चित रूप से उस समय काम नहीं करता था जब मैंने यह प्रश्न पूछा था।
डगडब्लू

मैं देख रहा हूँ कि यह 2.3.3 और 4.2 के बीच अलग-अलग व्यवहार करता है (निश्चित नहीं कि परिवर्तन के बीच कहाँ हुआ है)।
नैट

क्या आपका मतलब डीपी नहीं मिमी है?
क्रिसपिक्स

10

इसके बजाय बेहतर पैडिंग करने के लिए एंड्रॉइड चेकबॉक्स का विस्तार क्यों न करें। चेकबॉक्स का उपयोग करने के बाद हर बार कोड में इसे ठीक करने के बजाय आप इसके बजाय निश्चित चेकबॉक्स का उपयोग कर सकते हैं।

पहला चेकबॉक्स बढ़ाएँ:

package com.whatever;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.CheckBox;

/**
 * This extends the Android CheckBox to add some more padding so the text is not on top of the
 * CheckBox.
 */
public class CheckBoxWithPaddingFix extends CheckBox {

    public CheckBoxWithPaddingFix(Context context) {
        super(context);
    }

    public CheckBoxWithPaddingFix(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public CheckBoxWithPaddingFix(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public int getCompoundPaddingLeft() {
        final float scale = this.getResources().getDisplayMetrics().density;
        return (super.getCompoundPaddingLeft() + (int) (10.0f * scale + 0.5f));
    }
}

सामान्य चेकबॉक्स बनाने के बजाय अपने xml में दूसरा अपने विस्तारित को बनाएं

<com.whatever.CheckBoxWithPaddingFix
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello there" />

2
आपको ऐसा करने से बचने के लिए एक 'अगर' जोड़ना चाहिए, अगर ओएस> 4.2 क्योंकि जेली बीन में वे "यह" तय करते हैं।
मार्टिन मार्कोसिनी

1
वास्तव में = = 4.2 (17)।
एलेक्स एन।

6

मैंने अभी इस पर निष्कर्ष निकाला है:

चेकबॉक्स को ओवरराइड करें और यदि आपके पास एक कस्टम ड्राअबल है तो इस विधि को जोड़ें:

@Override
public int getCompoundPaddingLeft() {

    // Workarround for version codes < Jelly bean 4.2
    // The system does not apply the same padding. Explantion:
    // http://stackoverflow.com/questions/4037795/android-spacing-between-checkbox-and-text/4038195#4038195

    int compoundPaddingLeft = super.getCompoundPaddingLeft();

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Drawable drawable = getResources().getDrawable( YOUR CUSTOM DRAWABLE );
        return compoundPaddingLeft + (drawable != null ? drawable.getIntrinsicWidth() : 0);
    } else {
        return compoundPaddingLeft;
    }

}

या यदि आप सिस्टम का उपयोग करने योग्य हैं:

@Override
public int getCompoundPaddingLeft() {

    // Workarround for version codes < Jelly bean 4.2
    // The system does not apply the same padding. Explantion:
    // http://stackoverflow.com/questions/4037795/android-spacing-between-checkbox-and-text/4038195#4038195

    int compoundPaddingLeft = super.getCompoundPaddingLeft();

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        final float scale = this.getResources().getDisplayMetrics().density;
        return compoundPaddingLeft + (drawable != null ? (int)(10.0f * scale + 0.5f) : 0);
    } else {
        return compoundPaddingLeft;
    }

}

जवाब के लिए धन्यवाद :)


4

यह व्यवहार जेली बीन में बदला हुआ प्रतीत होता है। पेडिंग लाईट ट्रिक अतिरिक्त पैडिंग जोड़ता है, जिससे टेक्स्ट बहुत दूर सही दिखता है। किसी और को नोटिस?


अद्यतन के लिए धन्यवाद! मैंने इस बारे में अपने उत्तर में एक नोट जोड़ा है।
डग डब्लू २ Dou

4

चेक मार्क और टेक्स्ट उपयोग के बीच की जगह के लिए:

android:paddingLeft="10dp"

लेकिन यह 10dp से अधिक हो जाता है, क्योंकि चेक मार्क में पैडिंग (लगभग 5dp) होता है। यदि आप पैडिंग निकालना चाहते हैं, तो देखें कि Android CheckBox के आसपास पैडिंग कैसे निकालें :

android:paddingLeft="-5dp"
android:layout_marginStart="-5dp"
android:layout_marginLeft="-5dp"
// or android:translationX="-5dp" instead of layout_marginLeft

2
<CheckBox
        android:paddingRight="12dip" />

@AndrewKS - परीक्षण किया गया। जैसा कि अपेक्षित था, यह पूरे नियंत्रण को पैडिंग जोड़ता है, चेकबॉक्स और पाठ के बीच में नहीं।
डौग

आप शायद एक अलग TextView में पाठ रखने से बेहतर हैं।
एंड्रयूक्स

@AndrewKS - प्रयोज्य के लिए बुरा विचार। मैं चाहता हूं कि उपयोगकर्ता पाठ को छूने और चेकबॉक्स को चुनने / रद्द करने में सक्षम हो। यह कई एक्सेसिबिलिटी सुविधाओं को भी तोड़ता है, ठीक उसी तरह जैसे आप किसी वेब पेज में करते हैं।
डगडब्लू

Bad idea for usabilityनहीं यह नहीं। चेकबॉक्स और टेक्स्टव्यू दोनों को एक रेखीय लेआउट में रखें और उस रैखिक रेखा को अछूत बनाएं।
फाल्मरी

1
-1 यह उत्तर प्रश्न में प्रस्तुत मुद्दे को संबोधित नहीं करता है, जो कि छवि और पाठ के बीच अंतर के बारे में है
डेविड लैंग

2

यदि आपके पास चेकबॉक्स या रेडियोबॉटन के लिए कस्टम छवि चयनकर्ता है तो आपको इस तरह के एक ही बटन और पृष्ठभूमि की संपत्ति निर्धारित करनी चाहिए:

            <CheckBox
                android:id="@+id/filter_checkbox_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:button="@drawable/selector_checkbox_filter"
                android:background="@drawable/selector_checkbox_filter" />

आप पृष्ठभूमि संपत्ति के साथ चेकबॉक्स या रेडियो बटन पैडिंग के आकार को नियंत्रित कर सकते हैं।


नहीं, आपको ऐसा करने की जरूरत नहीं है। यह स्वीकार्य नहीं है यदि आपके पास एक कस्टम पृष्ठभूमि है जो चेकबॉक्स / रेडियोबॉटन ग्लिफ़ से अलग है।
andr

2

केवल आपको xml फ़ाइल में एक पैरामीटर होना चाहिए

android:paddingLeft="20dp"

2

0dpएंड्रॉइड 9 एपीआई 28 पर मेरे लिए सबसे साफ और सीधा समाधान मिनीहाइट और मिनीवार्ड की स्थापना करना था:

<CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="0dp"
        android:minWidth="0dp" />

1

यदि आप कस्टम बटन बना रहे हैं, उदाहरण के लिए चेकबॉक्स ट्यूटोरियल का परिवर्तन देखो

फिर बस छवि के केंद्र में पारदर्शी पिक्सेल के एक या दो और कॉलम जोड़कर btn_check_label_background.9.png की चौड़ाई बढ़ाएँ; 9-पैच मार्करों को छोड़ दें जैसे वे हैं।


1

मैंने जो किया, वह एक TextViewऔर CheckBoxएक (रिलेटिव) के अंदर है LayoutTextViewप्रदर्शित करता है पाठ है कि मैं उपयोगकर्ता को देखने के लिए चाहते हैं, और CheckBoxकिसी भी पाठ नहीं है। इस तरह, मैं CheckBoxजहाँ चाहूँ वहाँ स्थिति / पैडिंग सेट कर सकता हूँ।


1

मुझे गैलेक्सी एस 3 मिनी (एंड्रॉइड 4.1.2) के साथ एक ही समस्या थी और मैंने बस अपने कस्टम चेकबॉक्स को चेकबॉक्स के बजाय AppCompatCheckBox विस्तारित किया । अब यह पूरी तरह से काम करता है।


0

इस आकार में अपनी गद्दी को जोड़ने के लिए आपको उस छवि का आकार प्राप्त करने की आवश्यकता है जिसका आप उपयोग कर रहे हैं। एंड्रॉइड इंटर्नल्स पर, वे आपके द्वारा बताए गए ड्रॉबल को प्राप्त करते हैं और बाद में उसके आकार का उपयोग करते हैं। चूंकि यह एक निजी चर है और ऐसे कोई गेटर्स नहीं हैं जिन तक आप पहुंच नहीं सकते हैं। इसके अलावा आप com.android.internal.R.styleable.CompoundButton को प्राप्त नहीं कर सकते हैं और वहां से प्राप्त कर सकते हैं।

तो आपको अपनी खुद की शैली बनाने की आवश्यकता है (यानी custom_src) या आप इसे सीधे अपने रेडियोधर्मिता के कार्यान्वयन में जोड़ सकते हैं:

public class CustomRadioButton extends RadioButton {

    private Drawable mButtonDrawable = null;

    public CustomRadioButton(Context context) {
        this(context, null);
    }

    public CustomRadioButton(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomRadioButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mButtonDrawable = context.getResources().getDrawable(R.drawable.rbtn_green);
        setButtonDrawable(mButtonDrawable);
    }

    @Override
    public int getCompoundPaddingLeft() {
        if (Util.getAPILevel() <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            if (drawable != null) {
                paddingLeft += drawable.getIntrinsicWidth();
            }
        }
        return paddingLeft;
    }
}

0

जैसा कि आप शायद अपनी android:buttonसंपत्ति के लिए एक चयन योग्य चयनकर्ता का उपयोग करते हैं, जिसे आपको इस तरह से जोड़ने android:constantSize="true"और डिफ़ॉल्ट रूप से निर्दिष्ट करने की आवश्यकता होती है :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:constantSize="true">
  <item android:drawable="@drawable/check_on" android:state_checked="true"/>
  <item android:drawable="@drawable/check_off"/>
</selector>

उसके बाद आपको android:paddingLeftअपने चेकबॉक्स xml में विशेषता निर्दिष्ट करने की आवश्यकता है ।

विपक्ष:

लेआउट संपादक में आप पाठ को एपी 16 और नीचे वाले चेकबॉक्स के तहत ले जाएंगे, उस स्थिति में आप इसे सुझाए गए कस्टम चेकबॉक्स वर्ग जैसे कि एपीआई स्तर 16 के लिए बनाकर इसे ठीक कर सकते हैं ।

दलील:

यह एक बग है, क्योंकि StateListDrawable#getIntrinsicWidth()कॉल का उपयोग आंतरिक रूप से किया जाता है, CompoundButtonलेकिन < 0वर्तमान स्थिति नहीं होने और कोई स्थिर आकार का उपयोग नहीं करने पर यह मान लौटा सकता है।


0

इस समस्या को दूर android:singleLine="true"करने के लिए आपको checkBoxबस अपने एंड्रॉइड xml लेआउट में जोड़ना होगा :

<CheckBox 
   android:id="@+id/your_check_box"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:singleLine="true"
   android:background="@android:color/transparent"
   android:text="@string/your_string"/>

और कुछ भी विशेष प्रोग्रामेटिक रूप से नहीं जोड़ा जाएगा।


0

चेकबॉक्स छवि ओवरलैपिंग थी जब मैंने चयनकर्ता से अपने स्वयं के ड्रॉबल्स का उपयोग किया था, तो मैंने नीचे दिए गए कोड का उपयोग करके इसे हल किया है:

CheckBox cb = new CheckBox(mActivity);
cb.setText("Hi");
cb.setButtonDrawable(R.drawable.check_box_selector);
cb.setChecked(true);
cb.setPadding(cb.getPaddingLeft(), padding, padding, padding);

एलेक्स सेमेनिउक के लिए धन्यवाद


0

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


0

शायद यह देर हो चुकी है, लेकिन मैंने इस मुद्दे को प्रबंधित करने के लिए उपयोगिता विधियां बनाई हैं।

इस तरीके को अपने बर्तनों में जोड़ें:

public static void setCheckBoxOffset(@NonNull  CheckBox checkBox, @DimenRes int offsetRes) {
    float offset = checkBox.getResources().getDimension(offsetRes);
    setCheckBoxOffsetPx(checkBox, offset);
}

public static void setCheckBoxOffsetPx(@NonNull CheckBox checkBox, float offsetInPx) {
    int leftPadding;
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
        leftPadding = checkBox.getPaddingLeft() + (int) (offsetInPx + 0.5f);
    } else {
        leftPadding = (int) (offsetInPx + 0.5f);
    }
    checkBox.setPadding(leftPadding,
            checkBox.getPaddingTop(),
            checkBox.getPaddingRight(),
            checkBox.getPaddingBottom());
}

और इस तरह का उपयोग करें:

    ViewUtils.setCheckBoxOffset(mAgreeTerms, R.dimen.space_medium);

या इस तरह:

    // Be careful with this usage, because it sets padding in pixels, not in dp!
    ViewUtils.setCheckBoxOffsetPx(mAgreeTerms, 100f);

-1

चेकबॉक्स के लिए पाठ को समायोजित करने के बजाय, मैंने निम्नलिखित कार्य किया है और इसने मेरे लिए सभी उपकरणों के लिए काम किया है। 1) एक्सएमएल में, एक के बाद एक करने के लिए आस-पास चेकबॉक्स और एक टेक्स्टव्यू जोड़ें; कुछ दूरी बनाए रखना। 2) 0sp पर चेकबॉक्स टेक्स्ट का आकार सेट करें। 3) चेकबॉक्स के आगे उस टेक्स्टव्यू के सापेक्ष पाठ जोड़ें।


-3

<CheckBox android:drawablePadding="16dip" - चित्र और पाठ के बीच पैडिंग।

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