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

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

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

विजेट को बेहतर बनाने के अन्य तरीके जानने के लिए, Compose की गाइड अपने विजेट को बेहतर बनाना लेख पढ़ें.

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

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

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

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

यहां रंग के कुछ एट्रिब्यूट दिए गए हैं जिनका इस्तेमाल किया जा सकता है:

  • ?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 बीआईआई ट्रिगर हो जाता है. जब लोग, "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>

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