XML लेआउट में पेडिंग <शेप> को प्रभावित नहीं करता है


93

मैं <shape>एक XML फ़ाइल / लेआउट के भीतर घोषित में पैडिंग सेट करने का प्रयास कर रहा हूं । लेकिन मैं जो भी सेट करता हूं, पैडिंग से संबंधित कुछ भी नहीं बदलता है। यदि मैं किसी अन्य गुण को संशोधित करता हूं, तो मुझे UI पर प्रभाव दिखाई देता है। लेकिन यह पैडिंग के साथ काम नहीं करता है। क्या आप उन संभावित कारणों पर सलाह दे सकते हैं जिनके लिए यह हो सकता है?

यहाँ एक्सएमएल आकार मैं शैली की कोशिश कर रहा हूँ:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle">

    <stroke android:width="1dp" 
            android:color="#ffffff" 
            android:dashWidth="2dp"/>

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

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

    <padding android:left="1dp" 
             android:top="20dp"
             android:right="20dp" 
             android:bottom="2dp"/>
 </shape>

जवाबों:


113

मैंने आखिरकार पैडिंग के साथ अपनी समस्या का समाधान कर लिया है।

इसलिए यहां पैडिंग करने से आकृति पर कोई प्रभाव नहीं पड़ेगा। इसके बजाय, आपको अन्य ड्रॉबल में पैडिंग लागू करना होगा जो इसका उपयोग करेंगे। इसलिए, मेरे पास एक ड्रॉबल है जो आकृति का उपयोग करता है और वहां मैं निम्नलिखित कार्य करता हूं:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/shape_below"/>
   <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/>
</layer-list>

इसलिए, जैसा कि आप दूसरे- <item>सेलेमेंट में देख सकते हैं कि मैंने पैडिंग (टॉप एंड राइट) सेट की है। और इसके बाद सब कुछ काम करता है।

धन्यवाद।


नमस्ते, मुझे समझ नहीं आ रहा है कि इस समस्या का समाधान कैसे लागू किया जाए। मेरे पास एक बटन है जो आकार और सेटिंग का उपयोग करता है adnroid: शीर्ष और Android: सही का कोई प्रभाव नहीं है। मैं इसे कैसे हल करूंगा? धन्यवाद।
icecream 7

2
मैं सोचता हूं कि कोंगोमेयर जो कह रहा है वह कुछ ऐसा करने के लिए है, जो मेरे लिए काम करता है, लेकिन फिर कोनों में हमेशा एक अपारदर्शी सफेद पृष्ठभूमि होती है, जिससे डिस्प्ले इश्यू (टिप्पणियों में प्रारूप के लिए खेद है!): <परत-सूची xmlns: android = " schemas.android.com/apk/res/android "> <वस्तु> <आकार Android: आकार =" आयत "> <आकार Android: चौड़ाई =" 0dp "Android: height =" 45dp "Android: color =" @ android: रंग / पारदर्शी "/> </ आकृति> </ वस्तु> <आइटम Android: top =" 0dp "Android: right =" 0dp "android: bottom =" 0dp "Android: left =" 0dp "Android: drawable =" @ drawable / button_blue_shape "/> </ परत-सूची>
DustinB

इसके अलावा ऑफ-टॉपिक लेकिन उपयोगी हो सकता है: यदि आपका इस्तेमाल किया जाने वाला उपयोग सिर्फ एक रंग है, तो आप एंड्रॉइड की तरह लिख सकते हैं: drawable = "@ color / divide"। लेकिन पुराने उपकरणों पर यह टूट जाता है। मैंने इसे 2.2 पर परीक्षण किया और इसे तोड़ दिया गया। निश्चित नहीं है कि यह किस स्तर पर स्वीकार्य हुआ।
पीजूस P ’

वास्तव में, <item>बच्चे के ड्रॉबल्स को स्वीकार करता है (हालांकि यह स्पष्ट रूप से प्रलेखित नहीं है)। इस प्रकार आप एकल xml के भीतर इस व्यवहार को प्राप्त कर सकते हैं।
एलेक्स कोहेन

