در Compose for Wear OS از Material 2.5 به Material 3 مهاجرت کنید

Material 3 Expressive تکامل بعدی طراحی متریال است. این شامل قالب‌بندی، کامپوننت‌ها و ویژگی‌های شخصی‌سازی به‌روز شده مانند رنگ پویا می‌شود.

این راهنما بر مهاجرت از کتابخانه جت‌پک Wear Compose Material 2.5 (androidx.wear.compose) به کتابخانه جت‌پک Wear Compose Material 3 (androidx.wear.compose.material3) برای برنامه‌ها تمرکز دارد.

رویکردها

برای انتقال کد برنامه خود از M2.5 به M3، همان رویکردی را که در راهنمای تلفن انتقال Compose Material توضیح داده شده است، دنبال کنید، به ویژه:

وابستگی‌ها

M3 بسته و نسخه جداگانه‌ای نسبت به M2.5 دارد:

متر مربع

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

ام۳

implementation("androidx.wear.compose:compose-material3:1.6.0-alpha04")

آخرین نسخه‌های M3 را در صفحه انتشار Wear Compose Material 3 مشاهده کنید.

کتابخانه Wear Compose Foundation نسخه ۱.۶.۰-alpha۰۴ برخی از اجزای جدید را معرفی کرد که برای کار با اجزای Material 3 طراحی شده‌اند. به طور مشابه، SwipeDismissableNavHost از کتابخانه Wear Compose Navigation هنگام اجرا روی Wear OS 6 (سطح API ۳۶) یا بالاتر، انیمیشن به‌روز شده‌ای دارد. هنگام به‌روزرسانی به نسخه Wear Compose Material 3، پیشنهاد می‌کنیم کتابخانه‌های Wear Compose Foundation و Navigation را نیز به‌روزرسانی کنید:

implementation("androidx.wear.compose:compose-foundation:1.6.0-alpha04")
implementation("androidx.wear.compose:compose-navigation:1.6.0-alpha04")

تم

در هر دو M2.5 و M3، تم قابل ترکیب MaterialTheme نام دارد، اما بسته‌ها و پارامترهای ایمپورت متفاوت هستند. در M3، پارامتر Colors به ColorScheme تغییر نام داده و MotionScheme برای پیاده‌سازی انتقال‌ها معرفی شده است.

متر مربع

import androidx.wear.compose.material.MaterialTheme

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

ام۳

import androidx.wear.compose.material3.MaterialTheme

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

رنگ

سیستم رنگ در M3 به طور قابل توجهی با M2.5 متفاوت است. تعداد پارامترهای رنگ افزایش یافته است، نام‌های متفاوتی دارند و به طور متفاوتی به اجزای M3 نگاشت می‌شوند. در Compose، این موضوع در مورد کلاس Colors در M2.5، کلاس ColorScheme در M3 و توابع مرتبط صدق می‌کند:

متر مربع

import androidx.wear.compose.material.Colors

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

ام۳

import androidx.wear.compose.material3.ColorScheme

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

جدول زیر تفاوت‌های کلیدی بین M2.5 و M3 را شرح می‌دهد:

متر مربع

ام۳

Color

به ColorScheme تغییر نام داده است

۱۳ رنگ

۲۸ رنگ

ناموجود

قالب‌بندی رنگی پویای جدید

ناموجود

رنگ‌های درجه سه جدید برای جلوه بیشتر

تم رنگی پویا

یکی از ویژگی‌های جدید در M3 ، تم رنگی پویا است. اگر کاربران رنگ صفحه ساعت را تغییر دهند، رنگ‌های رابط کاربری نیز متناسب با آن تغییر می‌کنند.

از تابع dynamicColorScheme برای پیاده‌سازی طرح رنگ پویا استفاده کنید و یک defaultColorScheme به عنوان جایگزین در صورتی که طرح رنگ پویا در دسترس نباشد، ارائه دهید.

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

تایپوگرافی

سیستم تایپوگرافی در M3 با M2 متفاوت است و شامل ویژگی‌های زیر می‌شود:

  • نه سبک متن جدید
  • فونت‌های فلکس، که امکان سفارشی‌سازی مقیاس‌های نوع را برای وزن‌ها، عرض‌ها و میزان گردی‌های مختلف فراهم می‌کنند
  • AnimatedText که از فونت‌های flex استفاده می‌کند

متر مربع

