Wear OS के लिए Compose में, Material 2.5 से Material 3 पर माइग्रेट करना

Material 3 Expressive, Material Design का नया वर्शन है. इसमें अपडेट की गई थीम, कॉम्पोनेंट, और डाइनैमिक कलर जैसी अपनी पसंद के मुताबिक बनाने की सुविधाएं शामिल हैं.

इस गाइड में, ऐप्लिकेशन के लिए Wear Compose Material 2.5 (androidx.wear.compose) Jetpack लाइब्रेरी से Wear Compose Material 3 (androidx.wear.compose.material3) Jetpack लाइब्रेरी पर माइग्रेट करने का तरीका बताया गया है.

तरीके

अपने ऐप्लिकेशन कोड को M2.5 से M3 पर माइग्रेट करने के लिए, Compose Material को माइग्रेट करने के लिए फ़ोन पर दिए गए निर्देश में बताए गए तरीके का पालन करें. खास तौर पर:

डिपेंडेंसी

M3 का पैकेज और वर्शन, M2.5 से अलग है:

M2.5

implementation("androidx.wear.compose:compose-material:1.4.0")

M3

implementation("androidx.wear.compose:compose-material3:1.5.0-beta01")

Wear Compose Material 3 रिलीज़ पेज पर, M3 के नए वर्शन देखें.

Wear Compose फ़ाउंडेशन लाइब्रेरी के वर्शन 1.5.0-beta01 में कुछ नए कॉम्पोनेंट जोड़े गए हैं. इन्हें Material 3 कॉम्पोनेंट के साथ काम करने के लिए डिज़ाइन किया गया है. इसी तरह, Wear Compose नेविगेशन लाइब्रेरी के SwipeDismissableNavHost में, Wear OS 6 (एपीआई लेवल 36) या उसके बाद के वर्शन पर चलने पर अपडेट किया गया ऐनिमेशन है. Wear Compose Material 3 वर्शन पर अपडेट करते समय, हमारा सुझाव है कि आप Wear Compose फ़ाउंडेशन और नेविगेशन लाइब्रेरी को भी अपडेट करें:

implementation("androidx.wear.compose:compose-foundation:1.5.0-beta01")
implementation("androidx.wear.compose:compose-navigation:1.5.0-beta01")

थीम बनाई जा रही है

M2.5 और M3, दोनों में थीम कॉम्पोज़ेबल का नाम MaterialTheme है. हालांकि, इंपोर्ट पैकेज और पैरामीटर अलग-अलग हैं. M3 में, Colors पैरामीटर का नाम बदलकर ColorScheme कर दिया गया है. साथ ही, ट्रांज़िशन लागू करने के लिए MotionScheme को शामिल किया गया है.

M2.5

import androidx.wear.compose.material.MaterialTheme

MaterialTheme(
        colors = AppColors,
        typography = AppTypography,
        shapes = AppShapes,
        content = content
)

M3

import androidx.wear.compose.material3.MaterialTheme

MaterialTheme(
        colorScheme = AppColorScheme,
        typography = AppTypography,
        shapes = AppShapes,
        motionScheme = AppMotionScheme,
        content = content
)

रंग

M3 में कलर सिस्टम, M2.5 से काफ़ी अलग है. कलर पैरामीटर की संख्या बढ़ गई है. साथ ही, उनके नाम अलग-अलग हैं और ये M3 कॉम्पोनेंट के साथ अलग तरीके से मैप होते हैं. Compose में, यह M2.5 Colors क्लास, M3 ColorScheme क्लास, और उनसे जुड़े फ़ंक्शन पर लागू होता है:

M2.5

import androidx.wear.compose.material.Colors

val appColorScheme: Colors = Colors(
   // M2.5 Color parameters
)

M3

import androidx.wear.compose.material3.ColorScheme

val appColorScheme: ColorScheme = ColorScheme(
   // M3 ColorScheme parameters
)

यहां दी गई टेबल में, M2.5 और M3 के बीच के मुख्य अंतर के बारे में बताया गया है:

M2.5

M3

Color

का नाम बदलकर ColorScheme कर दिया गया है

13 रंग

28 कलर

लागू नहीं

डाइनैमिक कलर थीम की नई सुविधा

लागू नहीं

