अच्छी तरह से डिज़ाइन किया गया कस्टम व्यू, किसी भी अन्य अच्छी तरह से डिज़ाइन की गई क्लास की तरह ही होता है. यह एक का तय सेट के साथ-साथ एक आसान इंटरफ़ेस के साथ काम करती है, सीपीयू और मेमोरी का बेहतर ढंग से इस्तेमाल करती है वगैरह. तय सीमा में इसके अलावा, क्लास अच्छी तरह से डिज़ाइन की गई है, तो कस्टम व्यू को ये काम करने होंगे:
- Android के मानकों के मुताबिक हों.
- अपनी पसंद के मुताबिक स्टाइल किए जा सकने वाले एट्रिब्यूट उपलब्ध कराएं, जो Android एक्सएमएल लेआउट के साथ काम करते हों.
- सुलभता से जुड़े इवेंट भेजें.
- एक से ज़्यादा Android प्लैटफ़ॉर्म के साथ काम करना.
Android फ़्रेमवर्क, बेस क्लास और एक्सएमएल टैग का एक सेट उपलब्ध कराता है, ताकि आप ऐसा व्यू बना सकें जो इन सभी से मेल खाता है ज़रूरतें. इस लेसन में बताया गया है कि अपनी वेबसाइट के लिए, Android फ़्रेमवर्क का इस्तेमाल व्यू की सुविधा क्लास.
ज़्यादा जानकारी के लिए, कस्टम व्यू कॉम्पोनेंट में मौजूद जानकारी.
किसी व्यू को सब-क्लास बनाना
Android फ़्रेमवर्क में बताई गई सभी व्यू क्लास बड़ी हैं
View
. आपका
कस्टम व्यू से भी
View
को सीधे विस्तृत करें या आप यह कर सकते हैं
समय बचाने के लिए,
मौजूदा व्यू
सब-क्लास, जैसे कि Button
.
Android Studio को अपने व्यू से इंटरैक्ट करने की अनुमति देने के लिए, कम से कम आपको एक ऐसा कंस्ट्रक्टर उपलब्ध कराना होगा जो
Context
और AttributeSet
ऑब्जेक्ट, पैरामीटर के तौर पर.
यह कंस्ट्रक्टर, लेआउट एडिटर को आपके व्यू का इंस्टेंस बनाने और उसमें बदलाव करने की अनुमति देता है.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
कस्टम एट्रिब्यूट तय करना
अपने यूज़र इंटरफ़ेस में बिल्ट-इन View
जोड़ने के लिए, एक्सएमएल एलिमेंट में इसकी जानकारी दें और
इसे कंट्रोल करो
दिखने और काम करने का तरीका एलिमेंट एट्रिब्यूट का इस्तेमाल करें. आपके पास कस्टम ऐसेट जोड़ने और स्टाइल देने का विकल्प है
एक्सएमएल का इस्तेमाल करके व्यू बढ़ाना चाहते हैं. यहां की यात्रा पर हूं
तो अपने कस्टम व्यू में इस व्यवहार को चालू करने के लिए, ये काम करें:
<declare-styleable>
रिसॉर्स एलिमेंट में, अपने व्यू के लिए कस्टम एट्रिब्यूट तय करें.- अपने एक्सएमएल लेआउट में एट्रिब्यूट के लिए वैल्यू सेट करें.
- रनटाइम के दौरान विशेषता मान वापस पाएं.
- अपने व्यू में, वापस लाई गई एट्रिब्यूट की वैल्यू लागू करें.
इस सेक्शन में कस्टम एट्रिब्यूट तय करने और उनकी वैल्यू तय करने के तरीके के बारे में बताया गया है. अगले सेक्शन में शामिल है रनटाइम पर वैल्यू को वापस पाने और लागू करने से.
कस्टम एट्रिब्यूट तय करने के लिए, अपने प्रोजेक्ट में <declare-styleable>
संसाधन जोड़ें. इन संसाधनों को पूरी तरह से
res/values/attrs.xml
फ़ाइल. यह रहा
attrs.xml
फ़ाइल का उदाहरण:
<resources> <declare-styleable name="PieChart"> <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
यह कोड दो कस्टम एट्रिब्यूट, showText
और labelPosition
का एलान करता है,
जो अलग-अलग स्टाइल से जुड़ी होती हैं.
इकाई का नाम PieChart
है. शैली के हिसाब से इकाई का नाम एक जैसा है
नाम
क्लास का नाम
जो कस्टम व्यू के बारे में बताता है. हालांकि, इस कन्वेंशन का पालन करना ज़रूरी नहीं है, लेकिन
कई लोकप्रिय कोड
एडिटर, स्टेटमेंट को पूरा करने के लिए नाम रखने के इस तरीके पर निर्भर रहते हैं.
एक बार कस्टम एट्रिब्यूट तय कर देने के बाद, उनका इस्तेमाल लेआउट एक्सएमएल फ़ाइलों में ठीक वैसे ही किया जा सकता है जैसे पहले से मौजूद था
एट्रिब्यूट. सिर्फ़
अंतर यह है कि आपके कस्टम एट्रिब्यूट किसी दूसरे नेमस्पेस से जुड़े हैं. अपनेपन के बजाय
http://schemas.android.com/apk/res/android
नेमस्पेस से जुड़े हुए हैं, तो वे http://schemas.android.com/apk/res/[your package name]
से जुड़े हैं. उदाहरण के लिए, यहां बताया गया है कि
इसके लिए तय किए गए एट्रिब्यूट
PieChart
:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"> <com.example.customviews.charting.PieChart custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
लंबे नेमस्पेस यूआरआई को दोहराने से बचने के लिए, सैंपल किसी
xmlns
डायरेक्टिव. यह डायरेक्टिव, custom
उपनाम को इन्हें असाइन करता है
नाम स्थान http://schemas.android.com/apk/res/com.example.customviews
.
अपने नेमस्पेस के लिए कोई भी उपनाम चुना जा सकता है.
उस एक्सएमएल टैग का नाम देखें जो लेआउट में कस्टम व्यू जोड़ता है. यह पूरी तरह से
उस कंपनी का नाम
कस्टम व्यू क्लास. अगर आपके व्यू की क्लास इनर क्लास है, तो उसे और क्वालिफ़ाई करें
व्यू की आउटर क्लास का नाम डालें.
उदाहरण के लिए,
PieChart
क्लास की PieView
नाम की एक इनर क्लास है. टूल का इस्तेमाल करने के लिए
इस श्रेणी की कस्टम विशेषताएं, आपको
com.example.customviews.charting.PieChart$PieView
टैग का इस्तेमाल करें.
कस्टम एट्रिब्यूट लागू करना
जब किसी एक्सएमएल लेआउट से कोई व्यू बनाया जाता है, तो एक्सएमएल टैग के सभी एट्रिब्यूट को पढ़ लिया जाता है
संसाधन से
बंडल बनाया और व्यू के कंस्ट्रक्टर में
AttributeSet
.
हालांकि, यह
सीधे AttributeSet
से वैल्यू को पढ़ा जा सकता है. ऐसा करने से
इसके कुछ नुकसान हैं:
- एट्रिब्यूट की वैल्यू में मौजूद संसाधन के रेफ़रंस ठीक नहीं किए गए हैं.
- शैलियां लागू नहीं की जाती हैं.
इसके बजाय, AttributeSet
को
obtainStyledAttributes()
.
इस तरीके से
TypedArray
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
का कलेक्शन
वे वैल्यू जो
संदर्भ के साथ-साथ उनकी पहचान कर चुके हैं.
Android रिसॉर्स कंपाइलर की मदद से, कई तरह से कॉल किए जा सकते हैं
obtainStyledAttributes()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
और भी आसान हो गया है. हर <declare-styleable>
के लिए
res/
डायरेक्ट्री में मौजूद संसाधन है, तो जनरेट किया गया R.java
एट्रिब्यूट की कैटगरी, दोनों के बारे में बताता है
आईडी और
वे कॉन्सटेंट जो कैटगरी में मौजूद हर एट्रिब्यूट के लिए इंडेक्स तय करते हैं. आप पहले से तय
पढ़ने के लिए स्थिरांक
TypedArray
से एट्रिब्यूट. इसका तरीका यहां बताया गया है
PieChart
क्लास
इसकी विशेषताएं पढ़ता है:
Kotlin
init { context.theme.obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0).apply { try { mShowText = getBoolean(R.styleable.PieChart_showText, false) textPos = getInteger(R.styleable.PieChart_labelPosition, 0) } finally { recycle() } } }
Java
public PieChart(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0); try { mShowText = a.getBoolean(R.styleable.PieChart_showText, false); textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0); } finally { a.recycle(); } }
ध्यान दें कि TypedArray
ऑब्जेक्ट
एक शेयर संसाधन हैं
और उसे इस्तेमाल के बाद रीसाइकल किया जाना चाहिए.
प्रॉपर्टी और इवेंट जोड़ें
एट्रिब्यूट का इस्तेमाल करके, व्यू के व्यवहार और लुक को कंट्रोल किया जा सकता है. हालांकि,
उन्हें सिर्फ़ पढ़ा जा सकता है
जब व्यू शुरू होता है. डाइनैमिक बिहेवियर उपलब्ध कराने के लिए, प्रॉपर्टी गैटर दिखाएं और
हर एक के लिए सेटर की जोड़ी
कस्टम एट्रिब्यूट. नीचे दिया गया स्निपेट यह दिखाता है कि PieChart
किसी प्रॉपर्टी को कैसे दिखाता है
इस नंबर showText
को कॉल किया गया:
Kotlin
fun isShowText(): Boolean { return mShowText } fun setShowText(showText: Boolean) { mShowText = showText invalidate() requestLayout() }
Java
public boolean isShowText() { return mShowText; } public void setShowText(boolean showText) { mShowText = showText; invalidate(); requestLayout(); }
ध्यान दें कि setShowText
, invalidate()
को कॉल करता है
और requestLayout()
. ये कॉल ज़रूरी हैं
ताकि यह पक्का किया जा सके कि व्यू भरोसेमंद तरीके से काम करे. आपको इनकी ज़रूरत होगी
की प्रॉपर्टी में किसी भी बदलाव के बाद व्यू को अमान्य किया जा सकता है.
ताकि
सिस्टम जानता है कि इसे फिर से बनाने की ज़रूरत है. इसी तरह, अगर आपको नए लेआउट का अनुरोध करना है, तो
प्रॉपर्टी में दूसरे तरीके से
जो व्यू के साइज़ या आकार पर असर डाल सकती हैं. इन तरीकों से किए गए कॉल को भूलने की वजह से
ढूंढना मुश्किल
गड़बड़ियां.
कस्टम व्यू में, इवेंट लिसनर भी शामिल होने चाहिए, ताकि ज़रूरी इवेंट के बारे में लोगों को बताया जा सके. इसके लिए
इंस्टेंस, PieChart
सुनने वालों को यह सूचना देने के लिए OnCurrentItemChanged
नाम के एक कस्टम इवेंट दिखाता है
उपयोगकर्ता ने उसे घुमाया
पाई चार्ट की नई स्लाइस पर फ़ोकस करें.
प्रॉपर्टी और इवेंट को दिखाना भूलना आसान है, खास तौर पर जब आप अकेले उपयोगकर्ता हों कस्टम व्यू का इस्तेमाल कर सकते हैं. अपने व्यू के इंटरफ़ेस को ध्यान से तय करने में समय लगता है. इससे, आने वाले समय के रखरखाव में कमी आती है लागत. पालन करने का एक अच्छा नियम यह है कि ऐसी प्रॉपर्टी को हमेशा बिना अनुमति के सार्वजनिक किया जाए जिसका असर उसके दिखने या काम करने का तरीका आपका कस्टम व्यू.
सुलभता के लिए डिज़ाइन
पसंद के मुताबिक बनाए गए व्यू में, ज़्यादा से ज़्यादा उपयोगकर्ताओं को शामिल किया जाना चाहिए. इसमें ये लोग शामिल हैं दिव्यांगता उन्हें टचस्क्रीन देखने या उनका इस्तेमाल करने से रोक सकता है. दिव्यांग उपयोगकर्ताओं की मदद करने के लिए, ये काम करें:
android:contentDescription
का इस्तेमाल करके, अपने इनपुट फ़ील्ड को लेबल करें एट्रिब्यूट की वैल्यू सबमिट करें.sendAccessibilityEvent()
पर कॉल करके सुलभता इवेंट भेजें ज़रूरत पड़ने पर.- डी-पैड या ट्रैकबॉल जैसे वैकल्पिक नियंत्रकों के साथ काम किया जा सकता है.
ऐक्सेस किए जा सकने वाले व्यू बनाने के बारे में ज़्यादा जानकारी के लिए, यह देखें ऐप्लिकेशन को ज़्यादा सुलभ बनाएं.