Android: drawableLeft मार्जिन और / या पैडिंग


जवाबों:


464

जैसा कि उल्लेख किया गया है कि android:drawablePaddingयदि बटन पर्याप्त छोटा है तो पाठ और ड्रॉबल के बीच केवल पैडिंग के लिए बाध्य किया जाएगा।

जब बाहर बड़े बटन आप android:drawablePaddingके साथ संयोजन के रूप में उपयोग कर सकते हैं android:paddingLeftऔरandroid:paddingRight बटन के केंद्र की ओर पाठ को आकर्षित करने के लिए । बाएं और दाएं पैडिंग को अलग-अलग समायोजित करके आप लेआउट में बहुत विस्तृत समायोजन कर सकते हैं।

यहां एक उदाहरण बटन है जो पाठ और आइकन को एक साथ धकेलने के लिए पैडिंग का उपयोग करता है, जो डिफ़ॉल्ट रूप से एक साथ होगा:

<Button android:text="@string/button_label" 
    android:id="@+id/buttonId"
    android:layout_width="160dip"
    android:layout_height="60dip"
    android:layout_gravity="center"
    android:textSize="13dip"
    android:drawableLeft="@drawable/button_icon"
    android:drawablePadding="2dip"
    android:paddingLeft="30dip"
    android:paddingRight="26dip"
    android:singleLine="true"
    android:gravity="center" />  

21
Android: paddingLeft = "30dip" Android: paddingRight = "26dip" यहां प्रमुख हैं!
इगोरगानापोलस्की

4
यह सवाल से संबंधित नहीं है, लेकिन एंड्रॉइड: गुरुत्वाकर्षण = "केंद्र" पाठ को ड्रॉबल के केंद्र के साथ संरेखित रखेगा!
cwhsu

1
क्या होगा अगर हमारे पास बाएं और दाएं दोनों में ड्रॉबल्स हैं, और केवल सही ड्रॉबल को समायोजित करना है ??
nmxprime

मैं केवल उपयोग करता हूं: android: paddingLeft, और यह छवि की स्थिति बदलता है। android: drawablePadding का उपयोग छवि और पाठ के बीच की जगह के लिए किया जाता है।
बहादुर

इस कोड का मुद्दा यह है कि passwordToggleDrawableबाएं पैडिंग गैप बड़ा हो जाता है क्योंकि यह केवल ड्रॉबल के लिए विशेष लक्ष्य नहीं कर सकता है।
फल

184

TextView के पास एक android है: ड्रॉबलपैड प्रॉपर्टी जो कि चाल करना चाहिए:

एंड्रॉयड: drawablePadding

ड्रॉबल्स और टेक्स्ट के बीच पैडिंग।

एक आयाम मान होना चाहिए, जो कि "14.5sp" जैसी इकाई के साथ जोड़ा गया एक फ्लोटिंग पॉइंट नंबर है। उपलब्ध इकाइयाँ हैं: px (पिक्सेल), dp (डेंसिटी-इंडिपेंडेंट पिक्सल), sp (पसंदीदा फ़ॉन्ट आकार पर आधारित स्केल्ड पिक्सल), (इंच), mm (मिलीमीटर) में।

यह एक संसाधन (फ़ॉर्म में "@ [पैकेज:] प्रकार: नाम") या थीम विशेषता (फ़ॉर्म में "? [पैकेज:] [प्रकार:] नाम") का संदर्भ भी हो सकता है, जिसमें इस प्रकार का मान होता है ।

यह वैश्विक विशेषता संसाधन प्रतीक ड्रॉबलपैडिंग से मेल खाती है।


61

android:drawablePaddingकेवल पाठ और ड्रॉबल के बीच एक पैडिंग गैप बनाएगा यदि बटन 2 को एक साथ स्क्वीज करने के लिए छोटा है। यदि आपका बटन संयुक्त चौड़ाई (drawableLeft / drawableRight के लिए) या ऊँचाई (drawableTop / drawableBottom के लिए) से अधिक है, तो drawablePadding कुछ भी नहीं करता है।