ज़्यादा जानकारी देने के लिए, नए तीसरे रंग

डाइनैमिक कलर थीम

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

डाइनैमिक कलर स्कीम लागू करने के लिए, dynamicColorScheme फ़ंक्शन का इस्तेमाल करें. साथ ही, डाइनैमिक कलर स्कीम उपलब्ध न होने पर, फ़ॉलबैक के तौर पर defaultColorScheme दें.

@Composable
fun myApp() {
  val myColorScheme = myBrandColors()
  val dynamicColorScheme = dynamicColorScheme(LocalContext.current)
  MaterialTheme(colorScheme = dynamicColorScheme ?: myBrandColors) {...}
}

मुद्रण कला

M3 में टाइपोग्राफ़ी सिस्टम, M2 से अलग है. इसमें ये सुविधाएं शामिल हैं:

  • नौ नई टेक्स्ट स्टाइल
  • फ़्लेक्स फ़ॉन्ट, जिनकी मदद से अलग-अलग वज़न, चौड़ाई, और गोल आकार के लिए टाइप स्केल को पसंद के मुताबिक बनाया जा सकता है
  • AnimatedText, जो फ़्लेक्स फ़ॉन्ट का इस्तेमाल करता है

M2.5

import androidx.wear.compose.material.Typography

val Typography = Typography(
   // M2.5 TextStyle parameters
)

M3

import androidx.wear.compose.material3.Typography

val Typography = Typography(
   // M3 TextStyle parameters
)

फ़्लेक्स फ़ॉन्ट

फ़्लेक्स फ़ॉन्ट की मदद से, डिज़ाइनर किसी खास साइज़ के लिए टाइप की चौड़ाई और वेट तय कर सकते हैं.

टेक्स्ट स्टाइल

M3 में ये TextStyles उपलब्ध हैं. ये डिफ़ॉल्ट रूप से, M3 के अलग-अलग कॉम्पोनेंट में इस्तेमाल किए जाते हैं.

मुद्रण कला

TextStyle

डिसप्ले

displayLarge, displayMedium, displaySmall

शीर्षक

titleLarge, titleMedium, titleSmall

लेबल

labelLarge, labelMedium, labelSmall

मुख्य हिस्सा

bodyLarge, bodyMedium, bodySmall, bodyExtraSmall

संख्या

numeralExtraLarge, numeralLarge, numeralMedium, numeralSmall, numeralExtraSmall

चाप

arcLarge, arcMedium, arcSmall

आकार

M3 में आकार का सिस्टम, M2 से अलग है. शेप पैरामीटर की संख्या बढ़ गई है. साथ ही, इनका नाम अलग है और ये M3 कॉम्पोनेंट के साथ अलग तरीके से मैप होते हैं. आकार के ये साइज़ उपलब्ध हैं:

  • एक्स्ट्रा स्मॉल (एक्सएस)
  • छोटा
  • मध्यम
  • बड़ा
  • एक्स्ट्रा लार्ज

Compose में, यह M2 आकार क्लास और M3 आकार क्लास पर लागू होता है:

M2.5

import androidx.wear.compose.material.Shapes

val Shapes = Shapes(
   // M2.5 Shapes parameters
)

M3

import androidx.wear.compose.material3.Shapes

val Shapes = Shapes(
   // M3 Shapes parameters
)

शुरुआत करने के लिए, Compose में Material 2 से Material 3 पर माइग्रेट करें से आकार पैरामीटर मैपिंग का इस्तेमाल करें.

आकार में बदलाव करना

M3 में आकार में बदलाव करने की सुविधा जोड़ी गई है: अब आकार, इंटरैक्शन के हिसाब से बदलते हैं.

आकार बदलने की सुविधा, कई गोल बटन के वैरिएंट के तौर पर उपलब्ध है. यहां देखें:

बटन

शेप को मॉर्फ़ करने वाला फ़ंक्शन

IconButton

IconButtonDefaults.animatedShape(), आइकॉन बटन को दबाने पर ऐनिमेशन दिखाता है

IconToggleButton

IconToggleButtonDefaults.animatedShape(), आइकॉन टॉगल बटन को दबाने पर ऐनिमेट करता है और

