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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

RemoteViews, ViewStub के साथ भी काम करता है. यह एक ऐसा View है जो दिखता नहीं है और जिसका साइज़ शून्य होता है. इसका इस्तेमाल, रनटाइम के दौरान लेआउट रिसॉर्स को लेज़ीली इन्फ़्लेट करने के लिए किया जा सकता है.

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

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

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

स्टेटफ़ुल व्यवहार दिखाने वाले खरीदारी की सूची के विजेट का उदाहरण
तीसरी इमेज. स्टेटफ़ुल व्यवहार का उदाहरण.

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

// 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-फ़र्स्ट डेवलपमेंट में, इसे Kotlin में डाइनैमिक तौर पर सेट किया जा सकता है. इसके लिए, कस्टम थीम के संसाधनों का इस्तेमाल किया जा सकता है.

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