نقل البيانات من Material 2.5 إلى Material 3 في تطبيق Compose لنظام التشغيل Wear OS

Material 3 Expressive هو الجيل التالي من أسلوب Material Design. ويشمل ذلك ميزات تخصيص وعناصر وألوان ديناميكية معدَّلة.

يركز هذا الدليل على نقل البيانات من مكتبة Wear Compose Material 2.5 (androidx.wear.compose) في Jetpack إلى مكتبة Wear Compose Material 3 (androidx.wear.compose.material3) في Jetpack لتطبيقات.

الأساليب

لنقل رمز تطبيقك من الإصدار 2.5 من Material Design إلى الإصدار 3، اتّبِع النهج نفسه الموضّح في إرشادات نقل بيانات هاتفك إلى Compose Material، وعلى وجه الخصوص:

التبعيات

تتوفّر حزمة وإصدار منفصلان لإصدار M3 مقارنةً بإصدار M2.5:

M2.5

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

التصميم 3

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

يمكنك الاطّلاع على أحدث إصدارات Material 3 على صفحة إصدارات Wear Compose Material 3.

يقدّم الإصدار 1.5.0-beta01 من مكتبة Wear Compose Foundation بعض المكوّنات الجديدة المصمّمة للعمل مع مكوّنات Material 3. وبالمثل، تم تعديل الصورة المتحركة لرمز SwipeDismissableNavHost من مكتبة التنقل في ميزة "الكتابة الصوتية" في Wear OS عند تشغيلها على الإصدار 6 من Wear OS (المستوى 36 لواجهة برمجة التطبيقات) أو إصدار أحدث. عند التحديث إلى الإصدار 3 من Wear Compose Material، ننصحك بالتحديث أيضًا إلى الإصدار 3 من مكتبتَي Wear Compose Foundation وNavigation:

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

التصميم

في كلّ من الإصدارَين M2.5 وM3، يتمّ تسمية العنصر المكوّن للموضوع باسم MaterialTheme، ولكن تختلف حِزم الاستيراد والمَعلمات. في الإصدار 3 من "إحصاءات YouTube"، تمت إعادة تسمية المَعلمة Colors ليصبح اسمها ColorScheme، وتمّ إدخال المَعلمة MotionScheme لتنفيذ عمليات النقل.

M2.5

import androidx.wear.compose.material.MaterialTheme

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

التصميم 3

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
)

التصميم 3

import androidx.wear.compose.material3.ColorScheme

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

يوضّح الجدول التالي الاختلافات الرئيسية بين M2.5 وM3:

M2.5

التصميم 3

Color

تمّت إعادة تسميته إلى ColorScheme

13 لونًا

28 لونًا

لا ينطبق

مظهر جديد بألوان ديناميكية

لا ينطبق

ألوان ثانوية جديدة لمزيد من التعبير

مظهر الألوان الديناميكية

من الميزات الجديدة في الإصدار 3 هي مظهر الألوان الديناميكي. إذا غيّر المستخدمون ألوان خلفية شاشة الساعة، ستتغيّر الألوان في واجهة المستخدم لتتطابق مع الألوان الجديدة.

استخدِم الدالة 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
)

التصميم 3

import androidx.wear.compose.material3.Typography

val Typography = Typography(
   // M3 TextStyle parameters
)

الخطوط المرنة

تتيح خطوط Flex للمصمّمين تحديد عرض النوع وتأثيره لأحجام معيّنة.

أنماط النصوص

تتوفّر TextStyles التالية في M3. يتم استخدام هذه العناصر تلقائيًا من خلال مكونات 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. تتوفّر أحجام الأشكال التالية:

  • صغير جدًا
  • صغير
  • متوسط
  • كبير
  • كبير جدًا

في ميزة "الإنشاء"، ينطبق ذلك على فئة Shapes في M2 وفئة Shapes في M3:

M2.5

import androidx.wear.compose.material.Shapes

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

التصميم 3

import androidx.wear.compose.material3.Shapes

val Shapes = Shapes(
   // M3 Shapes parameters
)

استخدِم تعيين مَعلمات الأشكال من نقل البيانات من المادة 2 إلى المادة 3 في الإنشاء كنقطة بداية.

تغيير الشكل

توفّر ميزة M3 ميزة "تغيير الشكل": يمكن الآن تغيير أشكال العناصر استجابةً للتفاعلات.

يتوفّر سلوك "تغيير الشكل" كخيار في عدد من buttons الدوّارة، كما هو موضّح أدناه:

الأزرار

دالة تحويل الشكل

IconButton

تؤدي دالة IconButtonDefaults.animatedShape() إلى إضافة تأثيرات متحركة إلى زر الرمز عند الضغط عليه.

IconToggleButton

تضيف IconToggleButtonDefaults.animatedShape() صورة متحركة إلى زر التبديل عند الضغط عليه.

تضيف IconToggleButtonDefaults.variantAnimatedShapes() تأثيرًا متحركًا إلى زر التبديل للرمز عند الضغط عليه ووضع علامة في المربّع أو إزالتها.

TextButton

تؤدي دالة TextButtonDefaults.animatedShape() إلى إضافة تأثيرات متحركة إلى زر النص عند الضغط عليه.