IconToggleButtonDefaults.variantAnimatedShapes(), आइकॉन टॉगल बटन को दबाने पर ऐनिमेट करता है और चेक/अनचेक करता है

TextButton

TextButtonDefaults.animatedShape(), दबाने पर टेक्स्ट बटन को ऐनिमेट करता है

TextToggleButton

TextToggleButtonDefaults.animatedShapes(), दबाने पर टेक्स्ट टॉगल को ऐनिमेट करता है. साथ ही, TextToggleButtonDefaults.variantAnimatedShapes(), दबाने पर टेक्स्ट टॉगल को ऐनिमेट करता है और सही का निशान लगाने/हटाने पर भी ऐनिमेशन दिखाता है

कॉम्पोनेंट और लेआउट

M2.5 के ज़्यादातर कॉम्पोनेंट और लेआउट, M3 में उपलब्ध हैं. हालांकि, M3 के कुछ कॉम्पोनेंट और लेआउट, M2.5 में मौजूद नहीं थे. इसके अलावा, M3 के कुछ कॉम्पोनेंट के वैरिएशन, M2.5 के उन कॉम्पोनेंट के मुकाबले ज़्यादा होते हैं.

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

Material 2.5

Material 3

androidx.wear.compose.material.dialog.Alert

androidx.wear.compose.material3.AlertDialog

androidx.wear.compose.material.Button

androidx.wear.compose.material3.IconButton या androidx.wear.compose.material3.TextButton

androidx.wear.compose.material.Card

androidx.wear.compose.material3.Card

androidx.wear.compose.material.TitleCard

androidx.wear.compose.material3.TitleCard

androidx.wear.compose.material.AppCard

androidx.wear.compose.material3.AppCard

androidx.wear.compose.material.Checkbox

M3 के लिए कोई मिलता-जुलता विकल्प नहीं है. androidx.wear.compose.material3.CheckboxButton या androidx.wear.compose.material3.SplitCheckboxButton पर माइग्रेट करें

androidx.wear.compose.material.Chip

androidx.wear.compose.material3.Button या
androidx.wear.compose.material3.OutlinedButton या
androidx.wear.compose.material3.FilledTonalButton या
androidx.wear.compose.material3.ChildButton

androidx.wear.compose.material.CompactChip

androidx.wear.compose.material3.CompactButton

androidx.wear.compose.material.InlineSlider

androidx.wear.compose.material3.Slider

androidx.wear.compose.material.LocalContentAlpha

इसे हटा दिया गया है, क्योंकि Material 3 में Text या Icon ने इसका इस्तेमाल नहीं किया है

androidx.wear.compose.material.PositionIndicator

androidx.wear.compose.material3.ScrollIndicator

androidx.wear.compose.material.RadioButton

M3 के लिए कोई मिलता-जुलता विकल्प नहीं है. androidx.wear.compose.material3.RadioButton या androidx.wear.compose.material3.SplitRadioButton पर माइग्रेट करें

androidx.wear.compose.material.SwipeToRevealCard

androidx.wear.compose.material3.SwipeToReveal

androidx.wear.compose.material.SwipeToRevealChip

androidx.wear.compose.material3.SwipeToReveal

android.wear.compose.material.Scaffold

androidx.wear.compose material3.AppScaffold और androidx.wear.compose.material3.ScreenScaffold

androidx.wear.compose.material.SplitToggleChip

M3 के लिए कोई मिलता-जुलता एलिमेंट नहीं है. androidx.wear.compose.material3.SplitCheckboxButton, androidx.wear.compose.material3.SplitSwitchButton या androidx.wear.compose.material3.SplitRadioButton पर माइग्रेट करें

androidx.wear.compose.material.Switch

M3 के लिए कोई मिलता-जुलता विकल्प नहीं है. androidx.wear.compose.material3.SwitchButton या androidx.wear.compose.material3.SplitSwitchButton पर माइग्रेट करें

androidx.wear.compose.material.ToggleButton

androidx.wear.compose.material3.IconToggleButton या androidx.wear.compose.material3.TextToggleButton

androidx.wear.compose.material.ToggleChip

androidx.wear.compose.material3.CheckboxButton या
androidx.wear.compose.material3.RadioButton या
androidx.wear.compose.material3.SwitchButton

androidx.wear.compose.material.Vignette

