अपने विजेट को बेहतर बनाएं

इस पेज पर, विजेट को बेहतर बनाने के विकल्पों के बारे में जानकारी दी गई है. ये विकल्प, Android 12 (एपीआई लेवल 31) से उपलब्ध हैं. ये सुविधाएं ज़रूरी नहीं हैं. हालांकि, इन्हें लागू करना और उपयोगकर्ताओं को विजेट का बेहतर अनुभव देना आसान है.

डाइनैमिक रंगों का इस्तेमाल करना

Android 12 और उसके बाद के वर्शन में, विजेट में बटन, बैकग्राउंड, और अन्य कॉम्पोनेंट के लिए, डिवाइस की थीम के रंगों का इस्तेमाल किया जा सकता है. इससे, अलग-अलग विजेट का इस्तेमाल करना आसान हो जाता है.

डाइनैमिक कलर पाने के दो तरीके हैं:

रूट लेआउट में थीम सेट होने के बाद, डाइनैमिक कलर चुनने के लिए, रूट या उसके किसी भी चाइल्ड में सामान्य कलर एट्रिब्यूट का इस्तेमाल किया जा सकता है.

रंग के एट्रिब्यूट के कुछ उदाहरण यहां दिए गए हैं:

  • ?attr/primary
  • ?attr/primaryContainer
  • ?attr/onPrimary
  • ?attr/onPrimaryContainer

यहां दिए गए उदाहरण में, Material 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) के साथ डिफ़ॉल्ट थीम बनाएं.

यहां Material 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 उपयोगकर्ता की बोली गई ज़रूरी निर्देशों के जवाब में विजेट दिखाती है. पहले से मौजूद इंटेंट (बीआईआई) का जवाब देने के लिए, अपने विजेट को कॉन्फ़िगर करें. इससे आपका ऐप्लिकेशन, Android और Android Auto जैसे Assistant प्लैटफ़ॉर्म पर विजेट दिखा सकता है. उपयोगकर्ताओं के पास, Assistant से दिखाए गए विजेट को अपने लॉन्चर पर पिन करने का विकल्प होता है. इससे, आने वाले समय में उपयोगकर्ताओं के जुड़ाव को बढ़ाने में मदद मिलती है.

उदाहरण के लिए, कसरत करने वाले ऐप्लिकेशन के लिए, वर्कआउट की खास जानकारी वाला विजेट कॉन्फ़िगर किया जा सकता है. इससे, उपयोगकर्ता के उन वॉइस कमांड को पूरा किया जा सकता है जो GET_EXERCISE_OBSERVATION बीआईआई को ट्रिगर करते हैं. जब उपयोगकर्ता इस बीआईआई को ट्रिगर करते हैं, तो Assistant आपका विजेट अपने-आप दिखाती है. ऐसा तब होता है, जब उपयोगकर्ता "Ok Google, मैंने इस हफ़्ते ExampleApp पर कितने मील दौड़ लगाई?" जैसे अनुरोध करते हैं.

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

अपने ऐप्लिकेशन के विजेट पिकर का अनुभव बेहतर बनाना

Android 12 की मदद से, विजेट पिकर के अनुभव को बेहतर बनाया जा सकता है. इसके लिए, विजेट की डाइनैमिक झलक और विजेट की जानकारी जोड़ें.

विजेट पिकर में, स्केल किए जा सकने वाले विजेट की झलक जोड़ना

Android 12 में, विजेट पिकर में दिखने वाले विजेट की झलक को स्केल किया जा सकता है. इसे विजेट के डिफ़ॉल्ट साइज़ पर सेट किए गए एक्सएमएल लेआउट के तौर पर दें. पहले, विजेट की झलक स्टैटिक ड्रॉ करने लायक संसाधन थी. कुछ मामलों में, जब होम स्क्रीन पर विजेट जोड़े जाते हैं, तो विजेट के दिखने की प्रोसेस के बारे में गलत जानकारी दी जाती थी.

स्केलेबल विजेट की झलक दिखाने के लिए, appwidget-provider एलिमेंट के previewLayout एट्रिब्यूट का इस्तेमाल करके एक्सएमएल लेआउट दें:

<appwidget-provider
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>

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

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

सटीक झलक बनाने के लिए सुझाए गए तरीके