TextToggleButton

تُنشئ TextToggleButtonDefaults.animatedShapes() تأثيرًا متحركًا لزر التبديل النصي عند الضغط عليه، بينما تُنشئ TextToggleButtonDefaults.variantAnimatedShapes() تأثيرًا متحركًا لزر التبديل النصي عند الضغط عليه ووضع علامة في المربّع أو إزالتها.

المكونات والتنسيق

تتوفّر معظم المكوّنات والتنسيقات من الإصدار 2.5 في الإصدار 3. ومع ذلك، لم تكن بعض مكونات 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

لا يتوفّر عنصر مشابه في Material 3، لذا عليك نقل البيانات إلى 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

تمّت إزالتها لأنّها لم يتم استخدامها من قِبل Text أو Icon في المادة 3

androidx.wear.compose.material.PositionIndicator

androidx.wear.compose.material3.ScrollIndicator

androidx.wear.compose.material.RadioButton

لا يتوفّر عنصر مشابه في Material 3، لذا عليك نقل البيانات إلى 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

لا يتوفّر عنصر مشابه في Material 3، لذا عليك نقل البيانات إلى androidx.wear.compose.material3.SplitCheckboxButton أو androidx.wear.compose.material3.SplitSwitchButton أو androidx.wear.compose.material3.SplitRadioButton

androidx.wear.compose.material.Switch

لا يتوفّر عنصر مشابه في Material 3، لذا عليك نقل البيانات إلى 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

المكوّن المكافئ للمواد 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

جديد

أخيرًا، إليك قائمة ببعض المكوّنات ذات الصلة من الإصدار 1.5.0-beta01 من مكتبة Wear Compose Foundation:

الإصدار التجريبي 1.5.0 من Wear Compose Foundation

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

androidx.wear.foundation.lazy.TransformingLazyColumn

يمكن استخدامه بدلاً من ScalingLazyColumn لإضافة تأثيرات التحويل أثناء الانتقال إلى كل عنصر.

الأزرار

تختلف الأزرار في M3 عن M2.5. تم استبدال شريحة M2.5 بأحد buttons. يقدّم تنفيذ Button قيمًا تلقائية لسمة Text maxLines وtextAlign. يمكن إلغاء هذه القيم التلقائية في عنصر Text.

M2.5

import androidx.wear.compose.material.Chip

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

التصميم 3

import androidx.wear.compose.material3.Button

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

تتضمّن M3 أيضًا صيغ أزرار جديدة. يمكنك الاطّلاع عليها في نظرة عامة على مرجع واجهة برمجة التطبيقات لإنشاء Material 3.

يقدّم الإصدار 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
   }
}

سقالة

يختلف السقالة في M3 عن M2.5. في الإصدار M3، حلّت العناصر القابلة للتجميع AppScaffold وScreenScaffold الجديدة محلّ Scaffold. يحدِّد المكوّنان AppScaffold و ScreenScaffold بنية الشاشة وينسقان عمليات النقل في المكوّنين ScrollIndicator وTimeText.

يسمح AppScaffold بظهور عناصر الشاشة الثابتة، مثل TimeText، أثناء عمليات الانتقال داخل التطبيق، مثل التمرير سريعًا لإغلاق الشاشة. ​​يوفر هذا العنصر مساحة لمحتوى التطبيق الرئيسي، والذي سيتم توفيره عادةً من خلال عنصر تنقّل مثل SwipeDismissableNavHost.

يمكنك تحديد AppScaffold واحد للنشاط واستخدام ScreenScaffold لكل شاشة.

M2.5

import androidx.wear.compose.material.Scaffold

Scaffold {...}

التصميم 3

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

إذا كنت تستخدم HorizontalPager مع HorizontalPagerIndicator، يمكنك نقل البيانات إلى 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

التصميم 3

PlaceholderState.startPlaceholderAnimation

تمّت إزالتها

PlaceholderState.placeholderProgression

تمّت إزالتها

PlaceholderState.isShowContent

تمت إعادة تسميته إلى !PlaceholderState.isVisible

PlaceholderState.isWipeOff

تمّت إزالتها

PlaceholderDefaults.painterWithPlaceholderOverlayBackgroundBrush

تمّت إزالته

PlaceholderDefaults.placeholderBackgroundBrush

تمّت إزالتها

PlaceholderDefaults.placeholderChipColors

تمّت إزالتها

SwipeDismissableNavHost

SwipeDismissableNavHost هي جزء من wear.compose.navigation. عند استخدام هذا المكوّن مع M3، يعدّل MaterialTheme في M3 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")
                    }
                }
            }
        }
    }

روابط مفيدة

لمزيد من المعلومات حول نقل البيانات من الإصدار 2.5 من "الإصدار التجريبي" إلى الإصدار 3 من "الإصدار التجريبي" في Compose، يُرجى الرجوع إلى المراجع التالية الإضافية.

نماذج

عيّنات Wear OS في فرع Material3 على GitHub

الدرس التطبيقي حول تطبيق Compose لنظام التشغيل Wear OS

مرجع واجهة برمجة التطبيقات ورمز المصدر

التصميم