इसे हटा दिया गया है, क्योंकि यह Wear OS के लिए Material 3 एक्सप्रेशनिव डिज़ाइन में शामिल नहीं है

यहां Material 3 के सभी कॉम्पोनेंट की पूरी सूची दी गई है:

Material 3

Material 2.5 के बराबर का कॉम्पोनेंट (अगर M3 में नया नहीं है)

androidx.wear.compose.material3.AlertDialog

androidx.wear.compose.material.dialog.Alert

androix.wear.compose.material3.AnimatedPage

नया

androidx.wear.compose.material3.AnimatedText

नया

androidx.wear.compose material3.AppScaffold

android.wear.compose.material.Scaffold (androidx.wear.compose.material3.ScreenScaffold के साथ)

androidx.wear.compose.material3.Button

androidx.wear.compose.material.Chip

androidx.wear.compose.material3.ButtonGroup

नया

androidx.wear.compose.material3.Card

androidx.wear.compose.material.Card

androidx.wear.compose.material3.CheckboxButton

चेकबॉक्स टॉगल कंट्रोल के साथ androidx.wear.compose.material.ToggleChip

androidx.wear.compose.material3.ChildButton

androidx.wear.compose.material.Chip (सिर्फ़ तब इस्तेमाल करें, जब बैकग्राउंड की ज़रूरत न हो)

androidx.wear.compose.material3.CircularProgressIndicator

androidx.wear.compose.material.CircularProgressIndicator

androidx.wear.compose.material3.CompactButton

androidx.wear.compose.material.CompactChip

androidx.wear.compose.material3.ConfirmationDialog

androidx.wear.compose.material.dialog.Confirmation

androidx.wear.compose.material3.curvedText

androidx.wear.compose.material.curvedText

androidx.wear.compose.material3.DatePicker

नया

androidx.wear.compose.material3.Dialog

androidx.wear.compose.material.dialog.Dialog

androidx.wear.compose.material3.EdgeButton

नया

androidx.wear.compose.material3.FadingExpandingLabel

नया

androidx.wear.compose.material3.FilledTonalButton

androidx.wear.compose.material.Chip, जब बटन के बैकग्राउंड के लिए टोन की ज़रूरत हो

androidx.wear.compose.material3.HorizontalPageIndicator

androidx.wear.compose.material.HorizontalPageIndicator

androidx.wear.compose.material3.HorizontalPagerScaffold

नया

androidx.wear.compose.material3.Icon

androidx.wear.compose.material.Icon

androidx.wear.compose.material3.IconButton

androidx.wear.compose.material.Button

androidx.wear.compose.material3.IconToggleButton

androidx.wear.compose.material.ToggleButton

androidx.wear.compose.material3.LevelIndicator

नया

androidx.wear.compose.material3.LinearProgressIndicator

नया

androidx.wear.compose.material3.ListHeader

androidx.wear.compose.material.ListHeader

androidx.wear.compose.material3.ListSubHeader

नया

androidx.wear.compose.material3.MaterialTheme

androidx.wear.compose.material.MaterialTheme

androidx.wear.compose.material3.OpenOnPhoneDialog

नया

androidx.wear.compose.material3.Picker

androidx.wear.compose.material.Picker

androidx.wear.compose.material3.PickerGroup

androidx.wear.compose.material.PickerGroup

androix.wear.compose.material3.RadioButton

रेडियो बटन टॉगल कंट्रोल के साथ androidx.wear.compose.material.ToggleChip

androidx.wear.compose.material3.ScreenScaffold

android.wear.compose.material.Scaffold (androidx.wear.compose material3.AppScaffold के साथ)

androidx.wear.compose.material3.ScrollIndicator

androidx.wear.compose.material.PositionIndicator

androidx.wear.compose.material3.scrollaway

androidx.wear.compose.material.scrollaway

androidx.wear.compose.material3.SegmentedCircularProgressIndicator

नया

androidx.wear.compose.material3.Slider

androidx.wear.compose.material.InlineSlider

androidx.wear.compose.material3.SplitRadioButton

androidx.wear.compose.material.SplitToggleChip

androidx.wear.compose.material3.SplitCheckboxButton

androidx.wear.compose.material.SplitToggleChip

androidx.wear.compose.material3.SplitSwitchButton

