इस पेज पर, Android 12 (एपीआई लेवल 31) से उपलब्ध, विजेट को बेहतर बनाने के लिए दिए गए विकल्पों के बारे में जानकारी दी गई है. ये सुविधाएं ज़रूरी नहीं हैं. हालांकि, इन्हें लागू करना आसान है. साथ ही, इनसे लोगों को विजेट का बेहतर अनुभव मिलता है.
विजेट को बेहतर बनाने के अन्य तरीके जानने के लिए, Compose की गाइड अपने विजेट को बेहतर बनाना लेख पढ़ें.
डाइनैमिक रंगों का इस्तेमाल करना
Android 12 से, कोई विजेट बटन, बैकग्राउंड, और अन्य कॉम्पोनेंट के लिए डिवाइस की थीम के रंगों का इस्तेमाल कर सकता है. इससे अलग-अलग विजेट के बीच, ट्रांज़िशन बेहतर होते हैं और एक जैसा अनुभव मिलता है.
डाइनैमिक रंग पाने के दो तरीके हैं:
रूट लेआउट में, सिस्टम की डिफ़ॉल्ट थीम (
@android:style/Theme.DeviceDefault.DayNight) का इस्तेमाल करें.Android लाइब्रेरी के लिए मटीरियल कॉम्पोनेंट से, मटीरियल 3 थीम (
Theme.Material3.DynamicColors.DayNight) का इस्तेमाल करें. यह सुविधा, Android v1.6.0 के लिए मटीरियल कॉम्पोनेंट से उपलब्ध है.
रूट लेआउट में थीम सेट करने के बाद, डाइनैमिक रंग चुनने के लिए, रूट या उसके किसी भी चाइल्ड में, सामान्य रंग एट्रिब्यूट का इस्तेमाल किया जा सकता है.
यहां कुछ रंग एट्रिब्यूट दिए गए हैं जिनका इस्तेमाल किया जा सकता है:
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
यहां मटीरियल 3 थीम का इस्तेमाल करके एक उदाहरण दिया गया है. इसमें डिवाइस की थीम का रंग "बैंगनी" है. जैसा कि पहली और दूसरी इमेज में दिखाया गया है, ऐक्सेंट का रंग और विजेट का बैकग्राउंड, हल्के और गहरे रंग वाले मोड के हिसाब से सेट हो जाते हैं.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimaryContainer"
android:theme="@style/Theme.Material3.DynamicColors.DayNight">
<ImageView
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />
<!-- Other widget content. -->
</LinearLayout>
डाइनैमिक रंगों के लिए, पुराने वर्शन के साथ काम करने की सुविधा
डाइनैमिक रंगों की सुविधा, सिर्फ़ Android 12 या इसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है. पुराने वर्शन के लिए, पसंद के मुताबिक थीम बनाने के लिए, डिफ़ॉल्ट थीम एट्रिब्यूट का इस्तेमाल करके, अपनी पसंद के रंगों वाली डिफ़ॉल्ट थीम और नया क्वालिफ़ायर (values-v31) बनाएं.
यहां मटीरियल 3 थीम का इस्तेमाल करके एक उदाहरण दिया गया है:
/values/styles.xml
<resources>
<style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight">
<!-- Override default colorBackground attribute with custom color. -->
<item name="android:colorBackground">@color/my_background_color</item>
<!-- Add other colors/attributes. -->
</style>
</resources>
/values-v31/styles.xml
<resources>
<!-- Do not override any color attribute. -->
<style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" />
</resources>
/layout/my_widget_layout.xml
<resources>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="?android:attr/colorBackground"
android:theme="@style/MyWidgetTheme" />
</resources>
आवाज़ से कंट्रोल करने की सुविधा चालू करना
ऐप्लिकेशन की कार्रवाइयों की मदद से, Google Assistant लोगों के काम के वॉइस कमांड के जवाब में विजेट दिखा सकती है. बिल्ट-इन इंटेंट (बीआईआई) के जवाब में काम करने के लिए, अपने विजेट को कॉन्फ़िगर करके, आपका ऐप्लिकेशन, Assistant के इंटरफ़ेस पर विजेट दिखा सकता है. जैसे, Android और Android Auto. लोगों के पास, Assistant की ओर से दिखाए गए विजेट को अपने लॉन्चर पर पिन करने का विकल्प होता है. इससे, लोग बाद में भी उन विजेट का इस्तेमाल कर सकते हैं.
उदाहरण के लिए, आपके पास अपने एक्सरसाइज़ ऐप्लिकेशन के लिए, वर्कआउट की खास जानकारी दिखाने वाले विजेट को कॉन्फ़िगर करने का विकल्प होता है.
ऐसा करने पर, यह विजेट,
GET_EXERCISE_OBSERVATION
बीआईआई को ट्रिगर करने वाले वॉइस कमांड के जवाब में काम करेगा. जब लोग इस बीआईआई को ट्रिगर करते हैं, तो Assistant, आपके विजेट को अपने-आप दिखाती है.
उदाहरण के लिए, "Hey Google, मैंने
ExampleApp पर इस हफ़्ते कितने किलोमीटर दौड़ लगाई?" जैसे अनुरोध करने पर, Assistant आपके विजेट को अपने-आप दिखाती है.
कई बीआईआई उपलब्ध हैं. इनमें लोगों के साथ इंटरैक्ट करने की कई कैटगरी शामिल हैं. इससे, Android के लगभग सभी ऐप्लिकेशन, आवाज़ से कंट्रोल करने के लिए अपने विजेट को बेहतर बना सकते हैं. शुरू करने के लिए, देखें Android विजेट के साथ ऐप्लिकेशन की कार्रवाइयों को इंटिग्रेट करना.
बेहतर ट्रांज़िशन की सुविधा चालू करना
Android 12 से, लॉन्चर, लोगों के किसी विजेट से आपका ऐप्लिकेशन लॉन्च करने पर, बेहतर ट्रांज़िशन की सुविधा देते हैं.
बेहतर ट्रांज़िशन की सुविधा चालू करने के लिए, अपने बैकग्राउंड एलिमेंट की पहचान करने के लिए, @android:id/background या android.R.id.background का इस्तेमाल करें:
// Top-level layout of the widget.
<LinearLayout
android:id="@android:id/background">
</LinearLayout>
PendingIntent से शुरू किया गया हो. हालांकि, ब्रॉडकास्ट रिसीवर या सेवा से लॉन्च किए गए ऐप्लिकेशन के लिए, नया ऐप्लिकेशन ऐनिमेशन इस्तेमाल नहीं किया जाता. इससे लोगों को खराब अनुभव मिलता है.
आपका ऐप्लिकेशन, Android के पुराने वर्शन पर @android:id/background का इस्तेमाल कर सकता है. हालांकि, इसे अनदेखा कर दिया जाता है.
RemoteViews में रनटाइम के दौरान बदलाव करना
Android 12 से, RemoteViews के कई ऐसे तरीकों का फ़ायदा लिया जा सकता है जिनसे RemoteViews एट्रिब्यूट में रनटाइम के दौरान बदलाव किया जा सकता है. जोड़े गए सभी तरीकों की सूची देखने के लिए, RemoteViews एपीआई
रेफ़रंस देखें.
यहां कोड का एक उदाहरण दिया गया है, जिसमें इनमें से कुछ तरीकों का इस्तेमाल करने का तरीका दिखाया गया है.
Kotlin
// Set the colors of a progress bar at runtime. remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList()) // Specify exact sizes for margins. remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP)
Java
// Set the colors of a progress bar at runtime. remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList()); // Specify exact sizes for margins. remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP);