2012-05-17 11 views
8

मेरे पास एक कस्टम व्यू है जो ढांचे वर्गों में से एक को बढ़ाता है। एंड्रॉइड में अधिकांश View एस के लिए कुछ डिफ़ॉल्ट विशेषताएं परिभाषित की गई हैं (जैसे कि Button क्लिक करने योग्य, जो android:clickable="true" द्वारा निर्धारित है)।एंड्रॉइड: कस्टम दृश्यों के लिए डिफ़ॉल्ट विशेषताएं

मैं अपने कस्टम व्यू के लिए एप्लिकेशन-व्यापी डिफ़ॉल्ट कैसे प्रदान करूं?

+0

http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml – Ixx

+0

मैं कस्टम विशेषताओं को परिभाषित करने के बारे में नहीं पूछ रहा हूं। मैं पहले से ही ऐसा करता हूँ। मैं चाहता हूं कि कुछ विशेषताओं को परिभाषित किया गया ** ** उन विशेषताओं के लिए परिभाषित किया गया है ताकि दृश्य को कुछ अतिरिक्त गुण सेट किए बिना लेआउट फ़ाइल में जोड़ा जा सके। – Karakuri

उत्तर

12

मैं thusly अपने ही समस्या हल हो:

res/values ​​/ attrs.xml:

<resources> 
    <attr name="customViewStyle" type="reference" /> 
</resources> 

res/values ​​/ styles.xml आप जो कुछ करते हैं वह ऐपथीम में मैनिफेस्ट में विषय सेट करता है। यह AppTheme की परिभाषा में customViewStyle के स्थान पर android:[widget]Style का उपयोग करके मानक विजेट्स के साथ भी काम करता है।

+2

हालांकि यह आपके विचार पर कैसे लागू होता है? कस्टम व्यू स्टाइल आपके व्यू कार्यान्वयन से जुड़ा हुआ कहां है? – cottonBallPaws

+1

@ कपासबालपॉप्स, निम्नलिखित ने मुझे सही दिशा में इंगित किया: http://stackoverflow.com/a/31505624/5166250 – Travis

1

आप अतिरिक्त रूप से इस लेआउट के लिए शैली बना सकते हैं और शैली को सेट कर सकते हैं जहां आप दृश्य का उपयोग करते हैं।

स्रोत: http://developer.android.com/guide/topics/resources/style-resource.html

+2

शैली टैग का उपयोग लेआउट फ़ाइल में व्यक्तिगत विशेषताओं को सेट करने के लिए बस एक शॉर्टकट है - यह वह नहीं है जिसे मैं पूरा करने की कोशिश कर रहा हूं। मैं कुछ डिफ़ॉल्ट उपस्थिति/विशेषताओं को रखना चाहता हूं, और फिर जो कोई भी मेरे कस्टम व्यू का उपयोग कर रहा है, उसे स्टाइल टैग का उपयोग इसे और संशोधित करने के लिए कर सकता है। इस बारे में सोचें: जब आप लेआउट में टेक्स्ट व्यू जोड़ते हैं, तो इसमें टेक्स्ट आकार, टेक्स्ट रंग इत्यादि के लिए डिफ़ॉल्ट होता है। उन्हें कहीं से आना पड़ता है, क्योंकि आपको शैली या कुछ भी निर्दिष्ट करने की आवश्यकता नहीं है। आपके द्वारा संदर्भित किए गए गुण या शैली का संदर्भ उन डिफ़ॉल्टों पर लागू किया जाएगा। – Karakuri

0

मुझे लगता है कि आप देखें कंस्ट्रक्टर्स कि एक AttributeSet तर्क ले ओवरराइड, और अपने खुद के संशोधित AttributeSet निर्माण सुपर क्लास निर्माता को पारित करने के लिए की आवश्यकता होगी।

संपादित करें: यहां तक ​​कि आसानी से, अपने व्यू सबक्लास कन्स्ट्रक्टर को setClickable आदि पर क्लिक करें ताकि आप जो चाहते हैं उसे डिफ़ॉल्ट रूप से बदल सकें। तब

<resources> 
    <style name="AppTheme" parent="@android:style/Theme.Light"> 
     <item name="android:background">@drawable/bg_light</item> 
     <item name="customViewStyle">@style/CustomView</item> 
    </style> 

    <style name="CustomView"> 
     <item name="android:clickable">true</item> 
     <item name="android:focusable">true</item> 
     <item name="android:focusableInTouchMode">true</item> 
    </style> 
</resources> 

:

+3

यही वह है जो मैंने मूल रूप से किया था। समस्या यह है कि, यदि कोई अन्य डेवलपर मेरे कस्टम व्यू का उपयोग करता है और उसके एक्सएमएल में क्लिक करने योग्य = "झूठा" डालता है, तो 'setClickable()' पर मेरा कॉल उसके प्रोग्रामिंग को कम करता है। (हो सकता है कि उपयोगकर्ता ने कुछ ऐसा करने के बाद इसे क्लिक करने योग्य बनाने की योजना बनाई हो, जैसे चेकबॉक्स चेक किया गया हो।) भले ही ** ** ** इसे क्लिक करने योग्य होने की उम्मीद है, अन्य शायद नहीं, इसलिए मैं कुछ डिफ़ॉल्ट प्रदान करना चाहता हूं इस तरह की आंतरिक कॉल का उपयोग किए बिना व्यवहार। अन्यथा मुझे दृश्य के लिए सभी विशेषताओं को पढ़ने का एक तरीका चाहिए, न कि केवल कस्टम जो मैंने attrs में परिभाषित किया है। – Karakuri

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