कस्टम व्यू कॉम्पोनेंट बनाना

लिखने का तरीका आज़माएं
Android के लिए, Jetpack Compose हमारा सुझाया गया यूज़र इंटरफ़ेस (यूआई) टूलकिट है. Compose में लेआउट इस्तेमाल करने का तरीका जानें.

Android एक ऐसा बेहतर और बेहतरीन कॉम्पोनेंट वाला मॉडल उपलब्ध कराता है जिसकी मदद से आपका यूज़र इंटरफ़ेस (यूआई) बनाया जा सकता है. बुनियादी लेआउट क्लास View और ViewGroup. इस प्लैटफ़ॉर्म में पहले से बनी कई तरह की View और ViewGroup सब-क्लास—जिन्हें विजेट कहा जाता है और लेआउट—जिन्हें आप अपना यूआई बनाने के लिए इस्तेमाल कर सकते हैं.

उपलब्ध विजेट की कुछ सूची में Button, TextView, EditText, ListView, CheckBox, RadioButton, Gallery, Spinner और ज़्यादा खास मकसद AutoCompleteTextView, ImageSwitcher, और TextSwitcher.

इनमें ये लेआउट उपलब्ध हैं LinearLayout, FrameLayout, RelativeLayout, और अन्य. ज़्यादा उदाहरणों के लिए, यह देखें सामान्य लेआउट.

अगर पहले से मौजूद कोई भी विजेट या लेआउट आपकी ज़रूरतों को पूरा नहीं करता है, तो अपने हिसाब से विजेट बनाएं View सब-क्लास. अगर आपको किसी मौजूदा विजेट में छोटे-मोटे बदलाव करने हैं या लेआउट के साथ, आप विजेट या लेआउट को सब-क्लास कर सकते हैं और इसकी मेथड को ओवरराइड कर सकते हैं.

अपनी View सब-क्लास बनाने से, लुक को बेहतर तरीके से कंट्रोल किया जा सकता है और स्क्रीन एलिमेंट का फ़ंक्शन. कस्टम व्यू की मदद से मिलने वाले कंट्रोल के बारे में जानने के लिए, यहां दिए गए हैं इस बारे में कुछ उदाहरण कि इनकी मदद से क्या किया जा सकता है:

  • आपके पास पूरी तरह से पसंद के मुताबिक रेंडर किया गया View टाइप बनाने का विकल्प होता है. उदाहरण के लिए, "वॉल्यूम नियंत्रण" नॉब को 2D ग्राफ़िक्स का इस्तेमाल करके रेंडर किया जाता है, जो एनालॉग इलेक्ट्रॉनिक कंट्रोल जैसा दिखता है.
  • आपके पास View कॉम्पोनेंट के ग्रुप को एक नए कॉम्पोनेंट में जोड़ने का विकल्प है. ऐसा करने से शायद कॉम्बो बॉक्स (पॉपअप सूची और फ़्री एंट्री टेक्स्ट फ़ील्ड का कॉम्बिनेशन) जैसा कुछ बनाने के लिए, ड्यूअल-पैन सिलेक्टर का कंट्रोल (बायां और दायां पैनल, जिसमें हर एक पैनल में सूची मौजूद होती है, जिसे आपको फिर से असाइन किया जा सकता है कौनसा आइटम किस सूची में है) वगैरह.
  • आपके पास, स्क्रीन पर EditText कॉम्पोनेंट को रेंडर करने का तरीका बदलने का विकल्प है. कॉन्टेंट बनाने Notepad का नमूना ऐप्लिकेशन, लाइन में नोटपैड वाला पेज बनाने के लिए इसका इस्तेमाल अच्छी तरह से करता है.
  • आपके पास अन्य इवेंट को कैप्चर करने का विकल्प होता है. जैसे, बटन दबाना और उन्हें अपनी पसंद के हिसाब से मैनेज करना, जैसे जैसे कि गेम में.

