2012-06-03 20 views
9

मैं लेआउट के माध्यम से एक एंड्रॉइड यूआई बनाने की कोशिश कर रहा हूं। मैं निम्नलिखित के साथ शुरू करता हूं:एंड्रॉइड: एटीआर शैली कैसे काम करती है?

<TextView 
    android:id="@+id/..." 
    android:layout_marginTop="8dip" 
    android:text="..." 
    style="?android:attr/listSeparatorTextViewStyle"/> 

और यह अच्छा लगता है (सभी कैप्स, छोटे फ़ॉन्ट, इसके नीचे विभाजित बार)। अब मैं शैली का विस्तार करना चाहते, तो मैं निम्नलिखित के लिए इसे बदल: की एक शैली के साथ

<TextView 
    android:id="@+id/..." 
    android:layout_marginTop="8dip" 
    android:text="..." 
    style="@style/section_title"/> 

:

<style name="section_title" parent="@android:attr/listSeparatorTextViewStyle"> 
    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
</style> 

और वह काम नहीं करता है (फ़ॉन्ट सही है, लेकिन विभक्त लाइन चला गया)।

कैसे आते हैं ... वह?

उत्तर

22

जब आप उपयोग कर रहे हैं:

style="?android:attr/listSeparatorTextViewStyle" 

आप शैली इस विशेषता (listSeparatorTextViewStyle) द्वारा बताया उपयोग कर रहे हैं। यदि आप प्लेटफ़ॉर्म themes.xml में देखते हैं तो आप देखेंगे कि वास्तव में इस विशेषता के लिए उपयोग की जाने वाली शैली Widget.TextView.ListSeparator.White है। तो यह style है जो आपको अपनी कस्टम शैली में विस्तारित करना चाहिए।

दुर्भाग्य से वह शैली निजी है और आप इसे विस्तारित नहीं कर सकते हैं, या आपको इसे विस्तारित नहीं करना चाहिए (संदर्भ के लिए, Google से this bug report देखें)। आपका सबसे अच्छा विकल्प उस संपूर्ण शैली की प्रतिलिपि बनाना होगा, Widget.TextView.ListSeparator.White (Widget.TextView.ListSeparator सार्वजनिक नहीं है और साथ ही उसे कॉपी करना होगा), अपनी कस्टम शैली में और एंड्रॉइड प्लेटफ़ॉर्म से शैली को विस्तारित करने के बजाय उपयोग करें (this response देखें ऊपर लिंक)।

+1

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

+1

@Hounshell आप एक कस्टम थीम का उपयोग कर सकते हैं और 'listSeparatorTextViewStyle' विशेषता' के लिए अपनी शैली सेट कर सकते हैं। इसके साथ, आपकी खुद की शैली प्रत्येक एंड्रॉइड मंच पर मौजूद होगी। बेशक यह आपको कुछ शैलियों को बदलने वाले फोन निर्माता के लिए कमजोर बना देगा (केवल वास्तविक समस्या पृष्ठभूमि खींचने योग्य विशेषता है)। आप यह नहीं कहते ** ** कैसे ** आपके लेआउट इस शैली का उपयोग करता है, लेकिन ध्यान रखें कि उपयोगकर्ता शायद किसी ऐप में कुछ UI अंतरों का सामना करते हैं। – Luksprog

+0

यह कैसे पता लगाने के लिए कि कौन सा आइटम एटीआर इंगित कर रहा है? –

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