मैं इस समय के साथ भी संघर्ष कर रहा हूं। मेरे बटन काफी चौड़े हैं, और आइकन बटन के बाएं किनारे पर लटका हुआ है और पाठ बीच में केंद्रित है। मेरा अब तक का एकमात्र तरीका है कि फ़ोटोशॉप के साथ कैनवस के बाएँ किनारे पर रिक्त पिक्सेल जोड़कर ड्रॉएबल पर एक मार्जिन में सेंकना किया गया है। आदर्श नहीं है, और वास्तव में अनुशंसित भी नहीं है। लेकिन अब TextView / Button के पुनर्निर्माण के लिए मेरा स्टॉप-गैप समाधान है।


मेरी समस्या समझाने के लिए धन्यवाद। मैंने महसूस नहीं किया है कि यह केवल तभी होता है जब बटन पर्याप्त चौड़ा हो
peter.bartos

मेरी भी यही समस्या है। मेरा बटन चौड़ा है, इसलिए
ड्राबल

याय ने काम किया धन्यवाद
ग्रेड

43

हाँ। निम्नानुसार drawablePadding का उपयोग करें ,

<TextView
        android:id="@+id/tvHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Settings and Contents"
        android:drawableLeft="@drawable/icon_success"
        android:drawablePadding="10dp" />

37

अपने drawable resource.xml बनाओ

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <inset android:drawable="@drawable/small_m" android:insetLeft="10dp" android:insetTop="10dp" />
    </item>
    <item>
        <inset android:drawable="@drawable/small_p" android:insetLeft="10dp" android:insetTop="10dp" />
    </item>
</selector>

2
@ बेहतरीन कलाकार मैंने इनसेट का उपयोग करने योग्य है और यह नए संस्करण के उपकरणों के लिए ठीक काम कर रहा है। मेरा मतलब है कि यह एसडीके 16, 17 में काम नहीं कर रहा है लेकिन एसडीके 23 में काम कर रहा है। क्या कोई विचार है?
भाविन चौहान


इसके लिए अच्छा उत्तर और उत्थान। आप बस एक समस्या को हल करने में मेरी मदद करें जिसने मुझे लंबे समय तक भ्रमित किया।
एंथोनीफ

34

android:drawablePaddingड्रॉइंग आइकन को पैडिंग देने का सबसे आसान तरीका है, लेकिन आप विशिष्ट एक साइड पैडिंग को paddingRightया paddingLeftड्रॉएबल आइकन की तरह नहीं दे सकते हैं । यह हासिल करने के लिए कि आपको इसे खोदना है। और अगर आप लागू होते हैं paddingLeftया paddingRightकरने के लिए Edittextतो यह गद्दी पूरे करने के लिए स्थापित करेंगे Edittextdrawable आइकन के साथ।


12

अपने edittext के लिए एक आकृति को परिभाषित करें और इसे उदाहरण के लिए एक पैडिंग दें

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <padding
        android:left="5dp"
        android:right="5dp"
    />
    <solid android:color="#F6F6F6" />
    <stroke
        android:width="1px"
        android:color="#C3C3C3" />

    <corners
        android:bottomLeftRadius="1dp"
        android:bottomRightRadius="1dp"
        android:topLeftRadius="1dp"
        android:topRightRadius="1dp" />
</shape>

इस आकार में परिभाषित पैडिंग ड्रिबल या सही करने के लिए पैडिंग देने में मदद करेगा ---------------------- इस आकृति को EditView पर लागू करें

 <EditText
            android:id="@+id/example"
            android:layout_width="fill_parent"
            android:layout_height="36dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@drawable/shape2"
            android:drawableLeft="@drawable/icon1"
            android:drawablePadding="@dimen/txtDrwblPadding"
            android:ems="10"
         />