नीचे दिए सेक्शन में कस्टम व्यू बनाने और उन्हें अपने ऐप्लिकेशन में इस्तेमाल करने का तरीका बताया गया है. इसके लिए विस्तृत संदर्भ जानकारी, View क्लास.

बुनियादी तरीका

यहां इस बारे में खास जानकारी दी गई है कि View कैसे बनाएं घटक:

  1. अपनी क्लास के साथ, मौजूदा View क्लास या सब-क्लास को बढ़ाएं.
  2. सुपर क्लास के कुछ तरीकों को बदलें. ओवरराइड करने के लिए, सुपर क्लास के तरीके इनसे शुरू होते हैं on—उदाहरण के लिए, onDraw(), onMeasure(), और onKeyDown(). यह इसमें on इवेंट जैसा है Activity या ListActivity को आपने लाइफ़साइकल और अन्य फ़ंक्शन हुक के लिए ओवरराइड.
  3. अपनी नई एक्सटेंशन क्लास का इस्तेमाल करें. यह काम पूरा होने के बाद, इनकी जगह नई एक्सटेंशन क्लास का इस्तेमाल किया जा सकता है जिस व्यू पर यह आधारित था.

पूरी तरह से पसंद के मुताबिक बनाए गए कॉम्पोनेंट

आपके पास अपनी ज़रूरत के हिसाब से ग्राफ़िक कॉम्पोनेंट बनाने का विकल्प होता है. ये कॉम्पोनेंट आपके हिसाब से दिखते हैं चाहते हैं. शायद आप ऐसा ग्राफ़िकल वीयू मीटर चाहते हों जो किसी पुराने ऐनालॉग गेज की तरह दिखता हो, या साथ में गाने वाला टेक्स्ट व्यू हो इसमें कैरीओकी मशीन के साथ गाते हुए, बाउंस होती हुई बॉल आपके शब्दों के साथ-साथ आगे बढ़ रही है. आपको शायद ये काम करने चाहिए कुछ ऐसा जो बिल्ट-इन कॉम्पोनेंट नहीं कर सकते, इससे कोई फ़र्क़ नहीं पड़ता कि उन्हें कैसे जोड़ा जाता है.

अच्छी बात यह है कि आपके पास ऐसे कॉम्पोनेंट बनाने का विकल्प है जो आपकी पसंद के मुताबिक दिखते हैं और काम करते हैं. हालांकि, सिर्फ़ सीमित तौर पर विज्ञापन दिखाए जा सकते हैं आपकी कल्पना, स्क्रीन के साइज़, और उपलब्ध प्रोसेसिंग पावर के आधार पर, यह ध्यान रखें कि ऐप्लिकेशन को आपके डेस्कटॉप के मुकाबले किसी ऐसी चीज़ पर चलाना पड़ सकता है जो बहुत कम पावर पर काम करती हो वर्कस्टेशन है.

पूरी तरह से अपनी पसंद के मुताबिक कॉम्पोनेंट बनाने के लिए, इन बातों का ध्यान रखें:

  • आप सबसे सामान्य व्यू को View के तौर पर आगे बढ़ा सकते हैं. इसलिए, आम तौर पर वीडियो को बढ़ाकर अपना नया सुपर कॉम्पोनेंट बनाने के लिए इसे दबाएं.
  • आप एक कंस्ट्रक्टर उपलब्ध करा सकते हैं, जो एक्सएमएल से एट्रिब्यूट और पैरामीटर ले सकता है. साथ ही, आप वे आपके एट्रिब्यूट और पैरामीटर का इस्तेमाल करेंगे, जैसे कि VU मीटर का रंग और रेंज या सुई की चौड़ाई और नमी को कम करना.
  • आप शायद अपने इवेंट लिसनर, प्रॉपर्टी ऐक्सेसर, और मॉडिफ़ायर के साथ-साथ खुद भी बनाना चाहें और बेहतर तरीके से काम कर सके.
  • आप onMeasure() को बदलना चाहते हैं. ऐसा हो सकता है कि आपको ये काम करना पड़े अगर आपको कॉम्पोनेंट कुछ दिखाना है, तो onDraw() को बदलें. हालांकि, दोनों में डिफ़ॉल्ट ऐक्शन और डिफ़ॉल्ट के तौर पर सेट किया गया onDraw() कोई कार्रवाई नहीं करता. साथ ही, डिफ़ॉल्ट onMeasure() हमेशा 100x100 का साइज़ सेट करता है, जो शायद आप नहीं चाहते हों.
  • आपके पास ज़रूरत के हिसाब से, on के अन्य तरीकों को बदलने का विकल्प भी है.

onDraw() और onmeasure() को बढ़ाएं

onDraw() तरीका Canvas जिस पर ये काम किए जा सकते हैं जो चाहें उसे लागू करें: 2D ग्राफ़िक्स, अन्य स्टैंडर्ड या कस्टम कॉम्पोनेंट, स्टाइल वाला टेक्स्ट या इसके बारे में आपको ज़्यादा जानकारी चाहिए.

onMeasure() की भूमिका थोड़ी ज़्यादा है. onMeasure() बहुत ज़रूरी है . onMeasure() होना चाहिए इसमें शामिल पार्ट के मेज़रमेंट को असरदार और सटीक रिपोर्ट करने के लिए ओवरराइड किया गया है. यह है इन्हें पैरंट की दी गई सीमा से जुड़ी शर्तों की वजह से थोड़ा और जटिल बनाया जाता है. इन्हें onMeasure() तरीका इस्तेमाल किया जाएगा और मापी गई चौड़ाई और ऊंचाई के साथ setMeasuredDimension() तरीका कैलकुलेट किया गया है. अगर आप ओवरराइड किए गए onMeasure() तरीके से इस तरीके को कॉल नहीं करते हैं, तो यह के मामले में, मेज़रमेंट के समय एक अपवाद हो सकता है.

बड़े लेवल पर, onMeasure() लागू करना कुछ ऐसा दिखता है:

  • ओवरराइड किया गया onMeasure() तरीका, चौड़ाई और ऊंचाई के साथ कॉल किया जाता है विशेषताएं, जिन्हें चौड़ाई और ऊंचाई की सीमाओं की शर्तों के तौर पर माना जाता है और उसके बारे में ज़्यादा जानकारी देते हैं. widthMeasureSpec और heightMeasureSpec पैरामीटर, दोनों पूर्णांक कोड हैं जो डाइमेंशन को दिखाते हैं. इस तरह की पूरी जानकारी इन विशिष्टताओं की आवश्यकता के अनुसार प्रतिबंध View.onMeasure(int, int) अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस रेफ़रंस दस्तावेज़ में, मेज़रमेंट की पूरी प्रोसेस के बारे में जानकारी दी गई है.
  • आपके कॉम्पोनेंट का onMeasure() तरीका, चौड़ाई और ऊंचाई को मापता है. जो कॉम्पोनेंट को रेंडर करने के लिए ज़रूरी होते हैं. इसे पास किए गए विनिर्देशों के अंदर रहने का प्रयास करना चाहिए हालांकि, यह उनसे ज़्यादा हो सकता है. इस स्थिति में, माता-पिता तय कर सकते हैं कि उन्हें क्या करना है. इनमें ये भी शामिल हैं क्लिप बनाना, स्क्रोल करना, कोई अपवाद देना या onMeasure() से दोबारा कोशिश करने के लिए कहना, शायद इसमें अलग-अलग मेज़रमेंट स्पेसिफ़िकेशन हैं.
  • चौड़ाई और ऊंचाई की गणना होने पर, कैलकुलेटेड वैल्यू के साथ setMeasuredDimension(int width, int height) तरीका माप. ऐसा न करने पर, कॉन्टेंट को अपवाद माना जाएगा.