androidx.wear.compose.material.SplitToggleChip

androidx.wear.compose.material3.Stepper

androidx.wear.compose.material.Stepper

androidx.wear.compose.material3.SwipeToDismissBox

androidx.wear.compose.material.SwipeToDismissBox

androidx.wear.compose.material3.SwipeToReveal

androidx.wear.compose.material.SwipeToRevealCard और androidx.wear.compose.material.SwipeToRevealChip

androidx.wear.compose.material3.SwitchButton

स्विच टॉगल कंट्रोल के साथ androidx.wear.compose.material.ToggleChip

androidx.wear.compose.material3.Text

androidx.wear.compose.material.Text

androidx.wear.compose.material3.TextButton

androidx.wear.compose.material.Button

androidx.wear.compose.material3.TextToggleButton

androidx.wear.compose.material.ToggleButton

androidx.wear.compose.material3.TimeText

androidx.wear.compose.material.TimeText

androidx.wear.compose.material3.VerticalPagerScaffold

नया

आखिर में, Wear Compose Foundation लाइब्रेरी के 1.5.0-beta01 वर्शन के कुछ काम के कॉम्पोनेंट की सूची:

Wear Compose Foundation 1.5.0-beta

androidx.wear.compose.foundation.hierarchicalFocusGroup

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

androidx.compose.foundation.pager.HorizontalPager

Compose फ़ाउंडेशन कॉम्पोनेंट पर आधारित, हॉरिज़ॉन्टल स्क्रोलिंग पेजर. इसमें Wear के लिए खास सुविधाएं जोड़ी गई हैं, ताकि परफ़ॉर्मेंस को बेहतर बनाया जा सके और Wear OS के दिशा-निर्देशों का पालन किया जा सके.

androidx.compose.foundation.pager.VerticalPager

वर्टिकल स्क्रोलिंग पेजर, जो Compose फ़ाउंडेशन कॉम्पोनेंट पर बनाया गया है. इसमें Wear के लिए खास सुविधाएं जोड़ी गई हैं, ताकि परफ़ॉर्मेंस को बेहतर बनाया जा सके और Wear OS के दिशा-निर्देशों का पालन किया जा सके.

androidx.wear.foundation.lazy.TransformingLazyColumn

हर आइटम में स्क्रोल ट्रांसफ़ॉर्म इफ़ेक्ट जोड़ने के लिए, ScalingLazyColumn के बजाय इसका इस्तेमाल किया जा सकता है.

बटन

M3 में बटन, M2.5 से अलग होते हैं. M2.5 चिप की जगह बटन का इस्तेमाल किया गया है. Button लागू करने पर, Text maxLines और textAlign के लिए डिफ़ॉल्ट वैल्यू मिलती हैं. इन डिफ़ॉल्ट वैल्यू को Text एलिमेंट में बदला जा सकता है.

M2.5

import androidx.wear.compose.material.Chip

//M2.5 Buttons
Chip(...)
CompactChip(...)
Button(...)

M3

import androidx.wear.compose.material3.Button

//M3 Buttons
Button(...)
CompactButton(...)
IconButton(...)
TextButton(...)

M3 में नए बटन वैरिएंट भी शामिल हैं. इनके बारे में Compose Material 3 के एपीआई के रेफ़रंस की खास जानकारी में जानें.

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

अगर TransformingLazyColumn और ScalingLazyColumn का इस्तेमाल किया जा रहा है, तो EdgeButton को ScreenScaffold में पास करें, ताकि वह स्क्रोल करने पर अपना आकार बदल सके. ScreenScaffold और TransformingLazyColumn के साथ EdgeButton का इस्तेमाल करने का तरीका जानने के लिए, नीचे दिया गया कोड देखें.

import androidx.wear.compose.material3.EdgeButton
import androidx.wear.compose.material3.ScreenScaffold

ScreenScaffold(
   scrollState = state,
   contentPadding = contentPadding,
   edgeButton = {
      EdgeButton(...)
   }
){ contentPadding ->
   TransformingLazyColumn(state = state, contentPadding = contentPadding,){
   // additional code here
   }
}

मचान