import androidx.wear.compose.material.Typography

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

ام۳

import androidx.wear.compose.material3.Typography

val Typography = Typography(
   // M3 TextStyle parameters
)

فونت‌های فلکس

فونت‌های فلکس به طراحان این امکان را می‌دهند که عرض و ضخامت فونت را برای اندازه‌های خاص مشخص کنند.

سبک‌های متن

سبک‌های متن زیر در M3 موجود هستند. این‌ها به طور پیش‌فرض توسط اجزای مختلف M3 به کار گرفته می‌شوند.

تایپوگرافی

سبک متن

نمایش

نمایشگربزرگ، نمایشگرمتوسط، نمایشگرکوچک

عنوان

عنوانبزرگ، عنوانمتوسط، عنوانکوچک

برچسب

برچسببزرگ، برچسبمتوسط، برچسبکوچک

بدن

bodyLarge، bodyMedium، bodySmall، bodyExtraSmall

عدد

عددیخیلی بزرگ، عددیبزرگ، عددیمتوسط، عددیکوچک، عددیخیلی کوچک

قوس

قوس بزرگ، قوس متوسط، قوس کوچک

شکل

سیستم شکل در M3 با M2 متفاوت است. تعداد پارامترهای شکل افزایش یافته است، نام آنها متفاوت است و به طور متفاوتی به اجزای M3 نگاشت می‌شوند. اندازه‌های شکل زیر موجود است:

  • خیلی کوچک
  • کوچک
  • متوسط
  • بزرگ
  • خیلی بزرگ

در Compose، این موضوع در مورد کلاس‌های M2 Shapes و M3 Shapes صدق می‌کند:

متر مربع

import androidx.wear.compose.material.Shapes

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

ام۳

import androidx.wear.compose.material3.Shapes

val Shapes = Shapes(
   // M3 Shapes parameters
)

از نگاشت پارامترهای Shapes از Migrate from Material 2 to Material 3 در Compose به عنوان نقطه شروع استفاده کنید.

تغییر شکل

M3 قابلیت Shape Morphing را معرفی می‌کند: شکل‌ها اکنون در پاسخ به تعاملات تغییر شکل می‌دهند.

رفتار Shape Morphing به عنوان یک تغییر در تعدادی از دکمه‌های گرد موجود است، لیست دکمه‌هایی که از Shape Morphing پشتیبانی می‌کنند را در زیر مشاهده کنید:

دکمه‌ها

تابع تغییر شکل

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 تنوع بیشتری دارند.

اگرچه برخی از اجزا نیاز به ملاحظات خاصی دارند، نگاشت‌های تابع زیر به عنوان نقطه شروع توصیه می‌شوند:

ماده ۲.۵

ماده ۳

اندروید.ایکس.وی.آر.یو.پی.اس.دی.ال.او.اس.آی.دی.ایکس.آی.آر.دی

androidx.wear.compose.material3.AlertDialog

دکمه.مواد.اندروید.ایکس.وی.آر.یو.ایکس.وی ...یو.ایکس.

androidx.wear.compose.material3.IconButton یا androidx.wear.compose.material3.TextButton

اندروید، لباس، ترکیب، متریال، کارت

اندروید، لباس، ترکیب، متریال، ۳.کارت

androidx.wear.compose.material.TitleCard

androidx.wear.compose.material3.TitleCard

اندروید.پوشیدن.نوشتن.مواد.کارت برنامه

اندروید، لباس، ترکیب، متریال، کارت برنامه

کادر انتخاب متریال.compose.androidx.wear

معادل M3 وجود ندارد، به androidx.wear.compose.material3.CheckboxButton یا androidx.wear.compose.material3.SplitCheckboxButton مهاجرت کنید

اندروید.ایکس.وی.آر.یو.تی.آر.آی.تی.آر.آی.تی

androidx.wear.compose.material3.Button یا
androidx.wear.compose.material3.OutlinedButton یا
androidx.wear.compose.material3.FilledTonalButton یا
androidx.wear.compose.material3.ChildButton

اندروید.ایکس.وی.آر.یو.تی.آر.تی.آر.تی.سی.آر.تی.سی

androidx.wear.compose.material3.CompactButton

androidx.wear.compose.material.InlineSlider

اسلایدر متریال اندروید ۳

androidx.wear.compose.material.LocalContentAlpha

به دلیل عدم استفاده توسط Text یا Icon در متریال ۳، حذف شده است.

