यह सवाल कई जगहों पर बहुत अलग तरीकों से पूछा जाता है। मैंने मूल रूप से इसका उत्तर यहां दिया था, लेकिन मुझे लगता है कि यह इस धागे में भी प्रासंगिक है (जब से मैं एक उत्तर के लिए खोज कर रहा था तब से यहां समाप्त हो गया )।
इस समस्या का कोई एक समाधान नहीं है, लेकिन इसने मेरे उपयोग के मामले में काम किया। समस्या यह है, 'व्यू (संदर्भ, अटार्स, डिफॉल्टल)' कंस्ट्रक्टर वास्तविक शैली को संदर्भित नहीं करता है, यह एक विशेषता चाहता है। तो, हम करेंगे:
- एक विशेषता को परिभाषित करें
- एक शैली बनाएं जिसका आप उपयोग करना चाहते हैं
- हमारे विषय पर उस विशेषता के लिए एक शैली लागू करें
- उस विशेषता के साथ हमारे विचार के नए उदाहरण बनाएँ
'Res / मान / attrs.xml' में, एक नई विशेषता को परिभाषित करें:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
Res / मान / स्टाइल में। xml 'मैं अपने कस्टम टेक्स्ट व्यू पर जिस शैली का उपयोग करना चाहता हूं, उसे बनाने जा रहा हूं
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
'रेस / वैल्यू / थीम.एक्सएमएल' या 'रेस / वैल्यू / स्टाइल.एक्सएमएल' में, अपने एप्लिकेशन / गतिविधि के लिए थीम को संशोधित करें और निम्नलिखित स्टाइल जोड़ें:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
अंत में, अपने कस्टम टेक्स्ट व्यू में, अब आप कंस्ट्रक्टर को विशेषता के साथ उपयोग कर सकते हैं और यह आपकी शैली को प्राप्त करेगा
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
यह ध्यान देने योग्य है कि मैंने बार-बार अलग-अलग वेरिएंट और अलग-अलग जगहों पर customTextView का उपयोग किया है, लेकिन यह किसी भी तरह से आवश्यक नहीं है कि दृश्य का नाम शैली या विशेषता या किसी भी चीज़ से मेल खाता हो। इसके अलावा, इस तकनीक को किसी भी कस्टम दृश्य के साथ काम करना चाहिए, न कि केवल TextViews।