M3 में स्कैफ़ोल्ड, M2.5 से अलग है. M3 में, AppScaffold और नए ScreenScaffold कंपोज़ेबल ने स्कैफ़ोल्ड की जगह ले ली है. AppScaffold और ScreenScaffold, स्क्रीन का स्ट्रक्चर तय करते हैं. साथ ही, ScrollIndicator और TimeText कॉम्पोनेंट के ट्रांज़िशन को मैनेज करते हैं.

AppScaffold की मदद से, TimeText जैसे स्टैटिक स्क्रीन एलिमेंट को इन-ऐप्लिकेशन ट्रांज़िशन के दौरान भी दिखने दिया जा सकता है. जैसे, 'स्‍वाइप करके हटाएं' सुविधा. ​​यह मुख्य ऐप्लिकेशन कॉन्टेंट के लिए एक स्लॉट उपलब्ध कराता है. आम तौर पर, यह स्लॉट SwipeDismissableNavHost जैसे नेविगेशन कॉम्पोनेंट से मिलता है

गतिविधि के लिए एक AppScaffold और हर स्क्रीन के लिए एक ScreenScaffold का इस्तेमाल किया जाता है.

M2.5

import androidx.wear.compose.material.Scaffold

Scaffold {...}

M3

import androidx.wear.compose.material3.AppScaffold
import androidx.wear.compose.material3.ScreenScaffold

AppScaffold {
   // Define the navigation hierarchy within the AppScaffold,
   // such as using SwipeDismissableNavHost.
   SwipeDismissableNavHost(...) {
      composable("home") {
         HomeScreen()
      }
      //other screens
   }
}
fun HomeScreen() {
    val scrollState = rememberScrollState()
    ScreenScaffold(scrollState = scrollState) {
    //rest of the screen code
    }
}

अगर HorizontalPagerIndicator के साथ HorizontalPager का इस्तेमाल किया जा रहा है, तो इसे HorizontalPagerScaffold पर माइग्रेट किया जा सकता है. HorizontalPagerScaffold को AppScaffold में रखा गया है. AppScaffold और HorizontalPagerScaffold, पेजर के स्ट्रक्चर को सेट करते हैं. साथ ही, HorizontalPageIndicator और TimeText कॉम्पोनेंट के ट्रांज़िशन को मैनेज करते हैं.

HorizontalPagerScaffold, डिफ़ॉल्ट रूप से स्क्रीन के बीच में HorizontalPageIndicator दिखाता है. साथ ही, TimeText और HorizontalPageIndicator को दिखाने/छिपाने के लिए निर्देश देता है. यह इस बात पर निर्भर करता है कि Pager को पेज किया जा रहा है या नहीं. यह PagerState से तय होता है.

इसमें एक नया AnimatedPage कॉम्पोनेंट भी है, जो पेज की पोज़िशन के आधार पर, स्केलिंग और स्क्रीम इफ़ेक्ट के साथ पेज को ऐनिमेट करता है.

import androidx.wear.compose.material3.AppScaffold
import androidx.wear.compose.material3.HorizontalPagerScaffold
import androidx.wear.compose.material3.ScreenScaffold
import androidx.wear.compose.foundation.pager.HorizontalPager
import androidx.wear.compose.foundation.pager.rememberPagerState