نشانگر موقعیت مواد در اندروید ایکس ورکس

androidx.wear.compose.material3.ScrollIndicator

androidx.wear.compose.material.RadioButton

معادل M3 وجود ندارد، به androidx.wear.compose.material3.RadioButton یا androidx.wear.compose.material3.SplitRadioButton مهاجرت کنید

اندروید، لباس، نوشتن، متریال، کشیدن و آشکار کردن کارت

اندروید، لباس، ترکیب، متریال ۳. کشیدن برای آشکار شدن

اندروید، لباس، نوشتن، متریال، کشیدن برای آشکار کردن، چیپ

اندروید، لباس، ترکیب، متریال ۳. کشیدن برای آشکار شدن

اندروید.پوشش.کامپوزیت.متریال.داربست

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 مهاجرت کنید.

اندروید.ایکس.وی.آر.یو.پی.اس.دی.آی.اس.وی.اس.آی.دی

معادل M3 وجود ندارد، به androidx.wear.compose.material3.SwitchButton یا androidx.wear.compose.material3.SplitSwitchButton مهاجرت کنید

دکمه‌ی تغییر وضعیت متریال برای نوشتن لباس اندروید

دکمه‌ی androidx.wear.compose.material3.IconToggleButton یا دکمه‌ی androidx.wear.compose.material3.TextToggleButton

اندروید.ایکس.وی.آر.یو.تی.آر ...

androidx.wear.compose.material3.CheckboxButton یا
androidx.wear.compose.material3.RadioButton یا
androidx.wear.compose.material3.SwitchButton

اندروید.ایکس.ویژن.ویژن.متریال.کامپوزیت

حذف شده است زیرا در طراحی رسا Material 3 برای Wear OS گنجانده نشده است

در اینجا لیست کاملی از تمام اجزای Material 3 آمده است:

ماده ۳

قطعه معادل ماده ۲.۵ (اگر در M3 جدید نباشد)

androidx.wear.compose.material3.AlertDialog

اندروید.ایکس.وی.آر.یو.پی.اس.دی.ال.او.اس.آی.دی.ایکس.آی.آر.دی

صفحه متحرک android.wear.compose.material3

جدید

androidx.wear.compose.material3.AnimatedText

جدید

androidx.wear.compose material3.AppScaffold

android.wear.compose.material.Scaffold (به همراه androidx.wear.compose.material3.ScreenScaffold )

دکمه.اندروید.ایکس.وی.آر.پی.اس.۳.

اندروید.ایکس.وی.آر.یو.تی.آر.آی.تی.آر.آی.تی

androidx.wear.compose.material3.ButtonGroup

جدید

اندروید، لباس، ترکیب، متریال، ۳.کارت

اندروید، لباس، ترکیب، متریال، کارت

دکمه‌ی انتخاب متریال ۳ در اندروید با استفاده از Wear.Compose.Material3

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.material3.ConfirmationDialog

تأییدیه گفتگوی متریال.اندروید.ایکس.وی‌ای ...

androidx.wear.compose.material3.curvedText

اندروید.ایکس.وی.آر.یو.تی.اف.تی.متریال.منحنی.متن

androidx.wear.compose.material3.DatePicker

جدید

اندروید، لباس، ترکیب، متریال، دیالوگ

اندروید.ایکس.وی.آر.یو.دی.ال.جی.پی.سی.متریال.دیالوگ

دکمه لبه‌ای اندروید

جدید

androidx.wear.compose.material3.FadingExpandingLabel

جدید

دکمه‌ی تونالِ پر شده با متریال ۳ برای اندروید و لباس

androidx.wear.compose.material.Chip وقتی پس‌زمینه دکمه با تُن رنگی مورد نیاز است

androidx.wear.compose.material3.HorizontalPageIndicator

androidx.wear.compose.material.HorizontalPageIndicator

androidx.wear.compose.material3.HorizontalPagerScaffold

جدید

آیکون متریال ۳ اندروید و لباس

آیکون متریال.اندروید.ایکس.وی.آر.یو ...ال.ایکس.وی.آر.یو

دکمه آیکون اندروید، لباس، ترکیب، متریال ۳

دکمه.مواد.اندروید.ایکس.وی.آر.یو.ایکس.وی ...یو.ایکس.

دکمه‌ی تغییر آیکون اندروید، مخصوص لباس، متریال ۳