पृष्ठभूमि के रूप में उस परिभाषित आकार का उपयोग करने से आपके एडिटटेक्स्ट को ड्रॉबल लाइफ़ के लिए कुछ स्टाइल प्लस मार्जिन मिलेगा।


12

एंड्रॉइड: ड्रॉएबलपैडिंग ड्रॉइंग आइकन को पैडिंग देने का सबसे आसान तरीका है लेकिन आप विशिष्ट एक साइड पैडिंग नहीं दे सकते हैं जैसे ड्रॉइंग आइकन का पैडिंग राइट या पेडिंग लिफ़्ट। यह हासिल करें कि आपको इसमें खुदाई करनी है। और अगर आप Edittext पर पेडिंग लाईट या पेडिंग राइट लगाते हैं तो यह ड्रॉइंग आइकन के साथ-साथ पूरे एडिटिंग में पैडिंग लगा देगा।

<TextView android:layout_width="match_parent"
    android:padding="5sp"
    android:id="@+id/date"
    android:gravity="center|start"
    android:drawableEnd="@drawable/ic_calendar"
    android:background="@drawable/edit_background"
    android:hint="Not Selected"
    android:drawablePadding="10sp"
    android:paddingStart="10sp"
    android:paddingEnd="10sp"
    android:textColor="@color/black"
    android:layout_height="wrap_content"/>

आपको "dp" का उपयोग करना चाहिए
मार्क Pazon

11
<TextView
    android:layout_width="wrap_content"
    android:layout_height="32dp"
    android:background="@drawable/a"
    android:drawableLeft="@drawable/concern_black"
    android:gravity="center"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:drawablePadding="10dp"
    android:text="text"/>

नोट: लेआउट_ एक्सपोज़र को गैप_ कॉन्टेंट होने की जरूरत है और गैप को नियंत्रित करने के लिए पेडिंग लाईट पेडिंगराइट ड्राएबलपैडिंग का उपयोग करें। यदि आप निर्दिष्ट करते हैं कि लेआउट_उपयोग मूल्य में आइकन और पाठ के बीच अंतर होगा, तो मुझे लगता है कि एक बार लेआउट_विशेषता निर्दिष्ट मान दें, तो पैडिंग माप जाएगा।


9

मैं अपना उत्तर रिंग में भी फेंक दूंगा। यदि आप इस प्रोग्राम को करना चाहते हैं तो आप निम्न कार्य कर सकते हैं।

final Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.somedrawable);
final boolean isLTR = ViewCompat.LAYOUT_DIRECTION_LTR == ViewCompat.getLayoutDirection(this);
final int iconInsetPadding = getResources().getDimensionPixelSize(R.dimen.icon_padding);

final Drawable insetDrawable = new InsetDrawable(drawable, isLTR ? 0 : iconInsetPadding, 0, isLTR ? iconInsetPadding : 0, 0);

इससे पैडेबल को ड्रॉबल के अंत में जोड़ा जाएगा जहां एंड का अर्थ होगा कि एलटीआर या आरटीएल में फोन के आधार पर लेफ्ट / राइट।


7

इसके बजाय Buttonउपयोग के LinearLayoutसाथ ImageViewऔर TextViewअंदर। बाल वस्तुओं में जैसे ImageViewऔर TextViewउपयोग android:duplicateParentState="true"


आपको वास्तव में एक फ्रेमलेयआउट और एक बटन की आवश्यकता होगी (और ImageView / TextView अपने स्वयं के रेखीय लयआउट के अंदर) बटन यूआई को पुन: पेश करने के लिए और ऑनक्लिकलिस्टर () बटन भाग को स्थानांतरित करें
3c71

1
यदि आप पहले से ही TextView में ड्रा करने योग्य है, तो अतिरिक्त लेआउट का उपयोग क्यों करें।
परिंदा

5

आपको लेयर-लिस्ट का उपयोग करने पर विचार करना चाहिए