यहां फ़्रेमवर्क, व्यू के लिए इस्तेमाल किए जाने वाले अन्य स्टैंडर्ड तरीकों की खास जानकारी देता है:

कैटगरी माटिंग में इस्तेमाल हुए तरीके ब्यौरा
क्रिएशन कंस्ट्रक्टर यह कंस्ट्रक्टर का एक फ़ॉर्म होता है, जिसे कोड से व्यू बनाए जाने पर कॉल किया जाता है और एक फ़ॉर्म जिसे लेआउट फ़ाइल से व्यू इनफ़्लेट किए जाने पर कॉल किया जाता है. दूसरा फ़ॉर्म लेआउट फ़ाइल में तय किए गए एट्रिब्यूट को पार्स और लागू करता है.
onFinishInflate() एक व्यू के बाद कॉल किया जाता है और इसके सभी चाइल्ड एक्सएमएल से इनफ़्लेट हो जाते हैं.
लेआउट onMeasure(int, int) इस व्यू और सभी के लिए साइज़ की ज़रूरी शर्तें तय करने के लिए कॉल किया गया अपने बच्चों को सुरक्षित रखना है.
onLayout(boolean, int, int, int, int) यह तब कॉल किया जाता है, जब इस व्यू के लिए, अपने सभी बच्चों को साइज़ और पोज़िशन असाइन करना ज़रूरी है.
onSizeChanged(int, int, int, int) इस व्यू का साइज़ बदलने पर कॉल किया जाता है.
ड्रॉइंग onDraw(Canvas) यह तब कॉल किया जाता है, जब व्यू को अपना कॉन्टेंट रेंडर करना ज़रूरी होता है.
इवेंट प्रोसेस हो रहा है onKeyDown(int, KeyEvent) मुख्य डाउन इवेंट होने पर कॉल किया जाता है.
onKeyUp(int, KeyEvent) मुख्य इवेंट के होने पर कॉल किया जाता है.
onTrackballEvent(MotionEvent) यह तब कॉल किया जाता है, जब ट्रैकबॉल मोशन इवेंट होता है.
onTouchEvent(MotionEvent) टचस्क्रीन में किसी हलचल के होने पर कॉल किया जाता है.
फ़ोकस onFocusChanged(boolean, int, Rect) यह तब कॉल किया जाता है, जब व्यू का फ़ोकस बढ़ता है या टूट जाता है.
onWindowFocusChanged(boolean) यह तब कॉल किया जाता है, जब व्यू वाली विंडो का फ़ोकस बढ़ जाता है या हट जाता है.
अटैच किया जा रहा है onAttachedToWindow() यह तब कॉल किया जाता है, जब व्यू किसी विंडो से अटैच होता है.
onDetachedFromWindow() यह तब कॉल किया जाता है, जब व्यू को इसकी विंडो से अलग किया जाता है.
onWindowVisibilityChanged(int) यह तब कॉल किया जाता है, जब व्यू वाली विंडो की 'किसको दिखे' सेटिंग बदल जाती है.

कंपाउंड कंट्रोल

अगर आपको पूरी तरह से कस्टमाइज़ किया गया कॉम्पोनेंट नहीं बनाना है, बल्कि फिर से इस्तेमाल किया जा सकने वाला एक कॉम्पोनेंट, जिसमें मौजूदा कंट्रोल का ग्रुप शामिल है और फिर एक कंपाउंड बनाया जाता है कॉम्पोनेंट (या कंपाउंड कंट्रोल) सबसे अच्छा विकल्प हो सकता है. सारांश में, यह कई चीज़ें एक साथ दिखाता है ऐटॉमिक कंट्रोल या व्यू को लॉजिकल ग्रुप में बदल देता है, जिन्हें एक ही चीज़ माना जा सकता है. उदाहरण के लिए, कॉम्बो बॉक्स में किसी सिंगल लाइन EditText फ़ील्ड का कॉम्बिनेशन हो सकता है साथ ही, उसके बगल में एक बटन दिख रहा है. अगर उपयोगकर्ता बटन पर टैप करता है और इनमें से कोई विकल्प चुनता है सूची के तौर पर, इससे EditText फ़ील्ड में जानकारी अपने-आप भर जाती है, लेकिन ये लोग कुछ टाइप भी कर सकते हैं अगर वे चाहें, तो सीधे EditText में ईमेल कर सकते हैं.