دکمه‌ی تغییر وضعیت متریال برای نوشتن لباس اندروید

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.OpenOnPhoneDialog

جدید

androidx.wear.compose.material3.Picker

انتخابگر مواد در اندروید

androidx.wear.compose.material3.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.material3.SegmentedCircularProgressIndicator

جدید

اسلایدر متریال اندروید ۳

androidx.wear.compose.material.InlineSlider

androidx.wear.compose.material3.SplitRadioButton

androidx.wear.compose.material.SplitToggleChip

دکمه‌ی انتخاب جداشونده در androidx.wear.compose.material3.SplitCheckbox

androidx.wear.compose.material.SplitToggleChip

androidx.wear.compose.material3.SplitSwitchButton

androidx.wear.compose.material.SplitToggleChip

اندروید، لباس، ترکیب، متریال، ۳. پله‌زن

اندروید، لباس، ترکیب، متریال، پله‌زن

androidx.wear.compose.material3.جعبه‌ی کشیدن برای رد کردن

androidx.wear.compose.material.SwipeToDismissBox

اندروید، لباس، ترکیب، متریال ۳. کشیدن برای آشکار شدن

androidx.wear.compose.material.SwipeToRevealCard ‎ و ‎androidx.wear.compose.material.SwipeToRevealChip

androidx.wear.compose.material3.SwitchButton

androidx.wear.compose.material.ToggleChip با یک کنترل ضامن سوئیچ

اندروید.ایکس.وی.آر.پی.اس.۳.متن

متن.متن.مواد.ترکیب.پوشش.اندروید

androidx.wear.compose.material3.TextButton

دکمه.مواد.اندروید.ایکس.وی.آر.یو.ایکس.وی ...یو.ایکس.

دکمه‌ی تغییر متن اندروید x.wear.compose.material3.TextToggleButton

دکمه‌ی تغییر وضعیت متریال برای نوشتن لباس اندروید

androidx.wear.compose.material3.TimeText

androidx.wear.compose.material.TimeText

androidx.wear.compose.material3.VerticalPagerScaffold

جدید

و در نهایت فهرستی از برخی کامپوننت‌های مرتبط از کتابخانه Wear Compose Foundation که اولین بار در نسخه 1.6.0-alpha04 معرفی شد:

کرم پودر Wear Compose نسخه ۱.۶.۰-alpha04

androidx.wear.compose.foundation.hierarchicalFocusGroup

برای حاشیه‌نویسی ترکیبات در یک برنامه، پیگیری بخش فعال ترکیب و هماهنگ‌سازی تمرکز استفاده می‌شود.

androidx.compose.foundation.pager.HorizontalPager

یک پیجر با قابلیت پیمایش افقی، ساخته شده بر اساس اجزای Compose Foundation با بهبودهای مخصوص Wear برای بهبود عملکرد و پایبندی به دستورالعمل‌های Wear OS.

androidx.compose.foundation.pager.VerticalPager

یک پیجر با قابلیت پیمایش عمودی، ساخته شده بر اساس اجزای Compose Foundation با بهبودهای مخصوص Wear برای بهبود عملکرد و پایبندی به دستورالعمل‌های Wear OS.

ستون تنبل در حال تغییر شکل اندروید با استفاده از Foundation.wear.androidx

می‌تواند به جای ScalingLazyColumn برای افزودن جلوه‌های تبدیل اسکرول به هر آیتم استفاده شود.

دکمه‌ها

دکمه‌ها در M3 با M2.5 متفاوت هستند. چیپ M2.5 با Button جایگزین شده است. پیاده‌سازی Button مقادیر پیش‌فرضی برای maxLines و textAlign Text ارائه می‌دهد. این مقادیر پیش‌فرض را می‌توان در عنصر Text لغو کرد.

متر مربع

import androidx.wear.compose.material.Chip

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

ام۳

import androidx.wear.compose.material3.Button

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

M3 همچنین شامل انواع جدیدی از دکمه‌ها است. می‌توانید آنها را در نمای کلی مرجع Compose Material 3 API بررسی کنید.

M3 یک دکمه جدید معرفی می‌کند: EdgeButton . EdgeButton در ۴ اندازه مختلف موجود است: خیلی کوچک، کوچک، متوسط ​​و بزرگ. پیاده‌سازی EdgeButton یک مقدار پیش‌فرض برای maxLines بسته به اندازه ارائه می‌دهد که می‌تواند سفارشی‌سازی شود.