इस तरह एक ड्रा करने योग्य फ़ाइल बनाएं, इसे ic_calendar.xml नाम दें

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent"/>
    </shape>
</item>
<item android:right="10dp">
    <bitmap android:gravity="center_vertical|left"
        android:src="@drawable/ic_calendar_16dp"
        android:tint="@color/red"
        />
</item>
</layer-list>

लेआउट फ़ाइल के तहत,

<TextView
         android:id="@+id/tvDate"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:drawableLeft="@drawable/ic_calendar"
         android:textColor="@color/colorGrey"
         android:textSize="14sp" 
    />

4

आप बटन के लिए एक पैडिंग का उपयोग कर सकते हैं और आप ड्रॉबलपैडिंग के साथ खेल सकते हैं

 <Button
    style="@style/botonesMenu"
    android:padding="15dp"
    android:drawablePadding="-15dp"
    android:text="@string/actualizarBD"
    android:textAlignment="gravity"
    android:gravity="center"
    android:layout_row="1"
    android:layout_column="0"
    android:drawableTop="@drawable/actualizar"
    android:id="@+id/btnActualizar"
    android:onClick="actualizarBD" />

आप एक विशिष्ट पैडिंग का उपयोग कर सकते हैं, जिसमें आपका ड्रा करने योग्य निर्भर होता है, जिसमें एंड्रॉइड शामिल है: paddingLeft = "10dp" या android: paddingBottom = "10dp" या Android: paddingRight = "10dp" या "paddTop =" 10dp "


2

आप android:drawableLeft="@drawable/your_icon"बाईं ओर दिखाए जाने वाले ड्रॉबल को सेट करने के लिए उपयोग कर सकते हैं । Drawable के लिए एक गद्दी सेट करने के लिए आप का उपयोग करना चाहिए android:paddingLeftया android:paddingRightक्रमशः छोड़ दिया / सही गद्दी स्थापित करने के लिए।

android:paddingRight="10dp"
android:paddingLeft="20dp"
android:drawableRight="@drawable/ic_app_manager"

1

यदि ड्रॉबल रिसौस का आकार तय किया गया है, तो आप इस तरह कर सकते हैं:

<Button
    android:background="@drawable/rounded_button_green"
    style="?android:attr/selectableItemBackground"
    android:layout_height="wrap_content"
    app:layout_widthPercent="70%"
    android:drawableRight="@drawable/ic_clear_black_24dp"
    android:paddingRight="10dp"
    android:paddingLeft="34dp"
    tools:text="example" />

यहाँ कुंजी यह है कि:

    android:drawableRight="@drawable/ic_clear_black_24dp"
    android:paddingRight="10dp"
    android:paddingLeft="34dp"

यही है, ड्रॉबल रिसोर्स प्लस पेडिंग राइट का आकार पेडिंग लाइट है।

आप इस उदाहरण में परिणाम देख सकते हैं


1
textView.setCompoundDrawablesWithIntrinsicBounds(AppCompatResources.getDrawable(this,drawable),null,null,null);

addressTitleView.setCompoundDrawablePadding();

हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
रोजारियो परेरा फर्नांडिस

यह केवल टेक्स्ट व्यू के लिए काम करता है न कि उदा बटन जो स्टार्ट / एंड ड्रावेबल्स को सेट करने की अनुमति देता है
Ixx

1

बस से रीमेक:

<?xml version="1.0" encoding="utf-8"?>
<shape
        xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="40dp"/>

    <solid android:color="@android:color/white"/>

</shape>

सेवा

<layer-list
        xmlns:android="http://schemas.android.com/apk/res/android">
    <item
            android:right="@dimen/_2dp"
            android:left="@dimen/_2dp"
            android:bottom="@dimen/_2dp"
            android:top="@dimen/_2dp"
            >
        <shape
                xmlns:android="http://schemas.android.com/apk/res/android">

            <corners android:radius="40dp"/>

            <solid android:color="@android:color/white"/>

        </shape>
    </item>

</layer-list>

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