Android में, दूसरे दो व्यू का इस्तेमाल किया जा सकता है: Spinner और AutoCompleteTextView. इसके बावजूद, कॉम्बो बॉक्स का यह कॉन्सेप्ट एक अच्छा उदाहरण है.

कंपाउंड कॉम्पोनेंट बनाने के लिए, यह तरीका अपनाएं:

  • Activity की तरह ही, डिक्लेरेटिव (एक्सएमएल पर आधारित) तरीके का इस्तेमाल करें का इस्तेमाल करके, शामिल कॉम्पोनेंट को बनाया जा सकता है या उन्हें अपने कोड से प्रोग्राम के हिसाब से नेस्ट किया जा सकता है. कॉन्टेंट बनाने आम तौर पर, शुरुआती पॉइंट कुछ तरह का Layout होता है. इसलिए, ऐसी क्लास बनाएं जो Layout. कॉम्बो बॉक्स के मामले में, आप LinearLayout का इस्तेमाल हॉरिज़ॉन्टल ओरिएंटेशन. अन्य लेआउट को नेस्ट किया जा सकता है, ताकि कंपाउंड कॉम्पोनेंट जटिल और व्यवस्थित.
  • नई क्लास के कंस्ट्रक्टर में, सुपर क्लास की उम्मीद के मुताबिक पैरामीटर लें और पास करें तो उन्हें सुपरक्लास कंस्ट्रक्टर से पहले दिखाएँ. इसके बाद, इस्तेमाल करने के लिए दूसरे व्यू सेट अप किए जा सकते हैं अपने नए कॉम्पोनेंट में शामिल करना होगा. यहां पर EditText फ़ील्ड बनाया जाता है और पॉप-अप सूची. आप एक्सएमएल में अपने एट्रिब्यूट और पैरामीटर जोड़ सकते हैं कंस्ट्रक्टर, पुल और इस्तेमाल कर सकता है.
  • इसके अलावा, उन इवेंट के लिए लिसनर बनाएं जिन्हें आपके शामिल व्यू जनरेट कर सकते हैं. इसका एक उदाहरण है: सूची आइटम के लिए लिसनर तरीका, अगर सूची चुनी जाती है, तो EditText.
  • इसके अलावा, ऐक्सेसर और मॉडिफ़ायर की मदद से अपनी प्रॉपर्टी बनाएं. उदाहरण के लिए, EditText वैल्यू को शुरुआत में कॉम्पोनेंट में सेट किया जाना चाहिए और इसके कॉन्टेंट के लिए क्वेरी तब की जानी चाहिए, जब की ज़रूरत नहीं है.
  • विकल्प के तौर पर, onDraw() और onMeasure() को बदलें. आम तौर पर, ऐसा करना तब ज़रूरी नहीं होता, जब Layout को बढ़ाया जा रहा है, क्योंकि लेआउट का डिफ़ॉल्ट तरीका है जो शायद ठीक से काम करेगा.
  • इसके अलावा, on के onKeyDown() जैसे अन्य तरीकों को बदलें. उदाहरण के लिए, सिर्फ़ कुछ तरीकों को चुनने के लिए किसी खास बटन पर टैप किए जाने पर, कॉम्बो बॉक्स की पॉप-अप सूची से डिफ़ॉल्ट वैल्यू.