اگر از TransformingLazyColumn و ScalingLazyColumn استفاده می‌کنید، EdgeButton به ScreenScaffold ارسال کنید تا با اسکرول کردن، شکل آن تغییر کند. برای بررسی نحوه استفاده از EdgeButton با ScreenScaffold و TransformingLazyColumn ، به کد زیر مراجعه کنید.

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
   }
}

داربست

Scaffold در M3 با M2.5 متفاوت است. در M3، AppScaffold و ترکیب جدید ScreenScaffold جایگزین Scaffold شده‌اند. AppScaffold و ScreenScaffold ساختار یک صفحه را طرح‌بندی می‌کنند و انتقال‌های کامپوننت‌های ScrollIndicator و TimeText را هماهنگ می‌کنند.

AppScaffold به عناصر ثابت صفحه نمایش مانند TimeText اجازه می‌دهد تا در طول انتقال‌های درون برنامه‌ای مانند کشیدن انگشت برای رد کردن، قابل مشاهده باقی بمانند. این ابزار، فضایی را برای محتوای اصلی برنامه فراهم می‌کند که معمولاً توسط یک کامپوننت ناوبری مانند SwipeDismissableNavHost ارائه می‌شود.

شما یک AppScaffold برای Activity تعریف می‌کنید و برای هر Screen از یک ScreenScaffold استفاده می‌کنید.

متر مربع

import androidx.wear.compose.material.Scaffold

Scaffold {...}

ام۳

    AppScaffold {
        val navController = rememberSwipeDismissableNavController()
        SwipeDismissableNavHost(
            navController = navController,
            startDestination = "message_list"
        ) {
            composable("message_list") {
                MessageList(onMessageClick = { id ->
                    navController.navigate("message_detail/$id")
                })
            }
            composable("message_detail/{id}") {
                MessageDetail(id = it.arguments?.getString("id")!!)
            }
        }
    }
}