विजेट की झलक को बड़े पैमाने पर लागू करने के लिए, एक्सएमएल लेआउट देने के लिए appwidget-provider एलिमेंट के previewLayout एट्रिब्यूट का इस्तेमाल करें:

<appwidget-provider
    ...
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
विजेट की झलक दिखाने वाली इमेज
तीसरी इमेज. विजेट की झलक, जो डिफ़ॉल्ट रूप से 3x3 एरिया में दिखती है. हालांकि, इसके एक्सएमएल लेआउट की वजह से इसे 3x1 एरिया में फ़िट किया जा सकता है.

सटीक झलक दिखाने के लिए, डिफ़ॉल्ट वैल्यू के साथ सीधे तौर पर असल विजेट लेआउट दिया जा सकता है. इसके लिए, यह तरीका अपनाएं:

  • TextView एलिमेंट के लिए android:text="@string/my_widget_item_fake_1" सेट करना.

  • ImageView कॉम्पोनेंट के लिए, डिफ़ॉल्ट या प्लेसहोल्डर इमेज या आइकॉन सेट करना, जैसे कि android:src="@drawable/my_widget_icon".

डिफ़ॉल्ट वैल्यू के बिना, हो सकता है कि झलक में गलत या खाली वैल्यू दिखें. इस तरीके का एक अहम फ़ायदा यह है कि आपके पास झलक के तौर पर, स्थानीय भाषा में कॉन्टेंट उपलब्ध कराने का विकल्प होता है.

ListView, GridView या StackView वाली ज़्यादा जटिल झलक बनाने के सुझाए गए तरीकों के बारे में जानने के लिए, डाइनैमिक आइटम वाली सटीक झलक बनाएं लेख पढ़ें.

बढ़ाने लायक विजेट की झलक के साथ पुराने सिस्टम के साथ काम करने की सुविधा

Android 11 (एपीआई लेवल 30) पर विजेट पिकर को या इससे नीचे के विजेट पर, विजेट की झलक दिखाने की अनुमति देने के लिए, previewImage एट्रिब्यूट की वैल्यू सबमिट करें.

विजेट के दिखने का तरीका बदलने पर, झलक वाली इमेज अपडेट करें.

अपने विजेट को कोई नाम दें

विजेट पिकर में विजेट दिखाए जाने पर, उनका एक यूनीक नाम होना चाहिए.

विजेट के नाम, AndroidManifest.xml फ़ाइल में मौजूद विजेट के receiver एलिमेंट के label एट्रिब्यूट से लोड किए जाते हैं.

<receiver
    ….
   android:label="Memories">
     ….
</receiver>

अपने विजेट के लिए जानकारी जोड़ना

Android 12 में, विजेट चुनने वाले टूल के लिए ब्यौरा दें, ताकि वह आपके विजेट के लिए दिख सके.

विजेट पिकर दिखाने वाली इमेज, जिसमें विजेट और उसका ब्यौरा दिख रहा है
चौथी इमेज. विजेट और उसकी जानकारी दिखाने वाले विजेट पिकर का नमूना.

&lt;appwidget-provider&gt; एलिमेंट के description एट्रिब्यूट का इस्तेमाल करके, अपने विजेट के बारे में जानकारी दें:

<appwidget-provider
    android:description="@string/my_widget_description">
</appwidget-provider>

Android के पिछले वर्शन पर, descriptionRes एट्रिब्यूट का इस्तेमाल किया जा सकता है. हालांकि, विजेट पिकर इस एट्रिब्यूट को अनदेखा कर देता है.

बेहतर ट्रांज़िशन की सुविधा चालू करना

Android 12 की शुरुआत से, जब कोई उपयोगकर्ता किसी विजेट से आपका ऐप्लिकेशन लॉन्च करता है, तो लॉन्चर की मदद से ट्रांज़िशन करना आसान होता है.

बेहतर ट्रांज़िशन की सुविधा चालू करने के लिए, अपने बैकग्राउंड एलिमेंट की पहचान करने के लिए @android:id/background या android.R.id.background का इस्तेमाल करें:

// Top-level layout of the widget.
<LinearLayout
    android:id="@android:id/background">
</LinearLayout>

आपका ऐप्लिकेशन 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);