कस्टम कंट्रोल के लिए आधार के तौर पर Layout का इस्तेमाल करने के कई फ़ायदे हैं. इसमें ये शामिल हैं:

  • आपके पास डिक्लेरेटिव एक्सएमएल फ़ाइलों का इस्तेमाल करके, लेआउट तय करने का विकल्प होता है. बिलकुल, ऐक्टिविटी स्क्रीन की तरह, इसके अलावा, प्रोग्राम के हिसाब से व्यू बनाए जा सकते हैं और उन्हें अपने कोड के लेआउट में नेस्ट किया जा सकता है.
  • onDraw() और onMeasure() के साथ-साथ, ज़्यादातर अन्य तरीके on तरीके सही होते हैं. इसलिए, आपको इन्हें बदलना नहीं पड़ता.
  • अपने हिसाब से कॉम्प्लेक्स व्यू बनाए जा सकते हैं और उनका इस तरह इस्तेमाल किया जा सकता है, जैसे कि वे एक कॉम्पोनेंट शामिल करना चाहिए.

मौजूदा व्यू टाइप में बदलाव करना

अगर कोई ऐसा कॉम्पोनेंट है जो आपकी पसंद से मिलता-जुलता है, तो उस कॉम्पोनेंट को बढ़ाया जा सकता है और उसे बदला जा सकता है को बदला जा सकता है. आप सभी चीज़ों को पूरी तरह से कस्टमाइज़ सुविधा के साथ कर सकते हैं कॉम्पोनेंट, लेकिन View हैरारकी में ज़्यादा खास क्लास से शुरू करके, कुछ ऐसा व्यवहार करते हैं जो आप मुफ़्त में चाहते हैं.

उदाहरण के लिए, नोटपैड सैंपल ऐप्लिकेशन, Android प्लैटफ़ॉर्म के इस्तेमाल के कई पहलुओं के बारे में बताता है. उनमें से एक है लाइन में नोटपैड बनाने के लिए EditText व्यू. यह सही उदाहरण नहीं है और इसके एपीआई बदलाव भी हो सकता है, लेकिन इससे सिद्धांतों को साबित किया जा सकता है.

अगर आपने पहले से ऐसा नहीं किया है, तो Notepad सैंपल को Android Studio में इंपोर्ट करें या स्रोत. खास तौर पर, LinedEditText की परिभाषा देखें में NoteEditor.java फ़ाइल से लिए जाते हैं.