AppScaffold {
    val pagerState = rememberPagerState(pageCount = { 10 })

    HorizontalPagerScaffold(pagerState = pagerState) {
       HorizontalPager(
          state = pagerState,
        ) { page ->
            AnimatedPage(pageIndex = page, pagerState = pagerState) {
                ScreenScaffold {

   }
}

आखिर में, M3 में VerticalPagerScaffold का इस्तेमाल किया गया है. यह HorizontalPagerScaffold के जैसे ही पैटर्न का पालन करता है:

import androidx.wear.compose.material3.AppScaffold
import androidx.wear.compose.material3.HorizontalPagerScaffold
import androidx.wear.compose.material3.ScreenScaffold
import androidx.wear.compose.foundation.pager.VerticalPager
import androidx.wear.compose.foundation.pager.rememberPagerState

AppScaffold {
   val pagerState = rememberPagerState(pageCount = { 10 })

   VerticalPagerScaffold(pagerState = pagerState) {
      VerticalPager(
         state = pagerState
      ) { page ->
             AnimatedPage(pageIndex = page, pagerState = pagerState){
                ScreenScaffold {
        
   }
}

प्लेसहोल्डर

M2.5 और M3 के बीच, एपीआई में कुछ बदलाव हुए हैं. Placeholder.PlaceholderDefaults अब दो मॉडिफ़ायर उपलब्ध कराता है:

  • Modifier.placeholder, जो अब तक डाउनलोड नहीं किए गए कॉन्टेंट के बजाय दिखाया जाता है
  • प्लेसहोल्डर शिमर इफ़ेक्ट Modifier.placeholderShimmer, जो डेटा लोड होने के दौरान ऐनिमेशन लूप में चलने वाला प्लेसहोल्डर शिमर इफ़ेक्ट देता है.

Placeholder कॉम्पोनेंट में हुए अन्य बदलावों के बारे में जानने के लिए, नीचे देखें.

M2.5

M3

PlaceholderState.startPlaceholderAnimation

हटा दिया गया है

PlaceholderState.placeholderProgression

हटा दिया गया है

PlaceholderState.isShowContent

इसका नाम बदलकर !PlaceholderState.isVisible कर दिया गया है

PlaceholderState.isWipeOff

हटा दिया गया है

PlaceholderDefaults.painterWithPlaceholderOverlayBackgroundBrush

हटा दिया गया है

PlaceholderDefaults.placeholderBackgroundBrush

हटा दिया गया है

PlaceholderDefaults.placeholderChipColors

हटा दिया गया है

SwipeDismissableNavHost

SwipeDismissableNavHost, wear.compose.navigation का हिस्सा है. जब इस कॉम्पोनेंट का इस्तेमाल M3 के साथ किया जाता है, तो M3 MaterialTheme, LocalSwipeToDismissBackgroundScrimColor और LocalSwipeToDismissContentScrimColor को अपडेट करता है.

TransformingLazyColumn

TransformingLazyColumn, wear.compose.lazy.foundation का हिस्सा है. यह स्क्रोल करने के दौरान, सूची के आइटम पर ऐनिमेशन को स्केल करने और मॉर्फ़ करने की सुविधा जोड़ता है. इससे उपयोगकर्ता अनुभव बेहतर होता है.

ScalingLazyColumn की तरह ही, यह rememberTransformingLazyColumnState() का इस्तेमाल करके ऐसा TransformingLazyColumnState बनाता है जिसे सभी कंपोजिशन में याद रखा जाता है.

स्केलिंग और मॉर्फ़ करने वाले ऐनिमेशन जोड़ने के लिए, हर सूची के आइटम में यह जानकारी जोड़ें:

  • Modifier.transformedHeight, जिसकी मदद से TransformationSpec का इस्तेमाल करके, आइटम की बदली हुई ऊंचाई का हिसाब लगाया जा सकता है. जब तक आपको आइटम में और बदलाव नहीं करने हैं, तब तक rememberTransformationSpec() का इस्तेमाल किया जा सकता है.
  • SurfaceTransformation
import androidx.wear.compose.material3.AppScaffold
import androidx.wear.compose.material3.ScreenScaffold
import androidx.wear.compose.material3.SurfaceTransformation
import androidx.wear.compose.material3.lazy.rememberTransformationSpec
import androidx.wear.compose.material3.lazy.transformedHeight
import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
import androidx.wear.compose.foundation.lazy.TransformingLazyColumn

val state = rememberTransformingLazyColumnState()
val transformationSpec = rememberTransformationSpec()
AppScaffold {
   ScreenScaffold(state) { contentPadding ->
      TransformingLazyColumn(state = state, contentPadding = contentPadding) {
         items(count = 50) {
            Button(
               onClick = {},
               modifier =
                        Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),
                        transformation = SurfaceTransformation(transformationSpec),
                    ) {
                        Text("Item $it")
                    }
                }
            }
        }
    }

काम के लिंक

Compose में M2.5 से M3 पर माइग्रेट करने के बारे में ज़्यादा जानने के लिए, यहां दिए गए अन्य रिसॉर्स देखें.

सैंपल

GitHub पर Material3 ब्रांच में मौजूद Wear OS के सैंपल

Compose for Wear OS कोडलैब

एपीआई का रेफ़रंस और सोर्स कोड

डिज़ाइन