3
यह उत्तर सात साल बाद भी सही प्रतीत होता है। पृथ्वी पर किसके <shape><padding> लिए है ?
डेविड लॉर्ड

75

जैसा कि टिप्पणियों के एक जोड़े ने कहा है, सबसे अच्छा तरीका यह है कि <shape>एक <item>तत्व को लपेटो और इसके बजाय वहां पैडिंग सेट करें। हालांकि अन्य विकल्प उपलब्ध हैं जो नीचे दिए गए लिंक में विस्तृत हैं। जैसे

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="8dp"
        android:right="8dp"
        android:top="8dp"
        android:bottom="8dp">

        <shape android:shape="rectangle">
            ...
        </shape>
    </item>
</layer-list>

अपनी आवश्यकताओं के आधार पर, परत-सूची का उपयोग करने के बजाय, आप निम्न में से किसी भी प्रकार का उपयोग कर सकते हैं:

  • परत-सूची
  • चयनकर्ता
  • स्तर-सूची
  • संक्रमण

उपलब्ध ड्रॉबल प्रकारों के बारे में अधिक जानकारी के लिए इस Android दस्तावेज़ देखें

सूत्रों का कहना है:


हाँ, आपने उल्लेख नहीं किया<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
user924

@ user924 मुझे यकीन नहीं है कि आपकी बात क्या है। आइटम को <परत-सूची> के अंदर शामिल किया जा सकता है अगर वह किसी के उद्देश्यों को पूरा करता है, लेकिन यह मूल प्रश्न के लिए आवश्यक नहीं है और न ही सामान्य समाधान के लिए जो पैडिंग के साथ <आइटम> के अंदर की सामग्री को घोंसला
बनाना है

3
मेरा मतलब है कि एक उदाहरण देना बेहतर है जिसे आप बिना संस्करणों के कॉपी और चला सकते हैं, लेकिन इस मामले में <आइटम> को हल नहीं किया जाएगा (क्योंकि यह <परत-सूची के अंदर होना चाहिए)
user924

2
@ user924 मैं देख रहा हूं कि आपका क्या मतलब है, इस मुद्दे को इंगित करने और उत्तर को बेहतर बनाने में मदद करने के लिए बहुत धन्यवाद। मैंने कोड नमूना अपडेट किया है और उपलब्ध
ड्रॉबल

23

लिओबोमायर द्वारा उत्तर दिया गया है, लेकिन यहां एक ही समाधान लागू किया गया है, लेकिन एक नया ड्रॉबल बनाने के ओवरहेड के बिना, इसलिए फ़ाइल अव्यवस्था को कम करना:

https://stackoverflow.com/a/3588976/578746

ऊपर के SO उत्तर पर anonser द्वारा awser की कॉपी / पेस्ट करें:

<item android:left="6dp"
      android:right="6dp">

    <shape android:shape="rectangle">
        <gradient android:startColor="#ccd0d3"
                  android:centerColor="#b6babd"
                  android:endColor="#ccd0d3"
                  android:height="1px"
                  android:angle="0"/>
    </shape>
</item>


1
इस जवाब के लिए धन्यवाद येल, लेकिन केवल उत्तर पोस्ट लिंक नहीं करने के लिए याद रखें। हमेशा अपने उत्तर में सभी आवश्यक जानकारी प्रदान करें क्योंकि लिंक सामग्री बदल सकती है या अमान्य हो सकती है।
आईआईटी

उत्तर का संपादन
याहल

22

आप इनसेट की कोशिश कर सकते हैं:

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="2dp"
    android:insetLeft="1dp"
    android:insetRight="20dp"
    android:insetTop="20dp">

    <shape android:shape="rectangle">

        <stroke
            android:width="1dp"
            android:color="#ffffff"
            android:dashWidth="2dp" />

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

        <corners android:radius="11dp" />
    </shape>

</inset>

9

मैंने इस समस्या को इस तरह हल किया:

<shape android:shape="oval"  >
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <solid android:color="@color/colorAccent" />
</shape>

बस इसमें एक पारदर्शी स्ट्रोक जोड़ा गया।


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