इस फ़ाइल में ध्यान रखने वाली कुछ बातें यहां दी गई हैं:

  1. परिभाषा

    क्लास को इस लाइन से तय किया जाता है:
    public static class LinedEditText extends EditText

    LinedEditText को NoteEditor में अंदर की क्लास के तौर पर बताया गया है गतिविधि को निजी रखा जाता है, ताकि इसे NoteEditor.LinedEditText के तौर पर ऐक्सेस किया जा सके NoteEditor क्लास के बाहर से.

    LinedEditText, static है. इसका मतलब है कि यह तथाकथित ''सिंथेटिक तरीके'' जिसकी मदद से यह पैरंट क्लास का डेटा ऐक्सेस कर सकता है. इसका मतलब है कि NoteEditor से सशक्त रूप से संबंधित किसी चीज़ के बजाय एक अलग क्लास के रूप में काम करता है. अगर उन्हें इनर क्लास का ऐक्सेस नहीं चाहिए, तो यह बेहतर आउटर क्लास. यह जनरेट की गई क्लास को छोटा रखता है और इसे दूसरे क्लास.

    LinedEditText, EditText को बड़ा करता है. इस व्यू को पसंद के मुताबिक बनाया जा सकता है यह मामला. ऐसा करने के बाद, नई क्लास, सामान्य EditText की जगह ले सकती है व्यू.

  2. क्लास शुरू करना

    हमेशा की तरह, सुपर को सबसे पहले कॉल किया जाता है. यह डिफ़ॉल्ट कंस्ट्रक्टर नहीं है, लेकिन यह पैरामीटर वाला एक. EditText को इन पैरामीटर के साथ तब बनाया जाता है, जब यह एक्सएमएल लेआउट फ़ाइल से बढ़ा हुआ है. इसलिए, कंस्ट्रक्टर को उन्हें लेना होगा और उन्हें भी बना सकते हैं.

  3. बदले गए तरीके

    यह उदाहरण सिर्फ़ onDraw() तरीके को बदलता है, लेकिन आपको इसे बदलना पड़ सकता है अन्य का इस्तेमाल भी किया जा सकता है.

    इस सैंपल के लिए, onDraw() तरीके को बदलने से, नीचे दी गई नीली लाइनों को पेंट किया जा सकता है EditText व्यू कैनवस. कैनवस को ओवरराइड किए गए में पास किया जाता है onDraw() तरीका. super.onDraw() तरीके को विधि खत्म होती है. सुपरक्लास मेथड को शुरू करना ज़रूरी है. इस मामले में, इसे इसके बाद अंत में शुरू करें उन लाइनों को पेंट कर दें जिन्हें आपको शामिल करना है.

  4. कस्टम कॉम्पोनेंट

    अब आपके पास कस्टम कॉम्पोनेंट है, लेकिन इसका इस्तेमाल कैसे किया जा सकता है? Notepad उदाहरण में, कस्टम कॉम्पोनेंट का इस्तेमाल सीधे तौर पर डिक्लेरेटिव लेआउट से किया जाता है. इसलिए, note_editor.xml res/layout फ़ोल्डर:

    <view xmlns:android="http://schemas.android.com/apk/res/android"
        class="com.example.android.notepad.NoteEditor$LinedEditText"
        android:id="@+id/note"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:padding="5dp"
        android:scrollbars="vertical"
        android:fadingEdge="vertical"
        android:gravity="top"
        android:textSize="22sp"
        android:capitalize="sentences"
    />
    

    कस्टम कॉम्पोनेंट को एक्सएमएल में सामान्य व्यू के तौर पर बनाया जाता है और क्लास की जानकारी दी जाती है वह पूरी पैकेज का इस्तेमाल कर रहा है. आपकी ओर से तय की गई अंदरूनी क्लास का संदर्भ NoteEditor$LinedEditText नोटेशन, जो इनर रेफ़रंस को बताने का एक स्टैंडर्ड तरीका है की क्लास में शामिल होती हैं.

    अगर आपका कस्टम व्यू कॉम्पोनेंट इनर क्लास के रूप में तय नहीं किया गया है, तो आपके पास व्यू का एलान करने का विकल्प है एक्सएमएल एलिमेंट के नाम वाले कॉम्पोनेंट को शामिल करें और class एट्रिब्यूट को शामिल न करें. इसके लिए उदाहरण:

    <com.example.android.notepad.LinedEditText
      id="@+id/note"
      ... />
    

    ध्यान दें कि LinedEditText क्लास अब एक अलग क्लास फ़ाइल है. जब क्लास को NoteEditor क्लास में नेस्ट किया जाता है, तो यह तकनीक काम नहीं करती.

    परिभाषा के अन्य एट्रिब्यूट और पैरामीटर वे होते हैं जो कस्टम कॉम्पोनेंट कंस्ट्रक्टर पास किया है और फिर EditText कंस्ट्रक्टर से पास किया है, इसलिए ये वही पैरामीटर होते हैं जिनका इस्तेमाल आप EditText व्यू के लिए करते हैं. प्रॉपर्टी को जोड़ा जा सकता है पैरामीटर में भी बदलाव कर सकते हैं.

कस्टम कॉम्पोनेंट बनाना उतना ही मुश्किल है जितना आपको इसकी ज़रूरत है.

एक ज़्यादा जटिल कॉम्पोनेंट, ज़्यादा on तरीकों को ओवरराइड कर सकता है और हेल्पर तरीकों के बारे में बताएं. साथ ही, इसके गुणों और व्यवहार को बेहतर तरीके से कस्टमाइज़ करें. आपकी और वह कॉम्पोनेंट आपको क्या करना चाहिए.