एक आसान विजेट बनाएं

Compose को आज़माएं
Android के लिए, Jetpack Compose को यूज़र इंटरफ़ेस (यूआई) टूलकिट के तौर पर इस्तेमाल करने का सुझाव दिया जाता है. Compose-style API का इस्तेमाल करके विजेट बनाने का तरीका जानें.

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

म्यूज़िक विजेट का उदाहरण
पहली इमेज. संगीत विजेट का उदाहरण.

इस दस्तावेज़ में, विजेट उपलब्ध कराने वाली कंपनी का इस्तेमाल करके विजेट पब्लिश करने का तरीका बताया गया है. ऐप्लिकेशन विजेट होस्ट करने के लिए, अपना AppWidgetHost बनाने के बारे में ज़्यादा जानने के लिए, विजेट होस्ट बनाना लेख पढ़ें.

विजेट डिज़ाइन करने के तरीके के बारे में जानने के लिए, ऐप्लिकेशन के विजेट की खास जानकारी देखें.

विजेट कॉम्पोनेंट

विजेट बनाने के लिए, आपको इन बुनियादी कॉम्पोनेंट की ज़रूरत होगी:

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

दूसरी इमेज में दिखाया गया है कि ये कॉम्पोनेंट, ऐप्लिकेशन विजेट की प्रोसेसिंग के पूरे फ़्लो में कैसे काम करते हैं.

ऐप्लिकेशन विजेट के डेटा को प्रोसेस करने का फ़्लो
दूसरी इमेज. ऐप्लिकेशन विजेट के डेटा को प्रोसेस करने का फ़्लो.
चुनें.

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

हम यहां दिए गए सुधारों को भी लागू करने का सुझाव देते हैं: विजेट के लेआउट में बदलाव करने की सुविधा, अन्य सुधार, ऐडवांस विजेट, कलेक्शन विजेट, और विजेट होस्ट बनाना.

AppWidgetProviderInfo एक्सएमएल का एलान करना

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

मेटाडेटा की एक्सएमएल फ़ाइल को तय करने और कॉन्फ़िगर करने का तरीका जानने के लिए, Glance के दस्तावेज़ में Compose-first AppWidgetProviderInfo एक्सएमएल सेक्शन के बारे में जानकारी देखें.

विजेट ब्रॉडकास्ट मैनेज करने के लिए, AppWidgetProvider क्लास का इस्तेमाल करना

प्लैटफ़ॉर्म के ब्रॉडकास्ट रिसीवर मेकेनिज़्म, मेनिफ़ेस्ट डिक्लेरेशन फ़िल्टर, और लाइफ़साइकल इवेंट लूप, प्लैटफ़ॉर्म के तहत एक साथ काम करते हैं. Compose-first डेवलपमेंट में, इन ब्रॉडकास्ट को GlanceAppWidgetReceiver रैपर का इस्तेमाल करके व्यवस्थित किया जाता है.

अपने रिसीवर को मेनिफ़ेस्ट में रजिस्टर करने और Hilt के साथ काम करने वाले लाइफ़साइकल ओवरराइड लागू करने का तरीका जानने के लिए, Glance के दस्तावेज़ में Compose-first ब्रॉडकास्ट मैनेज करने के लिए AppWidgetProvider क्लास का इस्तेमाल करें सेक्शन देखें.

विजेट का लेआउट बनाना

आपको एक्सएमएल में अपने विजेट के लिए शुरुआती लेआउट तय करना होगा. साथ ही, इसे प्रोजेक्ट की res/layout/ डायरेक्ट्री में सेव करना होगा. ज़्यादा जानकारी के लिए, डिज़ाइन से जुड़े दिशा-निर्देश देखें.

अगर आपको लेआउट के बारे में जानकारी है, तो विजेट का लेआउट बनाना आसान है. हालांकि, ध्यान रखें कि विजेट लेआउट, RemoteViews पर आधारित होते हैं. इसलिए, यह हर तरह के लेआउट या व्यू विजेट के साथ काम नहीं करता. RemoteViews के साथ काम करने वाले व्यू के कस्टम व्यू या सबक्लास का इस्तेमाल नहीं किया जा सकता.

RemoteViews, ViewStub को भी सपोर्ट करता है. यह एक अदृश्य और ज़ीरो साइज़ का View होता है. इसका इस्तेमाल, रनटाइम के दौरान लेआउट रिसॉर्स को लेज़ी तरीके से बढ़ाने के लिए किया जा सकता है.

स्टेटफ़ुल व्यवहार के लिए सहायता

Android 12 में, इन मौजूदा कॉम्पोनेंट का इस्तेमाल करके स्टेटफ़ुल व्यवहार के लिए सहायता जोड़ी गई है:

विजेट अब भी स्टेटलेस है. आपके ऐप्लिकेशन को स्थिति सेव करनी चाहिए और स्थिति में बदलाव होने पर सूचना पाने के लिए रजिस्टर करना चाहिए.

स्टेटफ़ुल व्यवहार दिखाने वाले शॉपिंग लिस्ट विजेट का उदाहरण
तीसरी इमेज. स्टेटफ़ुल व्यवहार का उदाहरण.

यहां दिए गए कोड के उदाहरण में, इन कॉम्पोनेंट को लागू करने का तरीका बताया गया है.

Kotlin

// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true)

// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2)

// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
        R.id.my_checkbox,
        RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent)
)

Java

// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true);

// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2);

// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
    R.id.my_checkbox,
    RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent));

दो लेआउट उपलब्ध कराएं: एक लेआउट, res/layout-v31 फ़ोल्डर में Android 12 या इसके बाद के वर्शन वाले डिवाइसों को टारगेट करता हो. दूसरा लेआउट, डिफ़ॉल्ट res/layout फ़ोल्डर में Android 11 या इससे पहले के वर्शन वाले डिवाइसों को टारगेट करता हो.

गोल कोने लागू करना

आउटर बैकग्राउंड और इनर प्रोपोर्शनल रेडियस का हिसाब लगाने का तरीका स्टैंडर्ड है और इसे शेयर किया जाता है. Compose-first डेवलपमेंट में, इसे Kotlin में डाइनैमिक तौर पर सेट किया जा सकता है. साथ ही, कस्टम थीम के संसाधनों का इस्तेमाल किया जा सकता है.

Android के पुराने डिवाइसों के लिए, कॉर्नर रेडियस लागू करने या डाइनैमिक स्टाइल सेट अप करने के लिए, Glance के दस्तावेज़ में Compose-first गोल कोनों को लागू करना सेक्शन देखें.