2010-02-08 11 views
17

पर एक आकार पर शीर्ष सीमा खींचना मैं एक कस्टम प्रगति पट्टी (WebView के तहत स्थित) बना रहा हूं और जो मैं आकर्षित करना चाहता हूं वह WebView और ProgressBar के बीच एक 1 डीपी-चौड़ी रेखा है। मैं मौजूदा drawable को संशोधित कर रहा हूँ, अर्थात् progress_horizontal.xml, और कुछ इस तरह की कोशिश की:एंड्रॉइड

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

    (...) 

    <item> 
    <shape android:shape="line"> 
     <stroke android:width="1dp" android:color="#FF000000" /> 
    </shape> 
    </item> 

</layer-list> 

इस लाइन तथापि लंबवत रूप से केंद्रित है लेकिन मैं इसे drawable के ऊपर बनाए जा करना चाहते हैं। केवल विचार मैं के साथ आ सकता है नीचे इस "hacky" ढाल का उपयोग करने के लिए है:

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

    (...) 

    <item> 
    <shape> 
     <gradient 
      android:startColor="#FF000000" 
      android:centerColor="#00000000" 
      android:centerY="0.01" 
      android:endColor="#00000000" 
      android:angle="270" 
     /> 
    </shape> 
    </item> 

</layer-list> 

आप बेहतर विचार है कैसे एक पंक्ति आकार layer-list के साथ परिभाषित drawable के शीर्ष करने के गठबंधन आकर्षित करने के लिए है? मैं थोड़ी देर के खर्च के रूप में अच्छी तरह से यह पता लगाने की कोशिश कर

उत्तर

47

की तरह कुछ द्वारा यह offsetting का प्रयास किया। उम्मीद है कि ऐसा करने का एक बेहतर तरीका है, लेकिन यहां दी गई विधि है, जो कि हैकिश भी है, लेकिन अगर यह किसी की मदद करता है, तो मैंने सोचा कि मैं साझा करूंगा।

आपकी परत सूची में पहला आइटम आपकी सीमा होने के लिए इच्छित रंग का ठोस होना चाहिए। इसके बाद वह सीमा होगी जो आप सीमा पार करना चाहते हैं, जिस सीमा पर आप सीमा चाहते हैं उस पर पैडिंग के साथ।

उदाहरण के लिए:

<?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="YOUR BORDER COLOR" /> 
     </shape> 
    </item> 
    <item android:top="YOUR TOP BORDER THICKNESS"> 
     THE THING YOU WANT A BORDER ON 
    </item> 
</layer-list> 

विचार है कि आइटम पर गद्दी इसके पीछे ठोस आकार का पता चलता है, सीमा उपस्थिति दे रही है। आप सीमा जोड़ने के लिए किसी भी तरफ पैडिंग जोड़ सकते हैं। मुझे कल्पना है कि आप अधिक जटिल हो सकते हैं और इस तरह अलग रंगीन सीमाएं भी कर सकते हैं।

एक हैक जैसा लगता है लेकिन यह मेरे लिए काम करता है।

संपादित करें: मैंने कहा "पैडिंग" लेकिन लेयर-सूचियों में यह ऑफसेट की अधिक है।

+0

यह काम करता है! धन्यवाद – Kevin

+9

यह स्पष्ट रूप से एक पारदर्शी "चीज" के साथ काम नहीं करता है। – Kenneth

+0

इसके लिए धन्यवाद। :) मैंने एक निचली सीमा को जोड़ने के लिए एक अतिरिक्त परत जोड़ा जो मुझे चाहिए। – KarenAnne

12

मैं सभी संबंधित विषयों से गुज़र रहा था लेकिन कोई भी मेरी समस्या का समाधान नहीं कर सका। लेकिन उनमें से कुछ समझने के लिए बहुत उपयोगी थे कि परत-सूची या आकार पैरामीटर कैसे काम करते हैं।

मेरी समस्या एक रैखिक ढाल वाले बटन को परिभाषित करना था और विभिन्न रंगों में एक शीर्ष और नीचे की रेखा खींचना था। आखिरकार मैंने इस समाधान को हैक किया। मैं फाइल सेव Unter रेस/drawable/blue_btn.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" >   
     <shape android:shape="rectangle"> 
      <solid android:color="@color/blue_end" /> 
      <padding 
        android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
      <stroke 
       android:width="1dp" 
       android:color="@color/bottomline_btn" />       
     </shape>  
    </item> 
    <item> 
     <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
      <item> 
       <shape android:shape="rectangle"> 
        <solid android:color="@color/blue" /> 
        <gradient 
         android:startColor="@color/blue" 
         android:endColor="@color/blue_end" 
         android:angle="270" /> 
       </shape> 
      </item> 
      <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp"> 
       <shape android:shape="rectangle"> 
        <stroke 
         android:width="1dp" 
         android:color="@color/topline_btn" />      
        <solid android:color="#00000000" /> 
        <corners android:radius="0dp" /> 
       </shape> 
      </item> 
      <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp"> 
       <shape android:shape="rectangle"> 
        <stroke 
         android:width="1dp" 
         android:color="@color/bottomline_btn" />       
        <solid android:color="#00000000" /> 
        <corners android:radius="0dp" /> 
       </shape> 
      </item>   
     </layer-list> 
    </item> 
</selector> 


<color name="topline_btn">#31ffffff</color> 
<color name="bottomline_btn">#31000000</color> 

<color name="blue">#449def</color> 
<color name="blue_end">#2f6699</color> 
0

मेरे समाधान आखिरी परत आइटम के रूप में 9-पैच को जोड़ने के लिए है:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape> 
      <solid android:color="@color/tab_button_active_layer2" /> 
     </shape> 
    </item> 
    <item android:bottom="@dimen/tab_button_active_bottom_bar_width"> 
     <shape> 
      <solid android:color="@color/tab_button_active_layer1" /> 
     </shape> 
    </item> 
    <!-- 9-patch drawable --> 
    <item android:drawable="@drawable/tab_button_border_top"/> 
</layer-list>