2012-11-13 20 views
8

के साथ काम नहीं करता है क्या कोई मुझे बता सकता है कि यह क्यों हो रहा है?पैडिंग कुछ पृष्ठभूमि संसाधन

मेरे पास टेक्स्टव्यू का विस्तार करने वाला एक साधारण सरल वर्ग है। जब मैं रंगीन रंग को पृष्ठभूमि रंग सेट करता हूं, तो पैडिंग ठीक काम करता है। जब मैं पृष्ठभूमि संसाधन को android.R.drawable.list_selector_background में बदलता हूं, तो मेरा पैडिंग अब लागू नहीं होता है। एफ क्या है?

यहाँ मेरी यूआई वर्ग है:

public class GhostDropDownOption extends TextView { 

    TextView text_view; 


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


    public GhostDropDownOption(Context context) { 
     super(context); 
     setup(context); 
    } 


    private void setup(Context context) { 
     this.setClickable(false); 
     // THE 2 LINES BELOW ARE THE ONLY THING I'M CHANGING 
     //this.setBackgroundResource(android.R.drawable.list_selector_background); 
     this.setBackgroundColor(Color.BLUE); 
    } 
} 

और मैं इस तरह लेआउट में यह उपयोग कर रहा हूँ:

<trioro.voyeur.ui.GhostDropDownOption 
    android:id="@+id/tv_dropdown_option_1" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:gravity="center_vertical" 
    android:text="@string/request_control_dropdown_option_1" 
    android:textColor="#000000" 
    android:padding="10dip"/> 

और इस पृष्ठभूमि को बदलने का परिणाम है: enter image description here

उत्तर

11

पर कॉल:

this.setBackgroundResource(android.R.drawable.list_selector_background); 

किसी भी previosly सेट पैडिंग को हटा देगा (यह 9-पैच संपत्तियों के साथ ठीक से काम करने के लिए है)।

गद्दी इस तरह ऊपर पंक्ति के बाद कोड में स्थापित करने के लिए, का प्रयास करें:

this.setPadding(PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT, PADDING_CONSTANT); 

बस याद रखें कि setPadding के लिए भेजा मूल्यों पिक्सल डुबकी नहीं में है!

+1

अधिक जानकारी यहां मिल सकती है: http://stackoverflow.com/questions/2886140/does-changing-the-background-also-change-the-padding-of-a-linearlayout – TofferJ

2

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

इसका कारण यह है कि 9-पैच छवियों के मामले में ड्रॉबल्स स्वयं पैडिंग कर सकते हैं (जहां नीचे और दाएं पिक्सेल सीमाएं पैडिंग की मात्रा को परिभाषित करती हैं)।

आपका समाधान सिर्फ एक्सएमएल में अपनी पृष्ठभूमि संसाधन स्थापित करने के लिए किया जाना चाहिए:

android:background="@android:drawable/list_selector_background"

हालांकि मुझे विश्वास है कि एक निजी drawable संसाधन आप पहली बार अपने परियोजना में नकल करना होगा कि हो सकता है।

+1

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

संबंधित मुद्दे