// Implementation of one of the screens in the navigation
@Composable
fun MessageDetail(id: String) {
    // .. Screen level content goes here
    val scrollState = rememberTransformingLazyColumnState()

    val padding = rememberResponsiveColumnPadding(
        first = ColumnItemType.BodyText
    )

    ScreenScaffold(
        scrollState = scrollState,
        contentPadding = padding
    ) { scaffoldPaddingValues ->
        // Screen content goes here
        // ...

اگر از یک HorizontalPager به همراه HorizontalPagerIndicator استفاده می‌کنید، می‌توانید به HorizontalPagerScaffold مهاجرت کنید. HorizontalPagerScaffold درون یک AppScaffold قرار می‌گیرد. AppScaffold و HorizontalPagerScaffold ساختار یک Pager را طرح‌بندی کرده و انتقال‌های کامپوننت‌های HorizontalPageIndicator و TimeText را هماهنگ می‌کنند.

HorizontalPagerScaffold به طور پیش‌فرض HorizontalPageIndicator را در مرکز صفحه نمایش می‌دهد و نمایش و پنهان کردن TimeText و HorizontalPageIndicator را بسته به اینکه آیا Pager در حال صفحه‌بندی است یا خیر، هماهنگ می‌کند. این موضوع توسط PagerState تعیین می‌شود.

همچنین یک کامپوننت جدید AnimatedPage وجود دارد که یک صفحه را درون یک Pager با استفاده از مقیاس‌بندی و افکت Scrim بر اساس موقعیت آن، متحرک‌سازی می‌کند.

AppScaffold {
    val pagerState = rememberPagerState(pageCount = { 10 })
    val columnState = rememberTransformingLazyColumnState()
    val contentPadding = rememberResponsiveColumnPadding(
        first = ColumnItemType.ListHeader,
        last = ColumnItemType.BodyText,
    )
    HorizontalPagerScaffold(pagerState = pagerState) {
        HorizontalPager(
            state = pagerState,
        ) { page ->
            AnimatedPage(pageIndex = page, pagerState = pagerState) {
                ScreenScaffold(
                    scrollState = columnState,
                    contentPadding = contentPadding
                ) { contentPadding ->
                    TransformingLazyColumn(
                        state = columnState,
                        contentPadding = contentPadding
                    ) {
                        item {
                            ListHeader(
                                modifier = Modifier.fillMaxWidth()
                            ) {
                                Text(text = "Pager sample")
                            }
                        }
                        item {
                            if (page == 0) {
                                Text(text = "Page #$page. Swipe right")
                            }
                            else{
                                Text(text = "Page #$page. Swipe left and right")
                            }
                        }
                    }
                }

            }
        }
    }
}

در نهایت، 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 {
        
   }
}

جایگذار

برخی تغییرات API بین M2.5 و M3 وجود دارد. Placeholder.PlaceholderDefaults اکنون دو اصلاح‌کننده ارائه می‌دهد:

  • Modifier.placeholder که به جای محتوایی که هنوز بارگذاری نشده است، ترسیم می‌شود.
  • یک افکت درخشش نگهدارنده مکان Modifier.placeholderShimmer که یک افکت درخشش نگهدارنده مکان را فراهم می‌کند که در یک حلقه انیمیشن اجرا می‌شود و منتظر بارگذاری داده‌ها می‌ماند.

برای تغییرات بیشتر در کامپوننت Placeholder به جدول زیر مراجعه کنید.

متر مربع

ام۳

PlaceholderState.startPlaceholderAnimation

حذف شده است

PlaceholderState.placeholderProgression

حذف شده است

PlaceholderState.isShowContent

به !PlaceholderState.isVisible تغییر نام داده است

PlaceholderState.isWipeOff

حذف شده است

PlaceholderDefaults.painterWithPlaceholderOverlayBackgroundBrush

برداشته شده است

PlaceholderDefaults.placeholderBackgroundBrush

حذف شده است

PlaceholderDefaults.placeholderChipColors

حذف شده است

میزبان ناوبری قابل حذف با کشیدن انگشت

SwipeDismissableNavHost بخشی از wear.compose.navigation است. وقتی این کامپوننت با M3 استفاده می‌شود، M3 MaterialTheme مقادیر LocalSwipeToDismissBackgroundScrimColor و LocalSwipeToDismissContentScrimColor را به‌روزرسانی می‌کند.

تبدیل ستون تنبل

TransformingLazyColumn بخشی از wear.compose.lazy.foundation است و پشتیبانی از مقیاس‌بندی و انیمیشن‌های تغییر شکل روی آیتم‌های لیست را در حین پیمایش اضافه می‌کند و تجربه کاربری را بهبود می‌بخشد.

مشابه ScalingLazyColumn ، این متد rememberTransformingLazyColumnState() را برای ایجاد یک TransformingLazyColumnState که در بین ترکیب‌ها به خاطر سپرده می‌شود، فراهم می‌کند.

برای افزودن انیمیشن‌های تغییر مقیاس و شکل‌دهی، موارد زیر را به هر مورد لیست اضافه کنید:

  • Modifier.transformedHeight که به شما امکان می‌دهد ارتفاع تبدیل‌شده‌ی آیتم‌ها را با استفاده از TransformationSpec محاسبه کنید، می‌توانید rememberTransformationSpec() استفاده کنید، مگر اینکه به سفارشی‌سازی بیشتری نیاز داشته باشید.
  • یک SurfaceTransformation

val columnState = rememberTransformingLazyColumnState()
val contentPadding = rememberResponsiveColumnPadding(
    first = ColumnItemType.ListHeader,
    last = ColumnItemType.Button,
)
val transformationSpec = rememberTransformationSpec()
ScreenScaffold(
    scrollState = columnState,
    contentPadding = contentPadding
) { contentPadding ->
    TransformingLazyColumn(
        state = columnState,
        contentPadding = contentPadding
    ) {
        item {
            ListHeader(
                modifier = Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),
                transformation = SurfaceTransformation(transformationSpec)
            ) {
                Text(text = "Header")
            }
        }
        // ... other items
        item {
            Button(
                modifier = Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),
                transformation = SurfaceTransformation(transformationSpec),
                onClick = { /* ... */ },
                icon = {
                    Icon(
                        imageVector = Icons.Default.Build,
                        contentDescription = "build",
                    )
                },
            ) {
                Text(
                    text = "Build",
                    maxLines = 1,
                    overflow = TextOverflow.Ellipsis,
                )
            }
        }
    }
}

برای کسب اطلاعات بیشتر در مورد مهاجرت از M2.5 به M3 در Compose، به منابع اضافی زیر مراجعه کنید.

نمونه‌ها

مرجع API و کد منبع

طراحی