मैंने निम्नलिखित के रूप में एक छोटी सी विशेषता और शैली को परिभाषित किया है:

    <declare-styleable name="MyStyleable">
        <attr name="extraColor" format="color" />
    </declare-styleable>

    <style name="SpecialStyle">
        <item name="android:maxLines">1</item>
        <item name="android:windowBackground">?attr/extraColor</item>
    </style>

और कोड में मैं अपनी शैली को थीम पर लागू करने के लिए applyStyle() का उपयोग करता हूं:

context.getTheme().applyStyle(R.style.SpecialStyle, true);

चूँकि मैंने अपनी शैली में ?attr/extraColor का उपयोग किया है, यदि कोई व्यक्ति extraColor को मूल विषयवस्तु में परिभाषित करता है, तो वह मान स्वतः ही SpecialStyle लागू करने में उपयोग किया जाएगा और जब कोई परिभाषित नहीं करेगा extraColor, null का उपयोग SpecialStyle को लागू करने के लिए मूल्य के रूप में किया जाएगा। मुझे आश्चर्य है कि extraColor के लिए डिफ़ॉल्ट मान को परिभाषित करने का कोई तरीका है, जब इसे परिभाषित नहीं किया जाता है, बजाय null का उपयोग करने के।

कोई विचार?

1
Afshin 17 नवम्बर 2020, 18:26

1 उत्तर

सबसे बढ़िया उत्तर

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

पहले हम एक शैली को डिफ़ॉल्ट मानों के साथ परिभाषित करते हैं:

    <style name="SpecialStyleDefault">
        <item name="extraColor">@color/mycolor</item>
    </style>

तो हम इस तरह एक कोड का उपयोग करते हैं:

context.getTheme().applyStyle(R.style.SpecialStyleDefault, false);
context.getTheme().applyStyle(R.style.SpecialStyle, true);

इस प्रकार, यदि extraColor परिभाषित नहीं है, तो इसे पहले लागू किया जाएगा। फिर हम अपनी विशेष शैली को लागू करते हैं जो अब परिभाषित नहीं होने पर डिफ़ॉल्ट शैली का उपयोग करेगी, या उपयोगकर्ता परिभाषित extraColor यदि यह पहले से ही शैली में उपलब्ध है।

0
Afshin 23 नवम्बर 2020, 17:34