واجهة مستخدم "الإنشاء"

المكوّنات الأساسية لواجهة مستخدم Compose اللازمة للتفاعل مع الجهاز، بما في ذلك التنسيق والرسم والإدخال
آخر تحديث الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
‫7 أكتوبر 2026 1.12.1 - 1.13.0-beta01 -

البنية

‫Compose هي مجموعة من 7 أرقام تعريف لمجموعات Maven ضمن androidx. تحتوي كل مجموعة على مجموعة فرعية مستهدَفة من الوظائف، ولكل منها مجموعة خاصة من ملاحظات الإصدار.

يوضّح هذا الجدول المجموعات ويتضمّن روابط لكل مجموعة من ملاحظات الإصدار.

مجموعةالوصف
compose.animationإنشاء رسوم متحركة في تطبيقات Jetpack Compose لإثراء تجربة المستخدم
compose.compilerيمكنك تحويل دوال ‎ @Composable وإتاحة عمليات التحسين باستخدام إضافة لبرنامج التجميع في Kotlin.
compose.foundationيمكنك كتابة تطبيقات Jetpack Compose باستخدام وحدات أساسية جاهزة للاستخدام وتوسيع نطاق الأساس لإنشاء عناصر نظام التصميم الخاص بك.
compose.materialإنشاء واجهات مستخدم Jetpack Compose باستخدام "مكوّنات التصميم المتعدد الأبعاد" الجاهزة للاستخدام هذه هي نقطة الدخول الأعلى مستوى في Compose، وهي مصمَّمة لتوفير مكوّنات تتطابق مع تلك الموضّحة في www.material.io.
compose.material3يمكنك إنشاء واجهات مستخدم Jetpack Compose باستخدام مكوّنات التصميم المتعدد الأبعاد 3، وهي أحدث إصدار من التصميم المتعدد الأبعاد. يتضمّن الإصدار 3 من Material تصميمًا ومكوّنات محدّثة وميزات تخصيص Material You، مثل الألوان الديناميكية، وهو مصمّم ليكون متوافقًا مع أسلوب العرض الجديد وواجهة مستخدم النظام في Android 12.
compose.runtimeهي اللبنات الأساسية لنموذج برمجة Compose وإدارة الحالة، ووقت التشغيل الأساسي الذي يستهدفه المكوّن الإضافي لبرنامج تجميع Compose.
compose.uiالمكوّنات الأساسية لواجهة مستخدم Compose اللازمة للتفاعل مع الجهاز، بما في ذلك التنسيق والرسم والإدخال

تحديد الاعتماديات

لإضافة اعتمادية على Compose، يجب تضمين مستودع Google Maven في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.

أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:

Groovy

dependencies {
    implementation "androidx.compose.ui:ui:1.12.1"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.12.1")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

لمزيد من المعلومات حول الاعتماديات، يُرجى الاطّلاع على إضافة اعتماديات الإصدار.

الملاحظات

تساعدنا ملاحظاتك في تحسين أداء Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء مشكلة جديدة

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات Issue Tracker.

الإصدار 1.13

الإصدار ‎1.13.0-beta01

‫7 أكتوبر 2026

تم طرح androidx.compose.ui:ui-*:1.13.0-beta01. يتضمّن الإصدار 1.13.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة Modifier.interactionBarrier() من مساحة واجهة برمجة التطبيقات العامة للإصدار 1.13. (I47974، b/564575045، b/347038246)
  • تم تعديل واجهات برمجة التطبيقات PolygonShape: تم نقل CornerRounding إلى المستوى الأعلى باستخدام مصنّعي dp() وfraction()، وتم استبدال الإضافتين transformed() وscaledToFit() بالدالتين PolygonShape.transform(PolygonShapeTransformScope.() -> Unit) وPolygonShape.copy() القابلتين للتعديل في المكان نفسه. (If5970)
  • أصبحت onValueChange الآن مَعلمة مطلوبة في Slider وVerticalSlider وRangeSlider. تمت إزالة واجهات برمجة التطبيقات المتوقّفة نهائيًا والتي كانت مخفية سابقًا في جميع مكوّنات Slider وRangeSlider، بما في ذلك تنفيذ DraggableState على SliderState وعمليات التحميل الزائد القديمة Saver. تمت إزالة "isVertical" من SliderState. تم إيقاف التحميل الزائد SliderDefaults.Thumb الذي يستخدِم SliderState واستخدام التحميل الزائد isVertical بدلاً منه. (I3fdc1)
  • تم استبدال الفئة Posture في MediaQuery بالفئة WindowPosture التي تعرض WindowFolds فعلية (FoldState وFoldOrientation). تمت إضافة السمتَين isTabletop وisFlat إلى WindowPosture، وتمت إزالة وضع "الكتاب" الصريح. (Id9e8e)
  • تستهدف المكتبات الآن الإصدار 2.2 من Kotlin وتتطلّب الإصدار 2.2 من kotlinc (I82396، b/498369605)
  • تمت إضافة @FloatRange إلى BlurStop.fraction، وتغيير القيمة التلقائية fallOffRadius في BlurRadiusSpec.radialGradient إلى Dp.Unspecified، وتغيير اسم المَعلمة radius في Modifier.blur إلى blurRadiusSpec، وتغيير اسم BlurScope.radius إلى blurRadiusSpec. (I91dbc، b/556335791)

إصلاح الأخطاء

  • تم إصلاح خطأ IllegalArgumentException (لم يتم العثور على LayoutNode في RectList) عند طلب خطوط المحاذاة أثناء القياس. (Icec9e، b/549552303)
  • سيشارك VectorPainter الآن مراجع الرسومات الداخلية (ImageBitmap) عند عرض ImageVector نفسه في عدة عناصر قابلة للإنشاء. يؤدي ذلك إلى تقليل عمليات تحميل النسيج المتكرّرة واستخدام الذاكرة، ما يحسّن الأداء في سيناريوهات مثل القوائم التي تستخدم رموزًا متكرّرة. يمكن إيقاف هذا التحسين من خلال ComposeUiFlags.isVectorDrawCacheSharingEnabled. (I91b41)
  • تم إصلاح الخطأ الذي لم يؤدِّ فيه AndroidTextPaint.setTextMotion إلى محو LINEAR_TEXT_FLAG عند الانتقال إلى FontHinting أو None linearity. (I8c19c)
  • تم إصلاح مشكلة كانت تؤدي إلى انتقال تركيز استكشاف اللمس في TalkBack إلى AndroidView مضمّن (مثل WebView) مغطّى بمحتوى واجهة مستخدم Compose. (I11372، b/561099702)
  • تم إصلاح مشكلة كانت تؤدي إلى تعطُّل عملية استدعاء Color.toColorLong() أو ضبط لون مركّب على Color.Unspecified في Paint مع ظهور الخطأ IllegalArgumentException. (Ia365b، b/557521315)
  • تم تعديل الاعتمادية androidx.lifecycle:lifecycle-runtime إلى الإصدار 2.10.0. هذا الإصدار مطلوب لتشغيل عمليات التحقّق من أخطاء lint في وقت تشغيل حزمة Lifecycle مع الإصدار 9.5.0-alpha04 أو إصدار أحدث من "مكوّن Android الإضافي لبرنامج Gradle". (I99bfd، b/556807521)
  • تم إصلاح استخراج المَعلمات في الأدوات الخاصة بالعناصر القابلة للإنشاء التي تحتوي على أكثر من 10 مَعلمات. (Ib167d)
  • تم إصلاح المشكلة التي كانت تتسبّب في عدم محو عُقد التنسيق غير النشطة من قائمة انتظار التنسيق، ما يؤدي إلى حدوث عُطل أثناء إعادة القياس. (Ie64a5)

الإصدار ‎1.13.0-alpha03

‫9 سبتمبر 2026

تم طرح androidx.compose.ui:ui-*:1.13.0-alpha03. يتضمّن الإصدار 1.13.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف عمليات التحميل الزائد لحقل النص Material 2 التي تقبل مَعلمات value, onValueChange نهائيًا. يُرجى الانتقال إلى التحميل الزائد الذي يستخدم TextFieldState لرفع حالته. (I6b841، b/556234973)
  • أضِف واجهة برمجة تطبيقات شائعة لإيقاف WindowInsetsRulers على مستوى العالم قبل إنشاء أول جذر Compose. إيقاف السمة ComposeView.disableWindowInsetsRulers() المخصّصة لنظام التشغيل Android فقط واستخدام السمة الشائعة WindowInsetsRulers.disable() (Iadc8f)
  • تضيف هذه الحزمة وظائف الإضافة PolygonShape.transformed وPolygonShape.scaledToFit في Compose Foundation لتحويل أشكال المضلّعات وتعديلها. (I3f327)
  • أعاد المعدِّل تسمية الدالة "LineHeight.Trim.isTrimLastLineBottom()" إلى "LineHeight.Trim.trimsLastLineBottom" و"LineHeight.Trim.isTrimFirstLineTop" إلى "LineHeight.Trim.trimsFirstLineTop" (I02211)
  • تمت إضافة boundsAssertionTolerance إلى PlatformTestConfig ضمن ComposeUiTestConfig.platform للسماح للاختبارات بضبط هامش التفاوت التلقائي لتأكيد الحدود على مستوى البيئة/القاعدة. (I7819d، b/545673912)
  • تم إيقاف BasicTextField عمليات التحميل الزائد التي تقبل مَعلمات value, onValueChange نهائيًا. يُرجى نقل البيانات إلى الدالة المحمّلة بشكل زائد BasicTextField التي تستخدم TextFieldState لرفع حالتها. (I636bf، b/552879150)
  • بالتزامن مع إيقاف BasicTextField(value, onValueChange) نهائيًا، تم أيضًا إيقاف VisualTransformation نهائيًا لأنّه لا يتم عرضه إلا من خلال إصدار TextField. يجب نقل عمليات التحويل الحالية إلى OutputTransformation. (I636bf، b/552879150)
  • تمت إضافة LineHeightStyle.Mode.PerLine لاحتساب ارتفاع السطر بشكل مستقل لكل سطر، ما يتيح استخدام أحجام خطوط مختلفة في الفقرة نفسها بدون تداخل. (I41738)
  • تم إيقاف توفير LazyLayoutCacheWindow وLazyListPrefetchStrategy من خلال LazyListState نهائيًا، وتم استبدالهما بتوفير LazyLayoutCacheWindow للدالة المركّبة. (I71f19)
  • تمت إضافة واجهة برمجة التطبيقات Modifier.blur { ... } لدعم التمويهات التدريجية (مثل التدرجات اللونية والمظلّلات المخصّصة) (Ie6595، b/481685669)
  • تمت إضافة Modifier.interactionBarrier() لحظر التفاعلات مع اللمس والتركيز وإمكانية الوصول. (I7c1b7، b/347038246)
  • تمت إضافة السمة الموسّعة isCrossWindowBlurEnabled إلى WindowInfo للسماح للمطوّرين بالبحث عن حالة التمويه على مستوى جميع النوافذ ومراقبتها على Android. (If38e2، b/538405295)
  • تمت إضافة LocalWindow CompositionLocal للسماح باسترداد عنصر android.view.Window الحالي، ما يسهّل التحكّم في واجهات برمجة التطبيقات على مستوى النافذة من داخل العناصر القابلة للإنشاء. (I4d4ff، b/221889664)

إصلاح الأخطاء

  • مفعَّل isMinimalistLocalsEnabled تلقائيًا. (Ibb4eb، b/523295932)
  • تم تفعيل ميزة تحسين ارتفاع السطر الواحد تلقائيًا. وقد يؤدي ذلك إلى اختلاف بسيط في بعض مقاييس النص، مثل الارتفاع أو مسار التحديد (I5575a).
  • تم تعديل compileSdk لمكتبات Compose إلى 37.1. سيتطلّب ذلك تعديل compileSdk بشكل متعدٍّ لجميع التطبيقات والمكتبات التي تستخدم Compose. (I05b0f)
  • تم إصلاح مشكلة عدم وضع علامة على مساحات WindowInsetsRulers أداة IME الداخلية على أنّها متحركة أثناء استخدام إيماءة إظهار شاشة الرجوع، وتم إصلاح مشكلة عدم تعديل imePadding عند تبديل التركيز بين حقول النص. (Id4562، b/537386261، b/539686000)
  • تم إصلاح مشكلة تجاهل إيماءات الضغط على لوحة التتبُّع عند استضافة ComposeView داخل ViewGroup Android العادي. (I80f79)

المساهمة الخارجية

  • تم إصلاح تسريب النشاط عند فصل ComposeView وإعادة ربطه ضمن إطار واحد، مثلاً عند إعادة ترتيبه باستخدام removeView وaddView. (Ib5129، b/547675867)

الإصدار ‎1.13.0-alpha02

‫26 أغسطس 2026

تم طرح androidx.compose.ui:ui-*:1.13.0-alpha02. يتضمّن الإصدار 1.13.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة السمة الدلالية الجديدة BackgroundColor إلى Modifier.background (I7eec3، b/518049030)
  • يمكنك الآن إنشاء Vertices من مصفوفات الأعداد الأولية الحالية. (Ifaba8، b/496412761)
  • سيشارك VectorPainter الآن مراجع الرسومات الداخلية (ImageBitmap) عند عرض ImageVector نفسه في عدة عناصر قابلة للإنشاء. يؤدي ذلك إلى تقليل عمليات تحميل النسيج المتكرّرة واستخدام الذاكرة، ما يحسّن الأداء في سيناريوهات مثل القوائم التي تستخدم رموزًا متكرّرة. يمكن إيقاف هذا التحسين من خلال ComposeUiFlags.isVectorDrawCacheSharingEnabled. (I35639، b/331283180)
  • إضافة أداة مساعدة requestFocusForChildInLocalBounds (Ib1a48)

الإصدار ‎1.13.0-alpha01

‫12 أغسطس 2026

تم طرح androidx.compose.ui:ui-*:1.13.0-alpha01. يتضمّن الإصدار 1.13.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تضيف علامة الميزة isVelocityTrackerMinSampleSizeFixEnabled (Ic9b51، b/533444810، b/533775739، b/523705159)
  • تمت إزالة فئة التعليقات التوضيحية القديمة ExperimentalVelocityTrackerApi. (I6f9c6، b/483449576)
  • إزالة العلامة isClearNestedScrollCoroutineScopeFixEnabled (Iedfd7، b/506963276)
  • يحفظ TextFieldState معلومات نمط النص ويستعيدها الآن. أصبحت AnnotatedString.Annotation.Saver متاحة للجميع الآن للسماح بحفظ واستعادة عناصر AnnotatedString.Annotation. (I8b533، b/135556699)
  • تمت إضافة TestFailurePolicy وTestFailureHandler في ComposeTestConfig لدعم معالجات أحداث الأعطال المخصّصة وسياق العنصر المتأثّر بالعطل في اختبارات واجهة مستخدم Compose. (Ib1a85 وb/414802953 وb/291106656 وb/430644575)
  • تمت إضافة SemanticsProperties.alpha لعرض قيم ألفا المركّبة التي تم حلّها للعناصر الرئيسية والفرعية لعُقد التصميم بغرض الاختبار. (Ifddb6، b/524035059)
  • تم إيقاف التحميل الزائد createComposeRule وcreateAndroidComposeRule وcreateEmptyComposeRule نهائيًا في حزمة الإصدار الثاني من ui-test-junit4 التي تتضمّن مَعلمات فردية. استخدِم عمليات التحميل الزائد التي تقبل ComposeUiTestConfig أو عمليات التحميل الزائد بدون مَعلمات التي تستخدم قيمة تلقائية ComposeUiTestConfig. يُرجى العِلم أنّ قيمة ComposeUiTestConfig التلقائية تضبط وضع الإدخال الأولي على InputMode.Touch في بداية كل اختبار. قد يؤدي ذلك إلى تعذُّر إجراء الاختبارات الحالية التي تتطلّب وضع لوحة المفاتيح (InputMode.Keyboard). لإصلاح الاختبارات المتأثّرة، عليك اجتياز ComposeUiTestConfig(inputMode = InputMode.Keyboard) بشكلٍ صريح وإزالة أي منطق إعداد يدوي لأوضاع الإدخال. بدلاً من ذلك، يمكنك ضبط AndroidComposeUiTestFlags.isInputModeSetForDeviceTests = false لإيقاف ضبط وضع الإدخال التلقائي مؤقتًا في بداية كل اختبار والاحتفاظ بالسلوك القديم أثناء نقل اختباراتك. ستتم إزالة هذه العلامة في المستقبل، لذا إذا لم تنجح سوى مجموعة صغيرة من الاختبارات، ننصحك بحلّ المشاكل مباشرةً عن طريق تغيير إعداداتها بدلاً من ذلك. (Idfb86، b/504195741)
  • تستخدم الآن طلبات البيانات التي لا تتضمّن وسيطات إلى createComposeRule وcreateAndroidComposeRule (مثل createComposeRule() أو createAndroidComposeRule<MyActivity>()) قيمة ComposeUiTestConfig تلقائية، ما يضبط وضع الإدخال الأوّلي على InputMode.Touch في بداية كل اختبار، ويضمن أن يكون الجهاز في حالة نظيفة ويمنع تسرُّب تغييرات وضع الإدخال السابقة إلى الاختبارات. ومع ذلك، قد يؤدي وضع اللمس التلقائي الجديد هذا إلى تعذُّر اجتياز الاختبارات الحالية التي تتوقّع وضع لوحة المفاتيح (InputMode.Keyboard). لإصلاح الاختبارات المتأثّرة، عليك اجتياز ComposeUiTestConfig(inputMode = InputMode.Keyboard) بشكلٍ صريح وإزالة أي منطق إعداد يدوي لأوضاع الإدخال. بدلاً من ذلك، يمكنك ضبط AndroidComposeUiTestFlags.isInputModeSetForDeviceTests = false لإيقاف ضبط وضع الإدخال التلقائي مؤقتًا في بداية كل اختبار والاحتفاظ بالسلوك القديم أثناء نقل اختباراتك. ستتم إزالة هذه العلامة في المستقبل، لذا إذا لم تنجح إلا بعض الاختبارات، ننصحك بحلّ المشاكل مباشرةً عن طريق تغيير إعداداتها بدلاً من ذلك. (Idc4dd، b/267253920، b/504195741)
  • تمت إضافة تعليقات توضيحية إلى طرق أساسية فارغة قابلة للتجاوز في Compose باستخدام @EmptySuper للإشارة إلى أنّه يجب ألا تستدعي عمليات التنفيذ المتجاوزة super. (Id407b)
  • أصبحت ExposedDropdownMenu الآن دالة إضافة في ExposedDropdownMenuBoxScope بدلاً من أن تكون عضوًا. قد تحتاج إلى تعديل الرمز باستخدام عملية استيراد جديدة. (Ie8a65، b/356452026)
  • تمت إضافة السمات blurBehindRadius وbackgroundBlurRadius وscrimAlpha وwindowShape إلى DialogProperties، بالإضافة إلى blurBehindRadius وscrimAlpha إلى PopupProperties. يمكن للمطوّرين الآن ضبط تمويه الخلفية وتمويه النافذة وعتامة الشاشة مباشرةً في مربّعات الحوار والنوافذ المنبثقة. يسمح الإعداد windowShape بقصّ تمويهات خلفية مربّع الحوار إلى زوايا مستديرة. (I5d437)
  • تمت إزالة علامة الميزة - تحتفظ أزرار "إنشاء" الآن بتركيز تسهيل الاستخدام بشكل صحيح ولا تومض عندما تكون ميزة "الاستكشاف باللمس" مفعّلة، وذلك لأنّه يتم وضع علامة على أحداث التمرير على أنّها معالَجة بشكل صحيح. (Ib1c80)
  • تمت إضافة عمليات تحميل زائدة للدمج إلى FontVariation.Settings لدمج مجموعات الإعدادات الأخرى أو تجاهل الإعدادات المضمّنة. (I6340c)
  • تم عرض variationSettings في واجهة "الخط"، مع ضبط القيمة التلقائية على FontVariation.Empty الجديدة. تم تحسين أداة إنشاء FontVariation.Settings vararg لاستخدام asList() لتجنُّب عمليات تخصيص نسخ المصفوفات. (I9c22f)
  • تم تعديل السمة NestedScrollDispatcher.coroutineScope لعرض CoroutineScope تم إلغاؤه بأمان عند عدم ربطه أو فصله. (I9b112، b/535290281)
  • تم إيقاف التحميل الزائد runComposeUiTest وrunAndroidComposeUiTest وAndroidComposeUiTestEnvironment نهائيًا والذي يقبل المَعلمات الفردية effectContext وrunTestContext وtestTimeout. استخدِم عمليات التحميل الزائد التي تقبل ComposeUiTestConfig أو عمليات التحميل الزائد بدون مَعلمات التي تستخدم قيمة تلقائية ComposeUiTestConfig. يُرجى العِلم أنّ قيمة ComposeUiTestConfig التلقائية تضبط وضع الإدخال الأولي على InputMode.Touch في بداية كل اختبار. قد يؤدي ذلك إلى تعذُّر إجراء الاختبارات الحالية التي تتطلّب وضع لوحة المفاتيح (InputMode.Keyboard). لإصلاح الاختبارات المتأثّرة، عليك اجتياز ComposeUiTestConfig(inputMode = InputMode.Keyboard) بشكلٍ صريح وإزالة أي منطق إعداد يدوي لأوضاع الإدخال. بدلاً من ذلك، يمكنك ضبط AndroidComposeUiTestFlags.isInputModeSetForDeviceTests = false لإيقاف ضبط وضع الإدخال التلقائي مؤقتًا في بداية كل اختبار والاحتفاظ بالسلوك القديم أثناء نقل اختباراتك. ستتم إزالة هذه العلامة في المستقبل، لذا إذا لم تنجح سوى مجموعة صغيرة من الاختبارات، ننصحك بحلّ المشاكل مباشرةً عن طريق تغيير إعداداتها بدلاً من ذلك. (Ia6d55، b/504195741)
  • تستخدم الآن طلبات البيانات من runComposeUiTest وrunAndroidComposeUiTest وAndroidComposeUiTestEnvironment التي تتضمّن تعبير lambda لاحقًا فقط قيمة تلقائية ComposeUiTestConfig، ما يضبط وضع الإدخال الأوّلي على InputMode.Touch في بداية كل اختبار، ويضمن أن يكون الجهاز في حالة سليمة ويمنع تسرُّب تغييرات وضع الإدخال السابقة إلى الاختبارات. ومع ذلك، قد يؤدي وضع اللمس التلقائي الجديد هذا إلى تعذُّر اجتياز الاختبارات الحالية التي تتوقّع وضع لوحة المفاتيح (InputMode.Keyboard). لإصلاح الاختبارات المتأثّرة، عليك اجتياز ComposeUiTestConfig(inputMode = InputMode.Keyboard) بشكلٍ صريح وإزالة أي منطق إعداد يدوي لأوضاع الإدخال. بدلاً من ذلك، يمكنك ضبط AndroidComposeUiTestFlags.isInputModeSetForDeviceTests = false لإيقاف ضبط وضع الإدخال التلقائي مؤقتًا في بداية كل اختبار والاحتفاظ بالسلوك القديم أثناء نقل اختباراتك. ستتم إزالة هذه العلامة في المستقبل، لذا إذا لم تنجح سوى مجموعة صغيرة من الاختبارات، ننصحك بحلّ المشاكل مباشرةً عن طريق تغيير إعداداتها بدلاً من ذلك. (I8c85d، b/504195741)
  • تمت إضافة @CheckResult إلى SemanticsNodeInteraction.isDisplayed() وisNotDisplayed() لضمان تأكيد القيم المعروضة، ما يمنع حدوث أعطال غير ظاهرة في الاختبارات عندما يستخدمها المطوّرون عن طريق الخطأ بدلاً من واجهات برمجة التطبيقات الخاصة بالتأكيد. (I1b447، b/508178494)
  • ستؤدي العلامة AndroidComposeUiFlag.isDelayAndroidViewsHandlerCreationEnabled إلى إنشاء مثيل ViewGroup الذي يحتوي على AndroidView فقط عند إضافة AndroidView لتحسين أداء ComposeView التي لا تحتوي على AndroidView. عند إيقاف العلامة، يتم إنشاء ViewGroup الحاوية وإرفاقها عند إرفاق ComposeView بالنافذة. (I306a3، b/524283041)
  • نقدّم coroutineScopeOrNull() في NestedScrollDispatcher، وهي واجهة برمجة تطبيقات بديلة للوصول إلى نطاق الروتين الفرعي الرئيسي للمرسل. (I18c0f)
  • غيِّر clearCallbacks إلى runAndClearCallbacks للتأكّد من تنفيذ إجراءات التنظيف دائمًا. (If4720، b/526700075)
  • تمت إعادة تسمية ComposeTestConfig إلى ComposeUiTestConfig ونقلها من حزمة الإصدار 2 إلى حزمة androidx.compose.ui.test الرئيسية. (I1d2a1، b/504195741)
  • تمت إضافة المَعلمة timeoutMillis (القيمة التلقائية هي 2000 ملي ثانية) إلى SemanticsNodeInteraction.captureToImage() للسماح بإعداد مهلة مخصّصة عند انتظار عمليات إعادة الرسم. (Ib7d62، b/249501063)
  • إضافة معلومات سابقة إلى التغييرات في إدخال المؤشر غير المباشر (Ie62d2، b/526961645)
  • تمت إضافة السمة الدلالية hintText الجديدة لتمثيل نص التلميح في حقول النص، ما يؤدي إلى تحسين إمكانية الوصول من خلال الربط بـ AccessibilityNodeInfo.hintText. (Ib65da، b/448376876)
  • تم تحسين دقة CompositionLocal من خلال حلّها بشكل ديناميكي من LocalOwner وLocalAndroidComposeView عند الطلب، ويمكن تفعيل هذا الخيار أو إيقافه باستخدام ComposeUiFlags.isMinimalistLocalsEnabled. (I2bf6d)
  • لدى "androidx.benchmark" الآن minSdk يبلغ 24. (Ic2a85)
  • تمت إضافة علامة تجريبية isPropagateHideFromAccessibilityToMergingChildrenEnabled إلى AndroidComposeUiFlags للتحكّم في نقل hideFromAccessibility إلى العناصر الفرعية التي يتم دمجها. (Ie41ff، b/483506400)
  • تم نقل واجهات برمجة التطبيقات الخاصة باختبار ComposeUiTest وواجهات برمجة التطبيقات ذات الصلة (بما في ذلك الإصداران ComposeTestRule وwaitUntil) من مرحلة "تجريبية" إلى مرحلة "إصدار ثابت". (Iaec77، b/471148519، b/485124363)
  • تم إصلاح ترتيب التنقّل TalkBack في مجموعات التنقّل المدمَجة. ويمكن التراجع عن هذا التغيير إذا لزم الأمر من خلال إيقاف AndroidComposeUiFlags.isTraversalGroupSortingEnabled. (I5ae09، b/285043826)
  • تزيل هذه السمة الدالة المساعدة التجريبية القديمة IndirectPointerEvent. (I05dee، b/499336763، b/501098299، b/501098376، b/513249467)
  • استبدِل واجهة برمجة التطبيقات التجريبية ‎ @AnimationToolingApi بواجهة برمجة التطبيقات ‎ @RestrictTo التي توفّر ضمانات أكثر صرامة بشأن التتبُّع. (Ia4fd1، b/524317805)
  • تمت إضافة أداة الاختيار onDescendants() للعثور على جميع عقد الدلالات ضمن الشجرة الفرعية لعقدة معيّنة. (Id6b9b، b/444588117)
  • تم إيقاف واجهات برمجة التطبيقات المساعدة waitUntilNodeCount وwaitUntilAtLeastOneExists وwaitUntilExactlyOneExists وwaitUntilDoesNotExist نهائيًا لأنّها لا تقبل useUnmergedTree. تمت إضافة عمليات تحميل زائد جديدة تقبل useUnmergedTree للسماح بانتظار العُقد في شجرة الدلالات غير المدمجة. (If675f، b/268432145)
  • تمت إضافة المَعلمة tolerance إلى تأكيدات الحجم والموضع SemanticsNodeInteraction (assertWidthIsEqualTo وassertHeightIsEqualTo وassertTouchWidthIsEqualTo وassertTouchHeightIsEqualTo وassertPositionInRootIsEqualTo وassertTopPositionInRootIsEqualTo وassertLeftPositionInRootIsEqualTo) للسماح للمطوّرين بضبط حد المقارنة، ما يؤدي إلى تحسين قوة الاختبار على مستوى كثافات الشاشة المختلفة. (I3a477، b/202752461)
  • تتيح اختبارات Compose الآن مزامنة سلسلة التعليمات الرئيسية. يمكنك الآن استدعاء واجهات برمجة التطبيقات للمزامنة (مثل waitForIdle() وrunOnIdle()) وتنفيذ تأكيدات أو إجراءات Compose بأمان مباشرةً ضمن عمليات رد الاتصال في واجهة المستخدم أو سلسلة التعليمات الرئيسية. (I0247a، b/498478569)
  • تم تقديم نموذج إعداد جديد (ComposeTestConfig) لواجهات برمجة التطبيقات الخاصة باختبار Compose من أجل تبسيط إدارة المَعلمات وتحسين قابلية التوسّع. تمت إضافة إمكانية ضبط وضع الإدخال (اللمس/لوحة المفاتيح) مباشرةً من خلال ComposeTestConfig، ما يضمن الإعداد وإعادة الضبط تلقائيًا لمنع حدوث أخطاء متقطّعة في الاختبار بسبب تسرُّب الحالة. تمت إضافة عمليات تحميل زائدة جديدة للدالتين run*ComposeUiTest وcreate*ComposeRule تقبل العنصر ComposeTestConfig. (Ia3da9، b/267253920، b/504195741)
  • تم إصلاح عُطل في "معاينة Compose" عند استخدام PreviewParameterProvider مع خصائص "طلب البحث عن الوسائط" (Posture وPointerPrecision وما إلى ذلك) من خلال تغيير التمثيل الأساسي من String إلى Int. (Ic8f92، b/489939558)
  • تمت إضافة المَعلمة includeInputText إلى hasTextExactly وassertTextEquals لتفعيل المطابقة التامة للنص الخام المدخَل مع النص المرئي. (Iee329، b/519026043)

إصلاح الأخطاء

  • تم تحسين SaveableStateRegistry.performSave() لمنع عمليات تخصيص HashMap. يستخدم ScatterMap داخليًا. (I7d510)
  • تمت إضافة ألوان النص إلى AccessibilityNodeInfo.ExtraRenderingInfo لعناصر Text Composables. (I11c94، b/518049030)
  • تم إصلاح مشكلة كانت تؤدي إلى ظهور الخطأ IllegalStateException بدلاً من عرض null عند محاولة الوصول إلى NestedScrollDispatcher.coroutineScopeOrNull أثناء فصل عقدة التنسيق. (I55634، b/533444810)
  • تم تحسين عملية تهيئة compose:ui خصائص فئة القيم ذات المستوى الأعلى على مستوى الملف باستخدام دوال جلب ديناميكية. (I34184)
  • تحسين عملية تهيئة الكائن المرافق لفئات ui-unit التي تكون قيمتها أقل من 0x0A‏ (TextUnit) باستخدام دوال الجلب الديناميكية (If4a99)
  • تحسين عملية تهيئة عناصر مصاحبة محسّنة لفئات قيم ui-graphics (BlendMode وColor وما إلى ذلك) باستخدام دوال جلب ديناميكية (Iaa86a)
  • تم تحسين عملية تهيئة عناصر مصاحبة محسّنة لcompose:ui:ui فئات القيم (Key وCompositingStrategy وما إلى ذلك) من خلال استخدام دوال جلب ديناميكية. (I1a340)
  • تحسين عملية تهيئة عناصر مصاحبة لcompose:ui فئات قيم النصوص (TextAlign وTextOverflow وImeAction وما إلى ذلك) من خلال استخدام دوال جلب ديناميكية (I776e0)
  • تم تحسين عملية تهيئة العنصر المرافق لأدوات compose:ui وفئات قيم الاختبار (AnimatedVisibilityState وMouseButton وScrollWheel) من خلال استخدام أدوات جلب ديناميكية. (I23e1b)
  • تحسين عملية تهيئة عناصر الكائنات المصاحبة compose:uiلفئات قيم الوحدات (Dp وDpOffset وTextUnitType وما إلى ذلك) من خلال استخدام دوال جلب ديناميكية (If5eb5)
  • تم تحسين عملية تهيئة عناصر الكائنات المصاحبة لفئات قيم الأشكال الهندسية compose:ui (Offset وSize وCornerRadius) من خلال استخدام دوال الجلب الديناميكية. (I3b110)
  • تحسين عملية تهيئة عنصر مصاحب compose:uiلفئات القيم (Role وFocusDirection وPointerEventType وما إلى ذلك) من خلال استخدام دوال جلب ديناميكية (Ie35dd)
  • التعامل بشكل صحيح مع BaselineShift.None وBaselineShift.Unspecified وBaselineShift(0f) لتجنُّب عمليات بطيئة غير ضرورية لتحديد التصميم (I4350c)
  • تم إصلاح مشكلة كانت تتسبّب في اختلاف سلوك قيم Dp التي تحتوي على صفر سالب (-0.0) في عمليات المقارنة أو عمليات التحقّق من المساواة عن عمليات المقارنة أو عمليات التحقّق من المساواة في النقطة العائمة. (I7dbcf، b/525506543)
  • تنظيف معلومات واجهة برمجة التطبيقات (Ia8066)

المساهمة الخارجية

  • أصبحت Alignment.topRatio وTrim.isTrimFirstLineTop() وTrim.isTrimLastLineBottom() واجهات برمجة تطبيقات عامة الآن (I84f62)

الإصدار 1.12

الإصدار 1.12.1

‫9 سبتمبر 2026

تم طرح androidx.compose.ui:ui-*:1.12.1. يتضمّن الإصدار 1.12.1 هذه التعديلات.

الإصدار 1.12.0

‫12 أغسطس 2026

تم طرح androidx.compose.ui:ui-*:1.12.0. يتضمّن الإصدار 1.12.0 هذه التعديلات.

### الخطوط المتغيّرة القابلة للتنزيل والإعداد بدون ضبط (ui-text-google-fonts)

• خطوط متغيّرة وشهادات GMS بدون إعدادات!

    import androidx.compose.ui.text.font.FontFamily                                                                                                                                                                         
    import androidx.compose.ui.text.font.FontVariation                                                                                                                                                                      
    import androidx.compose.ui.text.googlefonts.Font                                                                                                                                                                        
    import androidx.compose.ui.text.googlefonts.GoogleFont                                                                                                                                                                  
                                                                                                                                                                                                                            
    val fontFamily = FontFamily(                                                                                                                                                                                            
        Font(                                                                                                                                                                                                               
            googleFont = GoogleFont("Google Sans Flex"),                                                                                                                                                                    
            // Automatically uses default GMS certificates!                                                                                                                                                                 
            variationSettings = FontVariation.Settings(                                                                                                                                                                     
                FontVariation.weight(900),                                                                                                                                                                                  
                FontVariation.slant(0f)                                                                                                                                                                                     
            )                                                                                                                                                                                                               
        )                                                                                                                                                                                                                   
    )
──────                                                                                                                                                                                                                  

### Wide Color Gamut (WCG) Support (ui-graphics)

الحفاظ على الألوان ذات النطاق الواسع: * يتم الحفاظ على مساحات الألوان غير sRGB (مثل AdobeRgb وDisplayP3) التي تم ضبطها على Paint أو Shader في المستوى 29 من واجهة برمجة التطبيقات والإصدارات الأحدث. * يتم الرجوع إلى sRGB في مستويات واجهة برمجة التطبيقات القديمة.

    import androidx.compose.ui.graphics.Color                                                                                                                                                                               
    import androidx.compose.ui.graphics.Paint                                                                                                                                                                               
    import androidx.compose.ui.graphics.colorspace.ColorSpaces                                                                                                                                                              
                                                                                                                                                                                                                            
    val wcgColor = Color(0.9f, 0.5f, 0.1f, colorSpace = ColorSpaces.AdobeRgb)                                                                                                                                               
    val paint = Paint().apply {                                                                                                                                                                                             
        color = wcgColor // Preserved on API 29+                                                                                                                                                                            
    }
──────                                                                                                                                                                                                                  

### Hardware-Accelerated Mesh Gradients (ui)

• واجهة برمجة التطبيقات Painter API: تم استبدال Modifier.meshGradient بـ MeshGradientPainter، الذي يستخدم Canvas.drawMesh المتوافق مع تسريع الأجهزة.
• الاستخدام: استخدِم MeshGradientPainter داخل Modifier.paint.

import androidx.compose.ui.draw.paint                                                                                                                                                                                   
import androidx.compose.ui.geometry.Offset                                                                                                                                                                              
import androidx.compose.ui.graphics.Color                                                                                                                                                                               
import androidx.compose.ui.graphics.MeshGradientPainter                                                                                                                                                                 

val meshPainter = remember {                                                                                                                                                                                            
    MeshGradientPainter(rows = 1, columns = 1, hasBicubicColor = true) {                                                                                                                                                
        setVertex(0, 0, Offset(0f, 0f), Color.Red)                                                                                                                                                                      
        setVertex(0, 1, Offset(1f, 0f), Color.Blue)                                                                                                                                                                     
        setVertex(1, 0, Offset(0f, 1f), Color.Green)                                                                                                                                                                    
        setVertex(1, 1, Offset(1f, 1f), Color.Yellow)                                                                                                                                                                   
    }                                                                                                                                                                                                                   
}                                                                                                                                                                                                                       
Box(Modifier.fillMaxSize().paint(meshPainter))                                                                                                                                                                          
──────                                                                                                                                                                                                                  

### 4. دمج Credential Manager (واجهة المستخدم)

التعبئة التلقائية: * تضيف هذه السمة خاصية دلالية منخفضة المستوى credentialRequest لحقول النص في المستوى 34 من واجهة برمجة التطبيقات والإصدارات الأحدث.

    import androidx.compose.ui.semantics.credentialRequest                                                                                                                                                                  
    import androidx.compose.ui.semantics.CredentialRequestData                                                                                                                                                              
    import androidx.compose.ui.semantics.semantics                                                                                                                                                                          
                                                                                                                                                                                                                            
    BasicTextField(                                                                                                                                                                                                         
        value = value,                                                                                                                                                                                                      
        onValueChange = onValueChange,                                                                                                                                                                                      
        modifier = Modifier.semantics {                                                                                                                                                                                     
            if (Build.VERSION.SDK_INT >= 34) {                                                                                                                                                                              
                credentialRequest = CredentialRequestData(request, callback)                                                                                                                                                
            }                                                                                                                                                                                                               
        }                                                                                                                                                                                                                   
    ) 
──────                                                                                                                                                                                                                  

### 5. أصوات التفاعل التلقائي (ui)

أصوات النقر والتنقّل: * إتاحة أصوات النقر والتنقّل المتوافقة مع Android باستخدام إعدادات الصوت في النظام الأساسي * إيقاف الميزة: استخدِم برنامج تضمين SoundEffectOnInteraction لإيقاف الأصوات لشجرة فرعية.

    import androidx.compose.ui.platform.SoundEffectOnInteraction                                                                                                                                                            
                                                                                                                                                                                                                            
    // Opt-out of sounds for everything inside                                                                                                                                                                              
    SoundEffectOnInteraction(enabled = false) {                                                                                                                                                                             
        Button(onClick = {}) {                                                                                                                                                                                              
            Text("Silent Button")                                                                                                                                                                                           
        }                                                                                                                                                                                                                   
    }                                                                                                                                                                                                                       

### 6. دمج Espresso لهيكليات طرق العرض المختلطة (ui-test)
يمكنك حصر تفاعلات Compose على هيكلية طرق العرض المطابقة لـ ViewInteraction في Espresso.

    import androidx.compose.ui.test.junit4.onRootWithViewInteraction                                                                                                                                                        
    import androidx.test.espresso.Espresso.onView                                                                                                                                                                           
                                                                                                                                                                                                                            
    // Match RecyclerView row using Espresso                                                                                                                                                                                
    val specificRow = onView(allOf(withId(R.id.row), hasDescendant(withText("Item #5"))))                                                                                                                                   
                                                                                                                                                                                                                            
    // Scope Compose interactions to that row                                                                                                                                                                               
    composeTestRule.onRootWithViewInteraction(specificRow)                                                                                                                                                                  
        .onNodeWithTag("fav_icon")                                                                                                                                                                                          
        .performClick()

الإصدار ‎1.12.0-rc01

‫29 يوليو 2026

تم طرح androidx.compose.ui:ui-*:1.12.0-rc01. يتضمّن الإصدار 1.12.0-rc01 هذه التعديلات.

الإصدار ‎1.12.0-beta02

‫01 يوليو 2026

تم طرح androidx.compose.ui:ui-*:1.12.0-beta02. يتضمّن الإصدار 1.12.0-beta02 هذه التعديلات.

الإصدار ‎1.12.0-beta01

‫17 يونيو 2026

تم طرح androidx.compose.ui:ui-*:1.12.0-beta01. يتضمّن الإصدار 1.12.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • لا ينطبق (نقل علامة ميزة المطوّر الداخلي) (Iaf2c4، b/368702588)
  • لا ينطبق - تم نقل علامة ميزة. (I24668، b/521811270)
  • تمت إضافة علامة الميزة التجريبية ComposeUiFlags.isTrackpadPinchReinterpretationEnabled لإعادة تفسير إيماءات التصغير أو التكبير بإصبعين على لوحة اللمس كأحداث ماوس مع عوامل قياس. (Id3477، b/478053727)
  • إعادة تسمية دالة الاختبار لتفعيل أحداث المؤشر غير المباشرة (I3ee35، b/509618414)
  • تمت إضافة تحسين إلى BasicText وBasicTextField حيث يتم الآن احتساب ارتفاع السطر لنص softwrap=false بشكل أكثر فعالية (I2150a)

إصلاح الأخطاء

  • تحسين عملية نشر حالة التقاط التمرير عبر عمليات الإنشاء الفرعية لمنع إعادة إنشاء واجهة المستخدم بشكل غير ضروري (I05830)
  • تم تفعيل علامة الميزة التجريبية ComposeUiFlags.isTrackpadPinchReinterpretationEnabled تلقائيًا. (I35ab8، b/478053727)
  • تم إصلاح مشكلة في تحليل موارد الرسومات المتجهة القابلة للرسم، حيث تم تجاهل عناصر <clip-path> الرئيسية إذا كانت تحتوي على عناصر <group> متداخلة. (Id4ea9، b/474530439)
  • تمت إضافة إمكانية استخدام قواعد إعادة محاولة اختبار JUnit 4 العادية في AndroidComposeTestRule من خلال إعادة إنشاء بيئة الاختبار الداخلية ونطاق الروتين الفرعي بين محاولات التنفيذ. (Iafaa7، b/235383900)

المساهمة الخارجية

  • عرض واجهة AndroidClipboard للاختبار من أجل توفير طريقة لمحاكاة تنفيذ الحافظة (Ie4d72، b/512924975)
  • إضافة توافق مع الأنظمة القديمة لأنواع TextAttribute من commitText() وsetComposingText() في الإصدار 37 من حزمة تطوير البرامج (SDK) أو الإصدارات الأحدث، ستتمكّن خدمات تسهيل الاستخدام من الإعلان عمّا إذا تم اختيار نص بديل مقترَح أم لا. بالنسبة إلى الإصدارات الأقدم من 37 من حزمة تطوير البرامج (SDK)، لن يؤثّر ذلك في الملاحظات الصوتية (أي السلوك الحالي). (I90e3d، b/439879822)

الإصدار ‎1.12.0-alpha03

‫19 مايو 2026

تم طرح androidx.compose.ui:ui-*:1.12.0-alpha03. يتضمّن الإصدار 1.12.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة السمة credentialRequest Semantics الجديدة والأداة المساعدة CredentialRequestData في الإصدار 34 من واجهة برمجة التطبيقات أو الإصدارات الأحدث للسماح لِحقول النص في Jetpack Compose بالاندماج مع Credential Manager في Android من خلال إطار عمل الملء التلقائي. (Ida2bf، b/488446455)
  • تمت إضافة دالة مصنع ParagraphIntrinsics تأخذ الوسيط softWrap من بين وسيطات أخرى. يمكننا استخدامها داخليًا كإشارة إلى أنّ النص معروض على سطر واحد وإجراء بعض التحسينات. (I66ca4، b/485495112)
  • تمت إضافة إمكانية استخدام أصوات التفاعل التلقائي (النقرات والتنقّل باستخدام التركيز) إلى مكوّنات Compose، مع إضافة SoundEffectOnInteraction Composable جديد للسماح بإيقاف هذه الميزة. يُرجى العِلم أنّه نتيجةً لهذا التغيير، يجب الآن استدعاء أدوات معالجة النقرات الدلالية من سلسلة التعليمات الرئيسية، ما قد يؤثّر في عدد صغير من حالات الاختبار. (I78f65)
  • دالة المصنع Font الثابتة التي تستخدم variationSettings. (I183f2)
  • السمة ResourceFont loadingStrategy والإجراء copy الثابتان (I40d84)
  • واجهتا برمجة التطبيقات InterceptPlatformTextInput وPlatformTextInputInterceptor الثابتتان (Id2784)
  • لتحسين فصل المنصات، تم نقل registerIdlingResource وunregisterIdlingResource إلى دوال الإضافة، وقد تحتاج إلى تعديل عمليات الاستيراد. (I21d3d، b/471148519)
  • تم تقديم runWithoutImplicitWait إلى ComposeTestRule وComposeUiTest لتحسين أداء الاختبار أثناء الفحص الحكومي. تتيح واجهة برمجة التطبيقات هذه تنفيذ مجموعة من الرموز البرمجية مع إيقاف المزامنة الضمنية، ما يؤدي إلى تجنُّب الحمل الزائد لعمليات المزامنة المتكررة لكل طلب بحث عن عقدة. ويؤدي ذلك إلى تنفيذ الاختبارات بشكل أسرع بكثير، خاصةً الاختبارات التي تتضمّن التنقّل يدويًا بين اللقطات وأخذ عيّنات من خصائص متعدّدة، مثل اختبارات الصور المتحرّكة. (Ie00e9، b/490270394)
  • يمكن الآن تطبيق التعليق التوضيحي @PreviewWrapper على فئات التعليقات التوضيحية MultiPreview، ما يتيح للمطوّرين إنشاء إعدادات معاينة قابلة لإعادة الاستخدام ومغلّفة مسبقًا. (I8ae66، b/511170361)
  • تمت إضافة MeshGradientPainter لعرض تدرّجات شبكية.تمت إزالة Modifier.meshGradient، لذا استخدِم MeshGradientPainter مع Modifier.paint بدلاً من ذلك. MeshGradientRenderer أصبح الآن داخليًا. (I2d170، b/508110246)
  • يمكن الآن توفير أدوات القياس بشكل فردي من خلال تقديم دالة lambda تحدّد ما إذا كان يمكن توفير أداة قياس المسافات، بالإضافة إلى دالة lambda منفصلة توفّر قيمة أداة قياس المسافات. لا يتم رصد دالة lambda isRulerProvided، ويجب أن تكون متفائلة بشأن إمكانية توفير قيمة. تتم مراقبة دالة lambda rulerProvider، وبالتالي إذا تغيّرت أي قيمة، سيتم تعديل قيمة المسطرة وجميع القراء الذين يستخدمونها. (Ie9089)
  • في واجهة برمجة التطبيقات التجريبية Style API، تمّت إضافة إمكانية إنشاء أنواع أنماط مخصّصة يمكن أن تتضمّن نطاقات أنماط مخصّصة. يتيح ذلك تقسيم الخصائص التي يمكن ضبطها حسب النمط (مثل إزالة طبقة الرسومات أو خصائص النص بالكامل)، بالإضافة إلى السماح بتوسيع النطاق بشكل مستقل عن الأنماط الأخرى (مثل عدم إتاحة بنية playing { } إلا في عنصر MediaPlayer قابل للإنشاء). يؤدي هذا التغيير إلى إيقاف التوافق الثنائي وتوافق المصدر. التغيير الأساسي الذي يؤدي إلى عدم توافق الرمز المصدري هو نقل الدوال المساعدة في StyleScope لتصبح دوال إضافية (على سبيل المثال، أصبحت fun contentProperty(all: Dp) الآن دالة إضافية). يجب أن يكون استيراد دوال الإضافة المطلوبة أو استيراد جميع الرموز من androidx.compose.foundation.styles هو كل ما هو مطلوب لتجميع الرمز الذي يستدعي هذه الطرق بشكل صحيح. (I1ef27، b/493676648)
  • تضيف هذه السمة updatePointerBy() مع وسيط تلقائي لمعرّف المؤشر. (I99f30، b/502001776)
  • لم يعُد DeferredTargetAnimation تجريبيًا، يُرجى إزالة خيار الاشتراك" إلى androidx-main
  • تمت إضافة العلامة isClearNestedScrollCoroutineScopeFixEnabled للتحكّم في الإصلاح. (Ibd394، b/505343254)
  • لم يعُد DeferredTargetAnimation تجريبيًا، يُرجى إزالة الموافقة على استخدامه. (I1e4ae، b/500030165)
  • تعداد جديد لإتاحة المشغّلات في أدوات واجهة المستخدم (I6e198، b/478807872)
  • يُسمح بإنشاء ComposeViewContext بدون إرفاق العرض المرجعي. لا يزال يتطلب إرفاق "العرض" المرجعي قبل استدعاء setContent(). (Id0952)

إصلاح الأخطاء

  • تم إصلاح مشكلة focusRestorer عدم استعادة التركيز بشكل صحيح عند إجراء عدة عمليات حفظ للتنسيق نفسه (I10277، b/505371994)
  • كان لتحسين سابق في الأداء تأثير جانبي يتمثّل في عدم السماح بقياس ComposeViews غير المرفقة. يتيح هذا التغيير الآن إجراء ذلك بدون إعادة طرح مشكلة الأداء. (I9b2c5، b/508650647)
  • تتم إعادة إنشاء التركيبة الآن عند إجراء تغيير على ComposeViewContext لتوفير وصول أسرع إلى ComposeViewContext. (I3b3a8، b/487364963)
  • السماح لـ Compose بضبط ألوان غير sRGB على الطلاء وأداة التظليل على Android، مع الحفاظ على نطاق الألوان الواسع من خلال ربط مساحات الألوان Compose بشكل صحيح بمساحات الألوان المكافئة على النظام الأساسي سيتم الرجوع بأمان إلى مساحة الألوان Srgb في حال عدم توفّر مساحات الألوان لعمليات العرض على النظام الأساسي (مثل CIE XYZ وCIE Lab وOkLab) أو عدم توفّرها في مستوى واجهة برمجة التطبيقات الحالي. (I3efb5، b/388511109)

المساهمة الخارجية

  • تم إيقاف نوع الاسم المستعار androidx.compose.ui.platform.NativeClipboard نهائيًا، لذا استخدِم android.content.ClipboardManager مباشرةً بدلاً منه (Ibc611)
  • استبدِل السمة Clipboard.nativeClipboard بالامتداد Clipboard.nativeClipboardManager لتجنُّب عرض نوع النظام الأساسي في مجموعة المصادر commonMain من خلال typealias (Ibc611).

الإصدار ‎1.12.0-alpha02

‫6 مايو 2026

تم طرح androidx.compose.ui:ui-*:1.12.0-alpha02. يتضمّن الإصدار 1.12.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تتضمّن هذه السمة المعدِّل MeshGradient. (Ia9a08، b/455752719)
  • يزيل عمليات معاودة الاتصال المضمّنة لتصحيح أخطاء الملء التلقائي. يمكن تحقيق الوظيفة نفسها من خلال تسجيل الدخول من AutofillManager.AutofillCallback. (I631c7، b/502279690)
  • إتاحة إعدادات خيارات الخطوط القابلة للتنزيل (Ic25c7، b/496278020)
  • تم تعديل mediaQuery وderivedMediaQuery لعرض نوع عام بدلاً من Boolean، ما يتيح استخدامًا أكثر مرونة عند إنشاء واجهات مستخدم قابلة للتكيّف. (I93830، b/498698350)

الإصدار ‎1.12.0-alpha01

‫22 أبريل 2026

تم طرح androidx.compose.ui:ui-*:1.12.0-alpha01. يتضمّن الإصدار 1.12.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إزالة علامة الميزة ComposeUiFlags.isIndirectPointerNavigationGestureDetectorEnabled (I82be3، b/455601135)
  • تم تحويل mediaQuery إلى دالة مضمّنة (Ie9457، b/498698350)
  • تم نقل ComposeViewContext من مرحلة الإصدار التجريبي، وتمت إزالة التعليق التوضيحي ExperimentalComposeViewContextApi (I32eca)
  • لم تعُد ميزة "ComposeView.disableWindowInsetsRulers()" تجريبية (Ia81a5)
  • تمت إضافة واجهة برمجة التطبيقات hasPendingWork() للسماح بالتحقّق بشكل غير مباشر مما إذا كانت واجهة مستخدم Compose تتضمّن حاليًا عملًا في انتظار التنفيذ بدون بدء عملية انتظار أو تقديم الوقت. ويكون ذلك مفيدًا لاختبارات الساعة اليدوية لتحديد وقت انتهاء الرسوم المتحركة أو غيرها من العمليات التي تتم في الخلفية. (Ic54e3)
  • تمت إزالة علامة الميزة AndroidComposeUiFlags.isForceChildLayoutAfterMeasurementEnabled (I7fd25، b/491111451)
  • تمت إزالة علامة الميزة AndroidComposeUiFlags.isSharedFontEnabled (I2cebe، b/479898293)
  • تضيف هذه السمة خيارات KeyboardType إضافية لإكمال مجموعة خيارات لوحة المفاتيح المتوافقة على Android، بما في ذلك التاريخ والوقت والتاريخ والوقت معًا والعلامة العشرية الموقّعة وغير ذلك. (I3713e، b/202353328)
  • تمت إزالة العلامة AndroidComposeUiFlags.isSharedHapticsEnabled (I6a1d4، b/479895628)
  • تمت إزالة العلامة AndroidComposeUiFlags.isSharedClipboardManagerEnabled (I41e3c، b/479895130)
  • إزالة علامة AndroidComposeUiFlags.isSharedViewConfigurationEnabled (I6d3aa، b/479890645)
  • تمت إزالة علامة الميزة AndroidComposeUiFlags.isSharedDrawingEnabled. (I27912، b/479849019)
  • تمت إزالة علامة الميزة AndroidComposeUiFlags.isSharedAccessibilityManagerEnabled (I6b726، b/479845566)
  • إزالة علامة AndroidComposeUiFlags.isSharedWindowInfoEnabled (Ife9a9، b/479837249)
  • أزِل العلامة AndroidComposeUiFlags.isSharedComposeViewContextEnabled. (Ic522a، b/479834257)
  • إضافة إعدادات خيارات لتخصيص الخطوط المتغيّرة القابلة للتنزيل (Ifdc93، b/223262013)
  • إضافة إعدادات خيارات المنتج لتخصيص الخطوط المتغيّرة القابلة للتنزيل (I390af، b/223262013)
  • إزالة العلامة isTraversableDelegatesFixEnabled (Ia7dfe، b/485962494)
  • تم تقديم runWhenIdle وawaitAndRunWhenIdle (النوع المعلق) في ComposeTestRule وComposeUiTest لتحسين أداء الاختبار وثبات الحالة. تعمل واجهات برمجة التطبيقات هذه على مزامنة واجهة المستخدم مرة واحدة، ثم تنفيذ مجموعة من الرموز البرمجية بدون الحاجة إلى عمليات مزامنة متكررة لكل عملية. ويؤدي ذلك إلى تنفيذ تجريبي أسرع وأكثر استقرارًا بشكل ملحوظ، خاصةً الاختبارات التي تتضمّن العديد من السمات، مثل اختبارات الرسوم المتحركة. (Iabf66، b/490270394)
  • تضيف LayerOutsets إلى GraphicsLayer وModifier.graphicsLayer، ويمكن استخدامها لزيادة الحدود المرئية للطبقة إلى ما يتجاوز حجمها المقاس. يمكن استخدام ذلك لتجنُّب السلوك الضمني clipToBounds عند ترقية الطبقة إلى مخزن مؤقت خارج الشاشة. (Ic1189)
  • تم إيقاف تسجيل أحداث إدخال الملء التلقائي تلقائيًا. ويمكنك الآن تفعيلها من خلال الاتصال بالرقم ComposeView.setAutofillDebugEnabled. (I5b430، b/487947860)
  • تم تغيير VelocityTracker لاستخدام التنفيذ الذي يوفّره إطار عمل Android (يمكن ضبطه باستخدام AndroidComposeUiFlags.isFrameworkVelocityTrackerEnabled). (Ibc7e2، b/359962905)
  • عندما تكون القيمة AndroidComposeUiFlags.isForceChildLayoutAfterMeasurementEnabled صحيحة، سيتم دائمًا استدعاء التنسيق للعناصر الفرعية من نوع "طرق العرض" بعد القياس أثناء عملية التنسيق. لا تنظّم Compose العناصر التابعة دائمًا بعد القياس، ولكن تتطلّب Views ذلك لإدارة الحالة بشكل سليم. (Ib4fe9، b/430974758)
  • إضافة isVirtual إلى LayoutInfo (I3e5cd، b/494243978)
  • تمت إزالة العلامة isGraphicsLayerShapeSemanticsEnabled. (I44be0، b/455600081)
  • تمت إضافة واجهة برمجة تطبيقات جديدة للخطوط لاستخدام الخطوط القابلة للتنزيل بدون الحاجة إلى إضافة شهادات الخطوط إلى قاعدة الرموز البرمجية يدويًا. (I30b86، b/479454159)
  • تمت إضافة onRootWithViewInteraction لتحديد نطاق عمليات البحث الدلالية في Compose لتشمل "طرق عرض" معيّنة في Android . يسهّل ذلك اختبار واجهات المستخدم المختلطة، مثل RecyclerViews، بدون الحاجة إلى علامات اختبار فريدة في رمز الإنتاج . (Ic02c4، b/175226753)

إصلاح الأخطاء

  • تتيح لك واجهة برمجة التطبيقات captureToImage() الآن التقاط نافذة منبثقة أو مربّع حوار مع عنصر الربط الخاص بهما في صورة نقطية واحدة. (I9b83a، b/443137545)
  • تم تعديل Compose compileSdk إلى الإصدار 37 من واجهة برمجة التطبيقات. وهذا يعني أنّه يجب استخدام الإصدار 9.2.0 أو إصدار أحدث من "مكوّن Android الإضافي" عند استخدام Compose. (Id45cd، b/413674743)
  • يؤدي ضبط ContentDataType.None في الدلالات الآن إلى منع Compose من إرسال أحداث الملء التلقائي. من المفترض أن يمنع ذلك تكاليف الإعداد المرتبطة بطلب خدمات الملء التلقائي. (I8fbda، b/487947860)

الإصدار 1.11

الإصدار 1.11.4

‫01 يوليو 2026

تم طرح androidx.compose.ui:ui-*:1.11.4. يتضمّن الإصدار 1.11.4 هذه التعديلات.

الإصدار 1.11.3

‫17 يونيو 2026

تم طرح androidx.compose.ui:ui-*:1.11.3. يتضمّن الإصدار 1.11.3 هذه التعديلات.

الإصدار 1.11.2

‫19 مايو 2026

تم طرح androidx.compose.ui:ui-*:1.11.2. يتضمّن الإصدار 1.11.2 هذه التعديلات.

الإصدار 1.11.1

‫6 مايو 2026

تم طرح androidx.compose.ui:ui-*:1.11.1. يتضمّن الإصدار 1.11.1 هذه التعديلات.

الإصدار 1.11.0

‫22 أبريل 2026

تم طرح androidx.compose.ui:ui-*:1.11.0. يتضمّن الإصدار 1.11.0 هذه التعديلات.

الإصدار ‎1.11.0-rc01

‫8 أبريل 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-rc01. يتضمّن الإصدار 1.11.0-rc01 هذه التعديلات.

الإصدار ‎1.11.0-beta02

‫25 مارس 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-beta02. يتضمّن الإصدار 1.11.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إعادة تسمية واجهة برمجة التطبيقات Rename PreviewWrapper لتحقيق الاتساق (I62659، b/490085948)
  • تسمح السمة ComposeViewContext بإنشاء ComposeView بدون ربطها بهيكلية طرق العرض. استخدِم AbstractComposeView.createComposition(composeViewContext) لبدء إنشاء رسالة بدون إرفاق ComposeView. (I46e6f)
  • تمت إضافة delayMillis إلى واجهات برمجة التطبيقات لاختبار لوحة اللمس في panEnd وscaleEnd (If80fe)

إصلاح الأخطاء

  • يطلب كلّ من Clipboard وClipboardManager الآن خدمة تابعة لنظام التشغيل عند طلب الإجراء الأول (If0016، b/487947860)
  • سيتم استعادة التركيز بشكل صحيح داخل الحاويات الكسولة التي تتم فيها إعادة استخدام عقد التركيز والمجموعات (I18d36، b/481564275)
  • تستخدِم النافذة المنبثقة التي تتضمّن clippingEnabled = false الآن حدود النافذة الكاملة بشكلٍ صحيح لعرض المحتوى من الحافة إلى الحافة (I206408، b/327017902)

الإصدار ‎1.11.0-beta01

‫11 مارس 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-beta01. يتضمّن الإصدار 1.11.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة دعم windowToken المخصّص إلى مربّع الحوار في Jetpack Compose (Ic7728)
  • تمت إضافة إمكانية استخدام windowToken وwindowType مخصّصَين إلى النوافذ المنبثقة في Jetpack Compose. (I0a04f)
  • تقديم واجهة PreviewWrapper وموفّر تعليقات توضيحية سيتيح ذلك للمطوّرين تضمين معايناتهم بسلاسة مع سلوك مخصّص. (I29f54، b/484306729)
  • عندما تكون قيمة AndroidComposeUiFlags.isSharedFontEnabled صحيحة، يمكن مشاركة مثيلات العناصر ذات الصلة بالخطوط، مثل FontLoader وFontFamilyResolver، بين مثيلات ComposeView داخل ComposeViewContext. (I403e8)
  • ستستخدم معالجات دلالات الإنشاء view.handler بدلاً من mainLooper، ما يؤدي إلى تجنُّب الأعطال في طرق العرض التي تستخدم معالجات غير رئيسية. (I671c3، b/486235925)
  • تمت إضافة علامة isSkipNonImportantSemanticsNodesHitTestEnabled تحمي إصلاح خطأ في اختبارات الوصول إلى العناصر الدلالية، ما يؤثر في ميزة "النقر للاستكشاف" في TalkBack. (I2933f وb/481011169 وb/454377558 وb/461360154)
  • تمت إضافة إمكانية عرض مربّعات حوار Jetpack Compose من "خدمات Android". من خلال توفير نوع نافذة مخصّص من خلال المَعلمة الجديدة windowType في DialogProperties، يمكن للمطوّرين الآن عرض مربّعات الحوار في نوافذ متراكبة. (I7c504، b/478214962)
  • تعيد تسمية السمتَين PointerInputChange وHistoricalChange لاسترداد قيم التكبير/التصغير والتحريك. (I989a8، b/481333653)
  • تضيف هذه السمة المزيد من الوظائف إلى واجهات برمجة التطبيقات الخاصة باختبار لوحة اللمس، وذلك لمحاكاة منحنيات ومدخلات مختلفة لإيماءة لوحة اللمس. (I290fb، b/473603145، b/479213358)
  • تقسيم PointerEventType.Pan الجديد إلى PointerEventType.PanStart وPointerEventType.PanMove وPointerEventType.PanEnd وبالمثل، تم تقسيم PointerEventType.Scale إلى PointerEventType.ScaleStart وPointerEventType.ScaleChange وPointerEventType.ScaleEnd. يتيح هذا التقسيم تمرير معلومات إضافية حول بداية ونهاية إيماءات التحريك والتكبير/التصغير التي تفسّرها المنصة، ما يسمح بعد ذلك لمعالجات إدخال المؤشر في Compose باستخدام هذه المعلومات لرصد الأحداث بشكل مناسب، ومعرفة متى يتم التحريك أو التكبير/التصغير على وجه الخصوص. (I4daf6، b/479285849، b/481333653)
  • عندما تكون قيمة AndroidComposeUiFlags.isSharedHapticsEnabled صحيحة، يحتوي ComposeViewContext على مثيل وحدة التحكّم المشتركة في ردود الفعل اللمسية. (Icd79a)
  • تم طرح واجهات برمجة التطبيقات التجريبية mediaQuery وderivedMediaQuery وUiMediaScope (المصنّفة على أنّها @ExperimentalMediaQueryApi) لإتاحة تطوير واجهات مستخدم تكيّفية تعريفية استنادًا إلى أبعاد النافذة ووضع النافذة وإمكانات أخرى للجهاز والبيئة. (I2d21e، b/479800750)

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم إعادة رسم Modifier.dropShadow وModifier.innerShadow على مستوى نطاق الحظر عند تغيير مَعلمة الشكل ديناميكيًا. (Ida262، b/486202623)
  • تم إصلاح الخطأ الذي يتسبب في وضع المحتوى المضمّن في غير مكانه في التصاميم من اليمين إلى اليسار التي تتضمّن نصًا من اليسار إلى اليمين أو التصاميم من اليسار إلى اليمين التي تتضمّن نصًا من اليمين إلى اليسار. (I09789)
  • تم إصلاح الخطأ الذي كان يتسبّب في ظهور استثناء عند استخدام ComposeView في عملية انتقال جزء. (Ia425f، b/484100557)

المساهمة الخارجية

  • أضِف السمة InputTextSuggestionState للمساعدة في تحديد الحالات المختلفة التي يمكن أن يكون فيها إدخال الكتابة الصوتية عند توفّر اقتراحات استبدال النص. تضيف هذه السمة أيضًا TextCompositionRange لتتبُّع نطاق تركيبة النص الحالي للترجمة الصوتية، وتشير القيمة الفارغة إلى عدم توفّر أي تركيبة. (I7a67f، b/476472318)

الإصدار ‎1.11.0-alpha06

‫25 فبراير 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-alpha06. يتضمّن الإصدار ‎1.11.0-alpha06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم استبدال العلامة ComposeUiFlags.areWindowInsetsRulersEnabled بواجهة برمجة التطبيقات ComposeView.disableWindowInsetsRulers(). (Idcdb4، b/455590696)
  • نقلنا علامة الميزة التجريبية isAccessibilityShowOnScreenNestedScrollingEnabled المخصّصة لنظام Android فقط إلى (I1c13a)
  • إتاحة المشي صعودًا (I1c13a)
  • الإبلاغ عن عُقد الدلالات خارج الشاشة التي تكون عناصر فرعية لعُقد الدمج المرئية جزئيًا في الحاويات القابلة للتمرير من أجل تحسين تجربة المستخدمين مع برامج قراءة الشاشة وخدمات تسهيل الاستخدام المشابهة (I71df9، b/434782764)
  • عندما تكون قيمة AndroidComposeUiFlags.isSharedClipboardManagerEnabled صحيحة، يمكن مشاركة مثيلات ذات صلة بالحافظة على مستوى ComposeViews باستخدام ComposeViewContext (I65e2c).
  • تمت إزالة ComposeUiFlags.isRectManagerOffsetUsageFromLayoutCoordinatesEnabled (I6e14a، b/455601894)

الإصدار ‎1.11.0-alpha05

‫11 فبراير 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-alpha05. يتضمّن الإصدار ‎1.11.0-alpha05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تنقل AndroidComposeUiFlags.isSharedWindowInfoEnabled معلومات WindowInfo إلى ComposeViewContext. يؤدي إيقاف العلامة إلى ترك WindowInfo تحت سيطرة AndroidComposeView (I3b364)
  • سيتم نقل البُنى الشائعة ضمن ComposeView إلى ComposeViewContext المشتركة. هذا هو التغيير الأول الذي ينقل CoroutineContext إلى ComposeViewContext. عندما تكون قيمة AndroidComposeUiFlags.isSharedComposeViewContextEnabled صحيحة، تتم مشاركة القيم تلقائيًا. عند ضبط القيمة على "خطأ"، لن تتم مشاركتها. (I9364d، b/461566955)
  • تضيف هذه السمة إمكانية استخدام إيماءات لوحة اللمس والتحويل من أحداث إدخال لوحة اللمس إلى الماوس. من خلال هذا التغيير، سيتم بشكل عام تسجيل أحداث مؤشر لوحة اللمس التي تتحكّم في المؤشر كما هو الحال في الأجهزة اللوحية أو أجهزة الكمبيوتر المحمولة كمؤشرات فأرة، ما يحسّن السلوك المتعلق بانحراف المؤشر والتمرير والتحويم. سيتم أيضًا تسجيل إيماءات التحريك والتكبير/التصغير مع توفير معلومات إضافية في تغييرات حدث المؤشر، مع الإشارة إلى أنّه سيتم ضبط هذه القيم باستخدام PointerEventType.Pan وPointerEventType.Scale الجديدَين (Id071a وb/315527861 وb/459831570).

إصلاح الأخطاء

المساهمة الخارجية

  • تم إيقاف androidx.compose.ui.graphics.NativePaint typealias نهائيًا، استخدِم android.graphics.Paint مباشرةً بدلاً من ذلك (I6303c، b/477394763)
  • استبدال الإضافة Paint.asFrameworkPaint() بالإضافة Paint.nativePaint لتجنُّب عرض نوع النظام الأساسي في مجموعة المصادر commonMain من خلال typealias (I6303c، b/477394763)
  • إضافة دعم لمفاتيح حركة NumPad (I1ff12)

الإصدار ‎1.11.0-alpha04

‫28 يناير 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-alpha04. يتضمّن الإصدار 1.11.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم عرض TestCoroutineScheduler لتفعيل استخدام runCurrent() وضمان الوصول إلى مثيل أداة الجدولة المشتركة. (Iea662، b/254115946)
  • إضافة إمكانية التنقّل للأعلى في التمرير المتداخل استجابةً لطلب android.R.id.accessibilityActionShowOnScreen من "تسهيل الاستخدام" (Ib2723، b/431148846)

إصلاح الأخطاء

  • تم إصلاح مشكلة تحويل مساحة ألوان RGB مخصّصة على Android. تم تحويل عمليات تحويل التدرّج الرمادي المخصّص بشكل غير صحيح بين مساحات ألوان Compose المخصّصة ومساحات ألوان Android RGB.(ebd45،b/377021410)

الإصدار ‎1.11.0-alpha03

‫14 يناير 2026

تم طرح androidx.compose.ui:ui-*:1.11.0-alpha03. يتضمّن الإصدار ‎1.11.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة العلامة ComposeUiTestFlags.isStandardTestDispatcherSupportEnabled. تستخدم واجهتا برمجة التطبيقات run*ComposeUiTest وcreate*ComposeRule في الإصدار 2 الآن StandardTestDispatcher تلقائيًا. لمواصلة استخدام UnconfinedTestDispatcher، يمكنك استخدام صيغ واجهة برمجة التطبيقات المتوقّفة نهائيًا، ولكن ننصحك بشدة بنقل البيانات إلى الإصدار 2 من واجهات برمجة التطبيقات للحصول على تحكّم أفضل في تنفيذ الروتينات الفرعية. (Iecc9c، b/455601592)
  • تم طرح واجهات برمجة التطبيقات androidx.compose.ui.test.junit4.v2.create*ComposeRule. تستخدم واجهات برمجة التطبيقات الجديدة هذه StandardTestDispatcher تلقائيًا لمحاكاة سلوك الإنتاج بشكل أفضل حيث يتم وضع الروتينات الفرعية في قائمة الانتظار بدلاً من تنفيذها على الفور. لمزيد من المعلومات، راجِع إرشادات نقل البيانات. (I1870e، b/254115946)
  • تم طرح واجهات برمجة التطبيقات androidx.compose.ui.test.v2.run*ComposeUiTest. تستخدم واجهات برمجة التطبيقات الجديدة هذه StandardTestDispatcher تلقائيًا لمحاكاة سلوك الإنتاج بشكل أفضل حيث يتم وضع الروتينات الفرعية في قائمة الانتظار بدلاً من تنفيذها على الفور. لمزيد من المعلومات، راجِع إرشادات نقل البيانات. (I4f782، b/254115946)
  • يمكن الآن مشاركة البُنى الشائعة ضمن ComposeView. عندما تكون قيمة ComposeUiFlags.isSharedComposeViewContextEnabled صحيحة، تتم مشاركة القيم تلقائيًا. عند ضبط القيمة على "خطأ"، لن تتم مشاركتها. (I0d1b4، b/463540495، b/460468959، b/461503366، b/463641813)

إصلاح الأخطاء

  • تم إصلاح الخطأ الذي كان يؤدي إلى عدم إزالة المحتوى المرسوم عند إزالة كل المحتوى من ComposeView. (I8b382، b/299503084)
  • تم إصلاح عُطل في التركيب القابل للإيقاف المؤقت عند تحريكه باستخدام LookaheadScope. (I7e649، b/469669851)
  • تم حلّ مشكلة كانت تؤدي إلى تعطُّل خدمة الملء التلقائي عند إرسال سلاسل طويلة جدًا إليها. لمنع حدوث ذلك، يتم الآن اقتطاع النص تلقائيًا إلى طول صالح قبل إرساله.
  • تم إصلاح الخطأ الذي يمكن أن يتسبّب فيه الخروج من التمرير فوق عنصر في حدوث نقرة في ظروف معيّنة جدًا (a3d5a0f)
  • إصلاح عملية إرسال حدث التمرير فوق الشاشة باستخدام قلم الشاشة للاختبارات وإعداد اختبارات الماوس لاختبارات قلم الشاشة الجديدة (9ca9bc9)
  • تتيح هذه السمة إمكانية إزالة عناصر واجهة المستخدم أو وضعها باستخدام إدخال المؤشر. (d0742b0، b/BUD_ID)
  • تم إصلاح خطأ في Jetpack Compose Popup كان يؤدي إلى تمرير الإحداثيات المطلقة لحدود العنصر الأساسي إلى PopupPositionProvider، ما يؤدي إلى مواضع غير صحيحة للعناصر المنبثقة. تستخدم الآن عمليات احتساب موضع النوافذ المنبثقة الإحداثيات النسبية الصحيحة.(1f7edf،b/469940907)

الإصدار ‎1.11.0-alpha02

‫17 ديسمبر 2025

تم طرح androidx.compose.ui:ui-*:1.11.0-alpha02. يتضمّن الإصدار 1.11.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أصبحت واجهات برمجة التطبيقات MultiModalInjectionScope ثابتة الآن. ويشمل ذلك performKeyInput وperformRotaryScrollInput وواجهات برمجة التطبيقات الأساسية الخاصة بهما. تمت إزالة التعليق التوضيحي التجريبي. (Ie8bbc، b/261561237)
  • تضيف هذه الحزمة واجهات برمجة تطبيقات لاختبار لوحة اللمس. وهي تشبه واجهات برمجة التطبيقات لاختبار الماوس، وتُدخل أحداثًا تحاكي سلوك لوحة التتبُّع على جهاز لوحي أو كمبيوتر محمول. نقطتا الدخول الأساسيتان هما SemanticsNodeInteraction.performTrackpadInput وMultiModalInjectionScope.trackpad (I2ce67)، b/432326139.

إصلاح الأخطاء

  • إصلاح إمكانية التشغيل التفاعلي لإدخال التمرير بعجلة الماوس بحيث لا يتم استخدامه إلا إذا تم استخدامه في Compose، وليس إذا تم إرساله في Compose. (I5e0c4)،

الإصدار ‎1.11.0-alpha01

‫3 ديسمبر 2025

تم طرح androidx.compose.ui:ui-*:1.11.0-alpha01. يتضمّن الإصدار 1.11.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تزيل هذه السياسة العلامة isSemanticAutofillEnabled لواجهة المستخدم لأنّ ميزة "الملء التلقائي الدلالي" أصبحت مفعّلة تلقائيًا. (I849cf، b/455587954)
  • تم تغيير طريقة عثور الطريقة find findNearestAncestor القابلة للتنقّل على العُقد ذات الصلة. ستظهر الآن عناصر التحكّم من النوع نفسه (NodeKind) أثناء التنقّل. يتم حماية التغيير بالعلامة isTraversableDelegatesFixEnabled. (Ia3165، b/280804097)
  • إضافة عملية ربط TextEntryKey لـ ANI#isTextEntryKey (Ifde7b، b/399540654)
  • تم إيقاف Modifier.onFirstVisible() نهائيًا لأنّ سلوكه مضلّل ولا يلتزم دائمًا بالعقد الذي يدّعي الاسم أنّه يتبعه. على سبيل المثال، عند إضافتها إلى عنصر من LazyColumn، سيتم استدعاء دالة ردّ الاتصال هذه في كل مرة يصبح فيها هذا العنصر مرئيًا بعد التمرير. وهذا ليس ما قد يتوقّعه مستخدمو المعدِّل بهذا الاسم. ننصحك باستخدام Modifier.onVisibilityChanged() بدلاً من ذلك وتتبُّع ما إذا كان التنسيق مرئيًا من قبل يدويًا استنادًا إلى متطلبات حالة الاستخدام المحدّدة. (Ia7095، b/447601783)
  • تم تقديم MeasuredSizeAwareModifierNode، وهو مطلوب عند الحاجة إلى معاودة الاتصال onRemeasured(). يُرجى استخدام هذه الواجهة مباشرةً بدلاً من استخدام LayoutAwareModifierNode أكثر عمومية عندما لا تحتاج إلى عمليات ردّ الاتصال الأخرى. (If6fb0)

الإصدار 1.10

الإصدار 1.10.6

‫25 مارس 2026

تم طرح androidx.compose.ui:ui-*:1.10.6. يتضمّن الإصدار 1.10.6 هذه التعديلات.

الإصدار 1.10.5

‫11 مارس 2026

تم طرح androidx.compose.ui:ui-*:1.10.5. يتضمّن الإصدار 1.10.5 هذه التعديلات.

الإصدار 1.10.4

‫25 فبراير 2026

تم طرح androidx.compose.ui:ui-*:1.10.4. يتضمّن الإصدار 1.10.4 هذه التعديلات.

الإصدار 1.10.3

‫11 فبراير 2026

تم طرح androidx.compose.ui:ui-*:1.10.3. يتضمّن الإصدار 1.10.3 هذه التعديلات.

الإصدار 1.10.2

‫28 يناير 2026

تم طرح androidx.compose.ui:ui-*:1.10.2. يتضمّن الإصدار 1.10.2 هذه التعديلات.

الإصدار 1.10.1

‫14 يناير 2026

تم طرح androidx.compose.ui:ui-*:1.10.1. يتضمّن الإصدار 1.10.1 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح عُطل في التركيب القابل للإيقاف المؤقت عند تحريكه باستخدام LookaheadScope (I7e649، b/469669851)
  • تم إصلاح خطأ في Jetpack Compose Popup كان يؤدي إلى تمرير الإحداثيات المطلقة لحدود العنصر الأساسي إلى PopupPositionProvider، ما يؤدي إلى مواضع غير صحيحة للعناصر المنبثقة. تستخدم الآن عمليات احتساب موضع النوافذ المنبثقة الإحداثيات النسبية الصحيحة.(1f7edf،b/469940907)

الإصدار 1.10.0

‫3 ديسمبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0. يتضمّن الإصدار 1.10.0 هذه التعديلات.

الإصدار ‎1.10.0-rc01

‫19 نوفمبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-rc01. يتضمّن الإصدار 1.10.0-rc01 هذه التعديلات.

إصلاح الأخطاء

  • إرسال عمليات ردّ الاتصال visibilityChanged بشكل صحيح مع القيمة false عندما لا تكون قيمة minDurationMs صفرًا (2ac08b8، b/456384555)
  • لا تستدعِ الدالة onVisibilityChanged عند عدم ظهور العُقدة في البداية. (3969e8d، b/447364998)

الإصدار ‎1.10.0-beta02

‫5 نوفمبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-beta02. يتضمّن الإصدار ‎1.10.0-beta02 هذه التعديلات.

الإصدار ‎1.10.0-beta01

‫22 أكتوبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-beta01. يتضمّن الإصدار 1.10.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تضيف هذه السمة تحسينًا لإرسال تغيير التركيز. يمكن إيقاف هذه الميزة باستخدام isOptimizedFocusEventDispatchEnabled = false (I919fb، b/449228515)
  • تعديل جميع واجهات برمجة التطبيقات التي تتضمّن اللمس غير المباشر لاستخدام اسم واجهات برمجة التطبيقات التي تتضمّن المؤشر غير المباشر لتتطابق مع واجهات برمجة التطبيقات التي تتضمّن إدخال المؤشر (I238ce، b/451607214)
  • تُصدر الدوال TextDirection وTextAlign وHyphens وFontSynthesis وvalueOf الآن الخطأ IllegalArgumentException عند تلقّي قيمة غير معروفة. (I07c67)
  • عدِّل CompositionDataTree.makeTree لتمرير القيم التلقائية بدلاً من دالة التغليف. (Id64a6، b/445229688)
  • إنّ واجهات برمجة التطبيقات لقواعد الاختبار createComposeRule وcreateAndroidComposeRule وcreateEmptyComposeRule التي تقبل المَعلمة effectContext ثابتة، وتكون القيمة التلقائية للمَعلمة هي EmptyCoroutineContext. (If400c، b/450540702)
  • تمت إعادة تسمية "UnplacedStateAwareModifierNode" إلى "UnplacedAwareModifierNode" (I6a551، b/449719932)
  • التراجع عن ميزة "تحسين التقاط المحتوى" (Ic000b، b/442364065)
  • تمت إضافة علامة الميزة ComposeUiFlags.isRectManagerOffsetUsageFromLayoutCoordinatesEnabled. وقد أتاحت تحسين الأداء حيث تستخدم طلبات الإحداثيات، مثل LayoutCoordinates.positionInRoot()، الإزاحات المخزّنة مؤقتًا المتوفّرة لدينا في RectManager، بدلاً من اجتياز الشجرة بأكملها في كل طلب. (Ieaadc)

إصلاح الأخطاء

  • تستخدم PlaceholderSpan الآن الضبط غير الخطي لحجم الخط بشكل صحيح (Id2ead، b/324462728)
  • استخدِم ViewCompat لتنفيذ ثوابت التجاوب الحسّي التي تتوافق مع مستوى النظام الأساسي، مع الاعتماد على دعمها الاحتياطي للثوابت الأحدث. (Ib5a00)

الإصدار ‎1.10.0-alpha05

‫8 أكتوبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-alpha05. يتضمّن الإصدار 1.10.0-alpha05 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح الخطأ الذي تسبَّب في تحديد موضع غير صحيح للنوافذ المنبثقة المتداخلة في أعلى الشاشة، وأصبحت الآن مرتبطة بشكل صحيح بالنافذة المنبثقة الرئيسية. (Id4603، b/191279752)
  • تم إصلاح مشكلة التفاف التركيز مع طرق العرض الأخرى في التسلسل الهرمي. (I95223، b/446028624)
  • إصلاح الحقول التي تتضمّن مَعلمات مضمّنة غير متوفّرة في "نافذة الفحص" في تعبيرات lambda التي تم إنشاؤها بواسطة الإصدار 2.2.20 من Kotlin (I9855d، b/447110005)
  • إصلاح مشكلة حجب أسماء موارد الملء التلقائي بين واجهة المستخدم والوحدات الأساسية (I5da5a)

المساهمة الخارجية

  • تمت إعادة تسمية العنصر UiModes إلى AndroidUiModes للإشارة إلى أنّ الثوابت الخاصة به مأخوذة من Android API. (Ia0a77)

الإصدار ‎1.10.0-alpha04

‫24 سبتمبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-alpha04. يتضمّن الإصدار 1.10.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت ترقية صيغة قاعدة اختبار Compose التي تقبل المَعلمة CoroutineContext إلى إصدار ثابت. تمت إزالة التعليق التوضيحي التجريبي، ولم يعُد على المطوّرين الموافقة على استخدام واجهة برمجة التطبيقات هذه. (I74e6e)
  • تمت إزالة الحقل "ComposeUiFlags.isRectTrackingEnabled". لا يتم تفعيل هذه المنطق دائمًا. (Id78df)
  • تم إيقاف التحميل الزائد المضمّن لـ Updater#set نهائيًا لأنّه كان يغلف القيمة المقدَّمة عدة مرات (Id679e)
  • وضع علامة على السمة الدلالية onAutofillText على أنّها متوقّفة نهائيًا (I6f81c)
  • تم طرح UnplacedStateAwareModifierNode. توفّر هذه السمة دالة ردّ يتم استدعاؤها عندما لا يكون التصميم الذي تم وضعه سابقًا موضوعًا بعد الآن. (I8fdd8، b/309776096)
  • تم تصحيح المحتوى المتعلق بالسمة RetainObserver.onRetained وإضافة السمة RetainObserver.onUnused التي تشبه السمة RememberObserver.onAbandoned. (Ia6fc5)
  • تمت إضافة onVisibilityChangedNode()، وهو ينتج Modifier.Node، ويستخدمه Modifier.onVisibilityChanged() من خلال التفويض، ما يتيح التوسّع في هذه الوظيفة في Modifier.Node المخصّص. (I70d84، b/443001320)

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم عرض المحتوى المضمّن عند وضعه على السطر الأخير من النص المتعدد الأسطر الذي تم اقتطاعه باستخدام علامات الحذف، على الرغم من أنّ العنصر النائب يسبق المنطقة التي تم اقتطاعها. (I76aaf، b/441829208)

الإصدار ‎1.10.0-alpha03

‫10 سبتمبر 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-alpha03. يتضمّن الإصدار 1.10.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تعيد تسمية DelegatableNode.invalidateLayoutForSubtree إلى DelegatableNode.invalidateMeasurementForSubtree. (I94257، b/430106107)
  • يزيل أداة مطابقة isInHiddenAccessibilitySubtree المكرّرة. (I4476c، b/443792965)
  • تتضمّن هذه الإصدارات تتبُّع تسلسل استدعاء الدوال البرمجية المستند إلى مفتاح المجموعة والمفعَّل تلقائيًا لجميع التطبيقات التي تم تصغيرها. سيتم إنشاء ملف ربط Proguard لهذه التتبُّعات من خلال المكوّن الإضافي Compose Compiler Gradle بدءًا من الإصدار 2.3.0 من Kotlin. (Ifbcb5)
  • تستخدم Modifier.skipToLookaheadSize الآن دالة lambda مفعَّلة تلقائيًا لا تتيح تخطّي تغيير الحجم إلا عندما يكون الانتقال المشترَك نشطًا، تمامًا مثل Modifier.skipToLookaheadPosition. (Ibe0f5، b/432485585)
  • تمت إزالة ComposeUiFlags.isOutOfFrameDeactivationEnabled وأصبحت هذه الوظيفة مفعَّلة دائمًا. (I421ed)
  • نقل دوال المصنع لإنشاء مثيلات FillableData إلى العنصر المرافق بدلاً من استدعاء FillableData(value)، استخدِم طرق المصنع الجديدة: FillableData.createFrom(value). (I2e200، b/441719650)
  • إضافة BeyondBoundsLayoutModifierNode عقدة معدِّل جديدة لتنفيذ تخطيط خارج الحدود للبحث عن التركيز (I39be1، b/416133658)
  • يرسل FocusTargetModifierNode.requestFocus() التركيز إلى أحد العناصر الفرعية عندما لا يكون قابلاً للتركيز عليه. أصبحت هذه القيمة متوافقة الآن مع FocusRequester.requestFocus() وFocusRequesterModifierNode.requestFocus(). إذا لم تكن بحاجة إلى هذا السلوك، اضبط العلامة ComposeUiFlags.isRequestFocusOnNonFocusableFocusTargetEnabled على "خطأ" في تطبيقك. (Icca5c، b/436863604)
  • توفير حجم النافذة المستند إلى DP في WindowInfo (I9322b، b/424442112)
  • تمت إزالة العلامة isNestedScrollDispatcherNodeFixEnabled. (If451a)
  • إتاحة استخدام قيم التاريخ في ميزة "الملء التلقائي" في واجهة برمجة التطبيقات FillableData تمت إضافة val dateMillisValue: Long لاسترداد معلومات التاريخ، كما تمت إضافة أداة إنشاء FillableData(dateMillisValue: Long) مقابلة لإنشاء مثيلات FillableData مستندة إلى التاريخ. (Id072a)

المساهمة الخارجية

  • تم تقديم العنصر UiModes للإشارة إلى الثوابت المستخدَمة في التعليق التوضيحي UiMode (I03cb8)

الإصدار ‎1.10.0-alpha02

‫27 أغسطس 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-alpha02. يتضمّن الإصدار 1.10.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • عدِّل FillableData ليتوافق مع المكوّنات غير النصية، مثل أزرار التبديل والقوائم، بما في ذلك القيم المنطقية والصحيحة داخل FillableData ومنشئات المصنع لإنشاء مثيلات منطقية وقائمة من FillableData التي يتم تحويلها إلى AutofillValue في النظام الأساسي. تتم أيضًا إضافة السمة الدلالية والإجراء ذي الصلة. (Ia8105، Icc5cf)
  • في وضع عدم اللمس، يحدّد نظام العرض التركيز الأوّلي/التلقائي على أحد العناصر التي يمكن التركيز عليها على الشاشة. تتم إضافة هذه الميزة إلى "الكتابة باقتناع" ويمكن تفعيلها من خلال تفعيل ComposeUiFlags.isInitialFocusOnFocusableAvailable. (Ib9178)
  • تمت إزالة العلامة isPointerInteropFilterDispatchingFixEnabled. (Iaa589)
  • تمت إزالة العلامة isNestedScrollInteropPostFlingFixEnabled. (I2a756)
  • أضِف أدوات مطابقة دلالية لـ isHiddenFromAccessibility() وisInHiddenAccessibilitySubtree(). (I9f5a1)
  • تمت إضافة runCurrent() إلى MainTestClock لتنفيذ جميع المهام المستحقة في أداة الجدولة الأساسية. يهدف ذلك إلى إتاحة إجراء الاختبارات على StandardTestDispatcher، حيث تتم إضافة المهام إلى أداة الجدولة بدلاً من تنفيذها على الفور عندما يكون هناك تأخير بمقدار 0 ملي ثانية. يمكن إعداد اختبار لاستخدام StandardTestDispatcher من خلال إنشاء ComposeTestRule وتمرير StandardTestDispatcher إليه. يتم إجراء الاختبارات تلقائيًا على UnconfinedTestDispatcher، وفي هذه الحالة لن تحتاج إلى استدعاء runCurrent() مطلقًا.
  • تمت إضافة إمكانية إجراء الاختبارات على StandardTestDispatcher. في السابق، كان يتم إعداد إطار الاختبار (ولا يزال) باستخدام UnconfinedTestDispatcher، وهو يختلف عن بيئة الإنتاج بطرق دقيقة. يمكنك الآن تغيير هذا الإعداد من خلال إنشاء StandardTestDispatcher خاص بك وإضافته إلى effectContext عند إنشاء ComposeTestRule (أو عند استدعاء runComposeUiTest). (I334d0، b/254115946)
  • عدِّل الرمز البرمجي لإنشاء شجرة من العُقد من SlotTree. (I997d3)

إصلاح الأخطاء

  • تثبِّت واجهة مستخدم Compose الآن RetainScopes المتوافق مع مراحل النشاط على Android. سيستمر السلوك التلقائي الآن في الاحتفاظ بالقيم التي تم retainها عند إجراء تغييرات في الإعدادات. (Id4a09، b/177562901)

المساهمة الخارجية

  • تضيف هذه السمة إمكانية احتساب سرعة المؤشر استنادًا إلى أحداث المؤشر التي يتم تتبّعها باستخدام سلوك خاص بالمنصة.VelocityTracker (I621e8)

الإصدار ‎1.10.0-alpha01

‫13 أغسطس 2025

تم طرح androidx.compose.ui:ui-*:1.10.0-alpha01. يتضمّن الإصدار 1.10.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • سيؤدي الآن الضغط على مؤشر الماوس أو لوحة اللمس في ComposeView إلى إزالة التركيز تلقائيًا إذا لم يحدث الضغط ضمن حدود العقدة المركّز عليها. وينتج عن ذلك تجربة مستخدم "النقر لمسح التركيز" التي تكون أكثر توقعًا من السلوك الحالي عند استخدام أجهزة إدخال المؤشر. يمكن إيقاف هذا السلوك باستخدام واجهة برمجة تطبيقات AbstractComposeView.isClearFocusOnPointerDownEnabled جديدة. (I6322b، b/282963174)
  • إضافة واجهة FillableData لتوفير أنواع مختلفة من مكوّنات التعبئة التلقائية، بالإضافة إلى النص (If9bd2)
  • واجهة برمجة تطبيقات جديدة تتيح تفعيل العناصر المشترَكة وإيقافها ديناميكيًا، كما تتيح احتساب ما إذا كان هناك انتقال مستمر للعناصر المشترَكة. واجهة برمجة تطبيقات جديدة لإعداد حدود مستهدَفة بديلة عند التخلّص من العنصر المشترَك المستهدَف أثناء الانتقال واجهة برمجة تطبيقات جديدة للحصول على LayoutCoordinates الخاص بـ LookaheadScope (I18dd4، b/409819304، b/395670637)
  • إضافة العلامة isNestedScrollInteropIntegerPropagationEnabled للتحكّم في تجربة إرسال الأعداد الصحيحة إلى ميزة التوافق مع التمرير المتداخل (If8316)
  • تمت إضافة requestFocusForChildInRootBounds() إلى DelegatableNode لنقل التركيز إلى عنصر ثانوي يتداخل مع المستطيل المحدّد. (I001ef)
  • تمت إزالة العلامات isOnScrollChangedCallbackEnabled وisAdjustPointerInputChangeOffsetForVelocityTrackerEnabled وisFlingContinuationAtBoundsEnabled وisAutomaticNestedPrefetchEnabled وDragGesturePickUpEnabled وisPointerInteropFilterDispatchingFixEnabled وisNestedScrollInteropPostFlingFixEnabled وisNestedScrollDispatcherNodeFixEnabled (I36c18)
  • تمت إضافة التعليق التوضيحي @CheckResult إلى دالتَي البحث والاختيار SemanticsNode لفرض استخدام القيم التي يتم عرضها. (I6f86e، b/201652748)
  • تحسين أداء عملية تسجيل المحتوى (I3c7c0)
  • تم تقديم CompositionLocal التي يمكن استخدامها لتعديل فرشاة تمييز الملء الناجح في ميزة "الملء التلقائي". (I52329)
  • تم تقديم واجهة Interpolatable جديدة تتيح الاستيفاء التلقائي بين الأنواع المختلفة، على افتراض أنّ أحد الأنواع يعرف كيفية التحويل من النوع الآخر. يتم الاستفادة من هذه الواجهة في العديد من أنواع الإنشاء، مثل Brush وShape، ولكن يمكن استخدامها خارجيًا أيضًا. (I58eab)
  • تتيح الآن ميزة Scrollable إمكانية التعامل بشكل أفضل مع أحداث التمرير باستخدام عجلة الماوس الثنائية الأبعاد. تم إطلاق واجهة برمجة تطبيقات اختبار جديدة للمساعدة في اختبار حالات الاستخدام في MouseInjectionScope. لقد أضفنا أيضًا حمولة زائدة جديدة لطُرق التمرير في MouseInjectionScope وعلامة للتحكّم في السلوك الجديد تُسمّى isMouseWheel1DAxisLockingEnabled (I136df).
  • إضافة DeviceConfigurationOverrides لنوع لوحة المفاتيح وحالتها، ونوع التنقّل وحالته، وحالة شاشة اللمس، ونوع وضع واجهة المستخدم (I282f0)
  • تمت إضافة LineHeightStyle.Mode جديد باسم Tight. يساعد هذا الوضع في فرض ارتفاعات أسطر أصغر حتى عندما يكون من المحتمل أن تقطع الرموز الرسومية الأطول. (Id3849)
  • يحتوي النوع BaselineShift الآن على قيمة "غير محدّد" لمنع التعبئة. يحتوي النوع BaselineShift وHyphens وLineBreak وTextAlign وTextDirection الآن على isSpecified دوال مساعِدة. يحتوي النوع Hyphens وTextAlign وTextDecoration وTextDirection الآن على طريقتَي valueOf() وvalue اللتين تتيحان نشر البيانات على نحو متسلسِل/إلغاء النشر على نحو متسلسِل بكفاءة. (I8d44c)
  • تمت إضافة واجهة طريقة getDisplayName جديدة للسماح بأسماء عرض مخصّصة لمثيلات مَعلمات المعاينة. (I19bdf، b/241699422)
  • عند مقارنة قيم Dp بالقيمة Unspecified باستخدام علامة أصغر من أو أكبر من، يتم الآن عرض القيمة false دائمًا. يؤدي استخدام Dp.compareTo(Unspecified) دائمًا إلى عرض القيمة 0. سيؤدي ضبط العلامة ComposeUiUnitFlags.isDpCompareToChanged على "خطأ" إلى إعادة Dp.compareTo() إلى سلوكه السابق، حيث لا يؤدي دائمًا إجراء مقارنة بين Unspecified وless-than وgreater-than إلى عرض القيمة "خطأ"، كما أنّ compareTo() مع Unspecified يتطابق مع سلوك Float.compareTo(). (Ifa88b، b/429221319)

إصلاح الأخطاء

  • تغيير الحد الأدنى التلقائي لإصدار SDK من الإصدار 21 من واجهة برمجة التطبيقات إلى الإصدار 23 من واجهة برمجة التطبيقات (Ibdfca، b/380448311، b/435705964، b/435705223)
  • تم إصلاح مشكلة كانت تمنع إنشاء AndroidComposeViews جديدة أثناء إجراء انتقال. (I2e23e، b/340894487، b/287484338)
  • إصلاح خطأ في الألوان عند استخدام متّجه قابل للرسم يستخدِم لونًا واحدًا ويكون fillColor غير معتم أو شفاف تمامًا (I3b041، b/328677973)
  • تم إصلاح مشكلة عدم تعديل الرموز التي تم تحميلها من خلال painterResource باستخدام ألوان خاصة بالمظهر عند تغيير المظهر. (I85ea0، b/424416571)
  • إضافة دلالات onFillData وfillableData (I45d9e)
  • يتم الآن تفعيل ترميز الحالة الخاص بالمنصة دائمًا في StateRestorationTester. يتوافق ذلك مع سلوك الاختبار عند استعادة حالة التطبيق الفعلية، مثل عملية Parcelization على Android. (I38211، b/408154192، b/382294247)
  • إصلاح الأعطال العرضية عند طلب التركيز (57b31a11، b/431111149)

الإصدار 1.9

الإصدار 1.9.5

‫19 نوفمبر 2025

تم طرح androidx.compose.ui:ui-*:1.9.5. يتضمّن الإصدار 1.9.5 هذه التعديلات.

الإصدار 1.9.4

‫22 أكتوبر 2025

تم طرح androidx.compose.ui:ui-*:1.9.4. يتضمّن الإصدار 1.9.4 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة اختفاء محتوى النص المضمّن إذا كان في السطر الأخير من نص متعدد الأسطر تم اقتطاعه باستخدام علامة الحذف، حتى إذا لم يكن المحتوى المضمّن في المنطقة التي تم اقتطاعها. (I76aaf، b/441829208)
  • تم إصلاح مشكلة عدم استدعاء عمليات رد الاتصال الخاصة بأداة التعديل onLayoutRectChanged دائمًا عندما لا تكون قيمة debounceMillis صفرًا. (72aba47، b/445324854)

الإصدار 1.9.3

‫8 أكتوبر 2025

تم طرح androidx.compose.ui:ui-*:1.9.3. يتضمّن الإصدار 1.9.3 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح الخطأ الذي كان يتسبّب في عدم تلقّي معدِّلات onVisibilityChanged/onFirstVisible/onLayoutRectChanged لعمليات معاودة الاتصال إذا كان التصميم الذي يتم نقله يحتوي على أكثر من 170 عنصرًا فرعيًا. (4f2fdd، b/445356774)

الإصدار 1.9.2

‫24 سبتمبر 2025

تم طرح androidx.compose.ui:ui-*:1.9.2. يتضمّن الإصدار 1.9.2 هذه التعديلات.

إصلاح الأخطاء

  • يتم الآن تنشيط Modifier.onVisibilityChanged() بشكل صحيح عند فصل عقدة أو إعادة استخدامها. (Ic5ce20)
  • تعالج السمتان Modifier.onVisibilityChanged() وonLayoutRectChanged() الآن تخطيطات العناصر الرئيسية بشكل صحيح باستخدام placeWithLayer() لوضع العناصر الفرعية. (Ia05ac9)
  • بالنسبة إلى Modifier.onVisibilityChanged() وonLayoutRectChanged()، يجب إرسال إشعار بشكل صحيح في الحالات الحدّية، مثل إزالة طبقة أو معدِّل طبقة أو تعديل خصائص الطبقة. (Ia05ac)

الإصدار 1.9.1

‫10 سبتمبر 2025

تم طرح androidx.compose.ui:ui-*:1.9.1. يتضمّن الإصدار 1.9.1 هذه التعديلات.

إصلاح الأخطاء

  • إصلاح خطأ في الألوان عند استخدام متّجه قابل للرسم يستخدِم لونًا واحدًا ويكون fillColor غير معتم أو شفاف تمامًا (I3b041، b/328677973)

الإصدار 1.9.0

‫13 أغسطس 2025

تم طرح androidx.compose.ui:ui-*:1.9.0. يتضمّن الإصدار 1.9.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.8.0

  • يمكنك الاطّلاع على التغييرات المهمة في الإصدار 1.9.0 في مشاركة المدونة هذه.
  • تتطلّب عمليات فحص Lint المضمّنة في Compose الآن الإصدار 8.2.2 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" كحدّ أدنى. إذا لم تتمكّن من ترقية AGP، يمكنك بدلاً من ذلك ترقية Lint بشكلٍ منفصل باستخدام android.experimental.lint.version=8.8.2 (أو إصدار أحدث) في gradle.properties. لتشغيل عمليات التحقّق من أخطاء Compose البرمجية داخل بيئة التطوير المتكاملة، يجب استخدام Android Studio Ladybug أو إصدار أحدث.
  • تغيير غير متوافق: تنفّذ عُقد المعدِّل graphicsLayer الآن SemanticsModifierNode. يمكن أن يؤدي ذلك إلى إضافة SemanticsNodes جديدة إلى شجرة الدلالات، وبالتالي يؤدي إلى حدوث أخطاء في الاختبارات التي تضع افتراضات بشأن بنية شجرة الدلالات. على سبيل المثال، قد تفشل الاختبارات التي تستخدم onChild وonParent وonSibling وطرقًا أخرى مشابهة لتقديم تأكيدات إذا تمت إضافة عقدة جديدة بين العقدة الحالية والعقدة المستهدَفة. الطريقة المفضّلة لحلّ حالات الفشل هذه هي إضافة testTag إلى العقدة المستهدَفة مباشرةً. هناك طريقة أخرى وهي استخدام أداة مطابقة أكثر مرونة، مثل onNode(hasAnyAncestor(hasText("ancestor")) and hasText("target")). (I638b5)

الإصدار ‎1.9.0-rc01

‫30 يوليو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-rc01. يتضمّن الإصدار 1.9.0-rc01 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم تعديل الرموز التي يتم تحميلها من خلال painterResource بألوان خاصة بالمظهر عند تغيير مظهر النظام. (I85ea0، b/424416571)
  • إصلاح الأخطاء في الإصدارَين 21(Lollipop) و28(Pie) من واجهة برمجة التطبيقات حيث تمت إعادة تسمية طرق الرسومات المهمة أثناء تحسينها. (Iebf99، b/425120571، b/420462749)
  • تأكَّد من أنّه يتم استدعاء المعدِّلات التي تم إدراجها حديثًا onLayoutRectChanged في البداية. (l9aa91)، (lb348a)
  • تم إصلاح مشكلة عدم إبطال صحة ذاكرة التخزين المؤقت للإزاحة بشكل صحيح، ما يؤدي إلى استدعاء أدوات التعديل onLayoutRectChanged بإحداثيات غير صحيحة (ibd4cd)، (lddc57)
  • حلّ لمشكلة تلقّي التصاميم التي تم تدويرها أو تحريفها إحداثيات غير صحيحة من خلال المعدِّلات onLayoutRectChanged (lddc57، b/426750475)

المساهمة الخارجية

  • تم إصلاح مشكلة اختفاء عناصر dragAndDropSource في LazyList عند التمرير. شكرًا "فيكتور رندينا". (dc3bcd3، b/425894792)

الإصدار ‎1.9.0-beta03

‫16 يوليو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-beta03. يتضمّن الإصدار 1.9.0-beta03 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم تحرّك الظلال الداخلية المموّهة بشكلٍ موحّد بشكلٍ صحيح مع الإزاحة.

الإصدار ‎1.9.0-beta02

‫2 يوليو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-beta02. يتضمّن الإصدار 1.9.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تغيير الكائن المصاحب إلى تجريبي ليتطابق مع الفئة (I8452a)
  • تمت إزالة العلامة التجريبية isTrackFocusEnabled (I003fd)

إصلاح الأخطاء

  • عندما لا يكون هناك أي WindowInsets يقتطع من محتوى ComposeView، لا يتم تقديم قيم WindowInsetsRulers. (I71221)

الإصدار ‎1.9.0-beta01

‫18 يونيو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-beta01. يتضمّن الإصدار 1.9.0-beta01 هذه التعديلات.

التغييرات التي قد تؤدي إلى أعطال

  • تنفّذ عُقد المعدِّل graphicsLayer الآن SemanticsModifierNode. يمكن أن يؤدي ذلك إلى إضافة SemanticsNodes جديدة إلى شجرة الدلالات، وبالتالي يؤدي إلى حدوث أخطاء في الاختبارات التي تضع افتراضات بشأن بنية شجرة الدلالات. على سبيل المثال، قد تفشل الاختبارات التي تستخدم onChild وonParent وonSibling وطرقًا أخرى مشابهة لتقديم تأكيدات إذا تمت إضافة عقدة جديدة بين العقدة الحالية والعقدة المستهدَفة. الطريقة المفضّلة لحلّ حالات الفشل هذه هي إضافة testTag إلى العقدة المستهدَفة مباشرةً. هناك طريقة أخرى وهي استخدام أداة مطابقة أكثر مرونة، مثل onNode(hasAnyAncestor(hasText("ancestor")) and hasText("target")). (I638b5)

تغييرات واجهة برمجة التطبيقات

  • تم تغيير ShadowContext ليصبح واجهة محكمة (I3ce40)
  • إضافة طريقة متعددة الوحدات لإنشاء حدث لمس غير مباشر (للاختبار) (I22e4c)
  • يجعلIndirectTouchEvent.nativeEvent تجريبيًا. (I6fda5)
  • تعديل مساحة واجهة برمجة التطبيقات استنادًا إلى ملاحظات مجلس واجهة برمجة التطبيقات (Ibf378)
  • إزالة الثابت FrameRateCategory.NoPreference تمّت إعادة تسمية Modifier.requestedFrameRate إلى Modifier.preferredFrameRate. (I2f976)
  • ‫WindowInsetsRulers: تم تغيير rulersIgnoringVisibility إلى الحد الأقصى. تم تغيير getDisplayCutoutBounds() لتصبح دالة إضافية من PlacementScope. تم تغيير WindowInsetsAnimationProperties إلى WindowInsetsAnimation، وتم تغيير getAnimationProperties() إلى getAnimation(). (I3816f)
  • تم تغيير الفئة من ShadowParams إلى Shadow (I11cca)
  • تغيير حزمة واجهة برمجة التطبيقات الخاصة بعدد اللقطات في الثانية من androidx.compose.ui.ui إلى androidx.compose.ui (I8994e)
  • تم تغيير InsetsRulers ليكون في الرمز المشترك مع الاسم WindowInsetsRulers. تم تبسيط واجهة برمجة التطبيقات بحيث تكون جميع عمليات الإدراج WindowInsetsRulers. تم استخراج خصائص الصورة المتحركة غير الخاصة بالمسطرة إلى فئة AnimationProperties. يمكن استخدام WindowInsetsRulers.innermostOf() لدمج عدة WindowInsetsRulers. (I2f0c6، b/415012444)
  • تمت إضافة واجهة برمجة تطبيقات للأدوات من أجل تحليل معلومات المصدر التي أضافها برنامج التجميع في Compose. (Iceaf9، b/408492167)

إصلاح الأخطاء

  • تمت إزالة علامة isGetFocusedRectReturnEmptyEnabled بعد أن تم التحقّق من الميزة بالكامل. (Ife722)
  • تم إصلاح خطأ في performScrollToNode، والذي لم يكن يصل في بعض الحالات إلى العقدة المستهدَفة. باستخدام هذا الإصلاح، من المفترض أن يصل دائمًا إلى العقدة المستهدَفة في هذه الحالات. من الآثار الجانبية لهذا التغيير أنّ موضع التمرير الدقيق في نهاية الإجراء قد يختلف الآن، ما يؤثّر في اختبارات لقطات الشاشة والاختبارات التي تفترض موضع التمرير الدقيق. (I2c8a1)

الإصدار ‎1.9.0-alpha04

‫4 يونيو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-alpha04. يتضمّن الإصدار 1.9.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إضافة واجهات برمجة تطبيقات معدِّلة للظلال القابلة للتخصيص. (I2058d، b/160665122)
  • أضِف السمة SemanticsModifierNode.isImportantForBounds التي تحدّد ما إذا كان يجب أخذ العقدة في الاعتبار عند احتساب الحدود. تكون السمة صحيحة تلقائيًا ويمكن ضبطها على "خطأ" للإشارة إلى أنّه يجب عدم أخذ العقدة في الاعتبار بالنسبة إلى الحدود. (I7ebec)
  • أضِف دالة مصنع SemanticsPropertyKey للإعلان عن خصائص دلالية خاصة بنظام Android يتم توفيرها كإضافات تسهيل الاستخدام يتم عرضها من خلال AccessibilityNodeInfo.getExtras. (I2ed51)
  • تمت إزالة استخدامات ComposeUiFlags.isRemoveFocusedViewFixEnabled وإيقاف العلامة نهائيًا. (I50328)
  • تقديم إطار عمل جديد قابل للتخصيص للظلال يشمل ذلك DropShadowPainter وInnerShadowPainter بالإضافة إلى تبعيات DropShadow/InnerShadow. تتم مشاركة البنية الأساسية للظلال بحيث يمكن مشاركة الظلال نفسها التي تم إنشاؤها في مواقع متعددة بدون الحاجة إلى إعادة إنشاء الظلال n مرة. (I24f7a، b/160665122)
  • نقدّم CompositeShader وCompositeShaderBrush اللذين ينشئان نتيجة مركّبة بين برنامجَي تظليل. أضِف أيضًا ShaderBrush#transform لضبط مصفوفة تحويل للتظليل. (I2621a، b/160665122)

إصلاح الأخطاء

  • تم إصلاح خطأ في NestedScrollInteropConnection حيث كانت ترتيب طرق الإشارة غير صحيح بالنسبة إلى طرق العرض. (I56ad4)
  • في السابق، لم تكن مربّعات الحوار التي تظهر بملء الشاشة تظهر ضمن منطقة صورة مقطوعة للشاشة. تم إصلاح هذا الخطأ حتى تتمكّن مربّعات الحوار التي تتضمّن decorFitsSystemWindows = false وusePlatformDefaultWidth = false من الاستفادة من منطقة الصورة المقطوعة للشاشة. (I9e975)
  • تم إصلاح الخطأ الذي لم يتم فيه رسم مؤشر التركيز الأخضر في TalkBack بعد تفعيله أثناء تشغيل تطبيق Compose في الخلفية. (Ifd12a)

الإصدار ‎1.9.0-alpha03

‫20 مايو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-alpha03. يتضمّن الإصدار 1.9.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تضمن العلامة ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled أنّه عندما لا يكون هناك أي عنصر قابل للتركيز في ComposeView، يتم ضبط المستطيل على قيمة فارغة. يمنع ذلك عملية البحث المركّز من اختيار "العرض" الذي سيتم التركيز عليه. ويكون ذلك مهمًا بشكل خاص عندما يتضمّن محرر أسلوب الإدخال خيار NEXT (التالي) الذي قد يحاول التركيز على ComposeView، ولكن يتعذّر requestFocus() ذلك. (Ibd0e2، b/369256395)
  • إضافة العلامة isNestedScrollDispatcherNodeFixEnabled (I0d24a)
  • إعادة تسمية DialogProperties' dialogContentTitle إلى windowTitle (Ibd27b)
  • تم تقديم المعدّلين Modifier.onFirstVisible وModifier.onVisibilityChanged، وهما معدّلان رفيعا المستوى يستندان إلى Modifier.onLayoutRectChanged. تم تصميم هذه المعدّلات خصيصًا للتعامل مع العديد من متطلبات التطبيقات الشائعة، مثل تسجيل مرّات الظهور وتشغيل الفيديوهات تلقائيًا وما إلى ذلك. وقد تم تصميمها مع مراعاة الأداء لكي يمكن استخدامها في السيناريوهات المهمة المستندة إلى القوائم بدون خطر التأثير في أداء التمرير. بالإضافة إلى واجهات برمجة التطبيقات الخاصة بأدوات التعديل هذه، تمت إضافة واجهات برمجة تطبيقات أخرى إلى RelativeLayoutBounds من أجل توفير حالات الاستخدام هذه، فضلاً عن تسهيل مهمة المطوّرين في إنشاء أدوات تعديل مخصّصة مشابهة تناسب حالة الاستخدام الخاصة بهم تمامًا. (I759b8)
  • غيِّر القيمة setDiagnosticStackTraceEnabled إلى "تجريبي" لتوضيح أنّ هذه الميزة ستخضع للتطوير في المستقبل. (I11db3)
  • إضافة Modifier.scrollable2D وScrollable2DState وواجهات برمجة التطبيقات المصاحبة لإنشاء الحالة تم أيضًا تقديم دوال إضافية شائعة للتمرير. (Ic61c8، b/214410040)
  • لا يمكن مقارنة قيم الألوان في Compose ذات 64 بت مباشرةً مع قيم الألوان في Android ColorLongs لأنّ أرقام تعريف مساحات الألوان غير مرتبة لبعض مساحات الألوان. لتحويل مساحات الألوان في Android، تمت إضافة واجهتَي برمجة تطبيقات جديدتَين: toColorLong() وfromColorLong(). (I36899)
  • تمت إضافة ViewConfiguration.minimumFlingVelocity للسماح بالتحكّم في الحد الأدنى لسرعة التمرير السريع. (I11aab)

الإصدار ‎1.9.0-alpha02

‫7 مايو 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-alpha02. يتضمّن الإصدار 1.9.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أضِف dialogContentTitle إلى DialogProperties، ما يضبط عنوان نافذة المحتوى. bf9d670

إصلاح الأخطاء

  • تم إيقاف مساطر Window Insets مؤقتًا أثناء إصلاح الاختبارات الداخلية. 8d1402
  • تم إصلاح طريقة إضافة التغييرات في إدخال المؤشر إلى VelocityTracker في DragGestureNode، ويمكن التحكّم في ذلك باستخدام العلامة الجديدة isAdjustPointerInputChangeOffsetForVelocityTrackerEnabled.254ddb

الإصدار ‎1.9.0-alpha01

‫23 أبريل 2025

تم طرح androidx.compose.ui:ui-*:1.9.0-alpha01. يتضمّن الإصدار 1.9.0-alpha01 هذه التعديلات.

التغييرات في السلوك

  • تتطلّب عمليات فحص Lint المضمّنة في Compose الآن الإصدار 8.2.2 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" كحدّ أدنى. إذا لم تتمكّن من ترقية AGP، يمكنك بدلاً من ذلك ترقية Lint بشكلٍ منفصل باستخدام android.experimental.lint.version=8.8.2 (أو إصدار أحدث) في gradle.properties. لتشغيل عمليات التحقّق من أخطاء Compose البرمجية داخل بيئة التطوير المتكاملة، يجب استخدام Android Studio Ladybug أو إصدار أحدث.

تغييرات واجهة برمجة التطبيقات

  • يزيل العلامة لتفعيل عبارات التتبُّع لأداة تتبُّع مسار النتائج (تصحيح الأخطاء). (I1b2a1)
  • تم تغيير InnerRectRulers وOuterRectRules إلى طُرق بدلاً من ذلك. تمت إزالة المَعلمة name من واجهة برمجة التطبيقات العامة RectRulers. أصبحت DerivedRulers خيارًا في أداة الإنشاء لكلّ من "المسطرة العمودية" و"المسطرة الأفقية". تم استبدال MergedHorizontalRulers وMergedVerticalRulers بالطريقتَين minOf وmaxOf لإنشاء مثيلات. (Iee89f، b/408192133)
  • إيقاف androidx.compose.ui.LocalSavedStateRegistryOwner نهائيًا واستخدام androidx.savedstate.compose.LocalSavedStateRegistryOwner بدلاً منه (I5439f، b/377946781)
  • أضِف Modifier.keepScreenOn لضبط الشاشة على عدم إيقافها مؤقتًا أثناء العرض (Ib5af4، b/408284174)
  • أضِف سمة دلالية جديدة Shape، والتي يمكن ضبطها عندما يختلف شكل عنصر في واجهة المستخدم عن المستطيل المحيط به، مثل المستطيل ذي الزوايا الدائرية. (I1376f)
  • تم إصلاح مشكلة إرسال أحداث المؤشر في AndroidViews وإضافة العلامة isPointerInteropFilterDispatchingFixEnabled لحماية التغييرات. (I0e272، b/372055500، b/408002332)
  • لم يعُد FocusRestorer يثبّت العنصر الذي تم التركيز عليه سابقًا. على المستخدمين استخدام مفتاح لضمان أنّ العنصر الذي تم التركيز عليه سابقًا يتضمّن تجزئة التركيب نفسها، وذلك لاستعادة التركيز بنجاح. (I4203b، b/330696779)
  • السماح لـ "الكتابة الذكية" بتفعيل ViewTreeObserver.OnScrollChanged يتم تقديم هذا السلوك ضمن العلامة isOnScrollChangedCallbackEnabled. أضفنا أيضًا وظيفة موسّعة للسمة DelegatableNode dispatchOnScrollChanged. (I34b9d، b/238109286)
  • تم إيقاف currentCompositeKeyHash نهائيًا. يمكنك استخدام currentCompositeKeyHashCode كبديل. تشفّر واجهة برمجة التطبيقات البديلة التجزئة نفسها باستخدام عدد أكبر من البتات، ما يقلّل بشكل كبير من احتمال أن يكون لمجموعتين عشوائيتين غير مرتبطتين في التسلسل الهرمي للتركيب مفتاح التجزئة نفسه. (I4cb6a، b/177562901)
  • تتطلّب المشاريع التي تم إصدارها باستخدام Kotlin 2.0 استخدام الإصدار 2.0.0 أو إصدار أحدث من KGP (Idb6b5)
  • تمت إضافة إمكانية إجراء فحص lint للرمز FocusRequester للتأكّد من تذكّره داخل التركيب (I6bf91)
  • تمت إضافة إمكانية ضبط عدد اللقطات المفضّل في الثانية أو فئة عدد اللقطات في الثانية التي يجب عرضها على العنصر القابل للإنشاء (Ie5201)
  • عرض MotionEvent على Android (I17286)
  • إضافة getChecked() + setChecked(int) وإيقاف isChecked + setChecked(boolean) نهائيًا (Iaac9d)
  • يقبل المعدِّل graphicsLayer الآن blendMode وcolorFilter (Iab0e6)
  • تمت إضافة LocalResources composition local للاستعلام عن "الموارد". ستتم إعادة إنشاء LocalResources.current عند تغيُّر الإعدادات، لذا ستعرض طلبات البيانات من واجهات برمجة التطبيقات، مثل stringResource()، قيمًا معدَّلة. (I50c13، b/274786917)
  • عرض واجهة برمجة تطبيقات تجريبية للعناصر القابلة للإنشاء من أجل التعامل مع أحداث اللمس غير المباشرة (Icff57)
  • يحسّن هذا الإصدار عملية إعداد التقارير عن الاستثناءات التي لم تتم معالجتها والتي تم طرحها أثناء مرحلتَي التنسيق والرسم للمحتوى القابل للإنشاء. في السابق، كان حدوث استثناء غير معالج هنا يؤدي إلى تعطُّل أداة تنفيذ الاختبار وإنهاء حزمة الاختبار قبل الأوان. يمكن الآن تسجيل هذه الاستثناءات بشكل أفضل بدون إنهاء مجموعة الاختبارات. (I9928b، b/314128080)
  • تم إيقاف واجهة برمجة التطبيقات التجريبية GlobalAssertions نهائيًا. وكان الغرض من استخدامه هو إجراء عمليات التحقّق من إمكانية الوصول، لذا ننصحك باستخدام enableAccessibilityChecks() لهذا الغرض بدلاً من ذلك. (I50aa5)
  • لم يعُد SemanticsNodeInteraction.performTextInputSelection تجريبيًا، وأصبح يتيح الآن مَعلمة relativeToOriginal إضافية تتيح لك تطبيق التحديد على النص الأصلي غير المحوّل أو النص المحوّل. (I3a905، b/261561038، b/277018945)
  • إضافة واجهة برمجة تطبيقات لإنشاء قوائم نقطية مخصّصة من خلال AnnotatedString (I1d066، b/383269496، b/139326648)
  • إيقاف runWithTimingDisabled نهائيًا واستخدام runWithMeasurementDisabled بدلاً منه، لأنّه يصف السلوك بشكل أكثر وضوحًا، أي أنّه يتم إيقاف جميع المقاييس مؤقتًا. بالإضافة إلى ذلك، يجب عرض الفئة الرئيسية MicrobenchmarkScope لأنّه لا يمكن إعادة تعريف الدالة runWithMeasurementDisabled لفتح الوصول، لأنّها مضمّنة. (I9e23b، b/389149423، b/149979716)
  • تم تعديل واجهة برمجة التطبيقات ui-tooling Devices API لتشمل أجهزة أحدث. (Ia2ac1)
  • إضافة وضع "الجهاز اللوحي في الوضع العمودي" إلى مجموعة أحجام "شاشة المعاينة" لمساعدة المطوّر على مراعاة النوافذ الأكبر حجمًا (Ia1976)
  • إضافة واجهة برمجة تطبيقات لقيمة التتبُّع من أجل وضع علامة على عملية التتبُّع أو تسجيلها مع قيم في نقطة زمنية معيّنة تظهر قيم التتبُّع في Prefetto كمسار جديد يمكن الاطّلاع عليه من خلال المخطط الزمني لعملية التتبُّع. على أجهزة Android، يتم تنفيذها باستخدام Trace.setCounter. (Idcf48)

إصلاح الأخطاء

  • إصلاح عملية إرسال المراقبين الذين تم تذكّرهم في التركيب القابل للإيقاف المؤقت لتجنُّب إرسال المراقبين الذين تم تذكّرهم أو نسيانهم في عملية التطبيق نفسها (I570b2، b/404645679، b/407931790)
  • يمكن الآن ضبط android:dialogTheme للتحكّم في خصائص مربّع الحوار عندما تكون قيمة decorFitsSystemWindows هي false (I7922f، b/246909281)
  • تم إصلاح الخلل الذي كان يؤدي إلى إغلاق أي مربّع حوار عند رصد أي مسجّل حركات خارجه. (Ia78fd)
  • تتطلّب عمليات التحقّق من أخطاء Compose الآن الحدّ الأدنى من إصدار &quot;مكوّن Android الإضافي لنظام Gradle&quot; وهو 8.8.2 من سطر الأوامر، والإصدار Ladybug من &quot;استوديو Android&quot; على الأقل للاستفادة من ميزات بيئة التطوير المتكاملة. إذا كنت تستخدم إصدارًا قديمًا من "المكوّن الإضافي لنظام Gradle المتوافق مع Android"، يمكنك ضبط android.experimental.lint.version=8.8.2 في ملف gradle.properties لترقية إصدار Lint بدون التأثير في "المكوّن الإضافي لنظام Gradle المتوافق مع Android". (I6f2a8)
  • تمت إضافة سمة دلالية جديدة InputText تسجّل قيمة textfield قبل تطبيق عملية تحويل الإخراج. (Iae46a، b/395911609، b/176949051)
  • تم نقل واجهة برمجة التطبيقات enableAccessibilityChecks() التي تفعّل "عمليات التحقّق من إمكانية الوصول" على Android إلى حِزم منفصلة تكون compose:ui:ui-test-accessibility إذا كنت لا تستخدم TestRule وcompose:ui:ui-test-junit4-accessibility عند طلب TestRule (I3c318، b/391560768)
  • إتاحة تتبُّع تسلسل استدعاء الدوال البرمجية في LaunchedEffect وrememberCoroutineScope (I705c0، b/354163858)

المساهمة الخارجية

  • تغيير الدالة التجريبية runComposeUiTest لقبول حظر التعليق تمت أيضًا إضافة دالة runComposeUiTest متوقّفة نهائيًا لتوافق الرمز الثنائي (I3b88c، b/361577328)

الإصدار 1.8

الإصدار 1.8.3

‫18 يونيو 2025

تم طرح androidx.compose.ui:ui-*:1.8.3. يتضمّن الإصدار 1.8.3 هذه التعديلات.

إصلاح الأخطاء

  • تمت إزالة علامة isGetFocusedRectReturnEmptyEnabled بعد أن تم التحقّق من الميزة بالكامل. (Ife722)
  • تضمن العلامة ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled أنّه عندما لا يكون هناك أي عنصر قابل للتركيز في ComposeView، يتم ضبط المستطيل على قيمة فارغة. يمنع ذلك عملية البحث المركّز من اختيار "العرض" الذي سيتم التركيز عليه. ويكون ذلك مهمًا بشكل خاص عندما يكون لدى أداة IME خيار NEXT (التالي) حيث قد تحاول التركيز على ComposeView وrequestFocus() قد يتعذّر ذلك. (Ibd0e2، b/369256395)

الإصدار 1.8.2

‫20 مايو 2025

تم طرح androidx.compose.ui:ui-*:1.8.2. يتضمّن الإصدار 1.8.2 هذه التعديلات.

إصلاح الأخطاء

  • إصلاح خطأ NPE عند إزالة مربّع الحوار أثناء بث الأحداث النشط في مربّع الحوار (6a7e7f)
  • إصلاح مشكلة عدم تعديل onLayoutRectChange وفقًا للمخطط الزمني المحدود عند حدوث تعديلات على الرسم فقط (03b82d)

الإصدار 1.8.1

‫7 مايو 2025

تم طرح androidx.compose.ui:ui-*:1.8.1. يتضمّن الإصدار 1.8.1 هذه التعديلات.

إصلاح الأخطاء

  • حلّ بعض المشاكل في onLayoutRectChanged وLazyLayout d791b11
  • تخطّي طلبات إعادة القياس للعناصر المُعدّة مسبقًا أثّرت هذه المشكلة في أداء التمرير في التنسيقات الكسولة لأنّ الجلب المُسبَق لم يكن يعمل بكفاءة في بعض الحالات، وكان القياس يتم داخل الإطار. 742087a

الإصدار 1.8.0

‫23 أبريل 2025

تم طرح androidx.compose.ui:ui-*:1.8.0. يتضمّن الإصدار 1.8.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.7.0

  • يتضمّن الإصدار 1.8 من Compose ميزة الملء التلقائي الدلالي التي تمت إضافتها حديثًا. تأكَّد من أنّ إصدارات واجهة المستخدم وFoundation التي تستخدمها هي الإصدار 1.8 أو إصدار أحدث، لأنّ الملء التلقائي لمكوّنات النص يتطلّب أحدث إصدارات كلا الوحدتَين. لمزيد من التفاصيل حول استخدام واجهة برمجة التطبيقات والأمثلة، يُرجى الرجوع إلى مستندات ميزة "الملء التلقائي" هنا.
  • يتوافق الإصدار 1.8 من Compose مع أنواع إضافية من التجاوب الحسّي: Confirm وContextClick وGestureEnd وGestureThresholdActivate وReject وSegmentFrequentTick وSegmentTick وToggleOn وToggleOff وVirtualKey. يمكن الوصول إلى هذه الميزة من خلال LocalHapticFeedback، وتتوفّر تلقائيًا على أجهزة Android عندما تشير Vibrator API إلى أنّ اللمسات متوافقة.
  • أصبحت واجهات برمجة تطبيقات Focus المتعددة ثابتة الآن، بما في ذلك Modifier.focusRestorer() وonEnter وonExit FocusProperties (I6e667). يمكنك الآن تحديد FocusDirection عند الاتصال بالرقم requestFocus. أضفنا واجهة برمجة تطبيقات requestFocus(FocusDirection) إلى كل من focusRequester وFocusTargetModifierNode للسماح بالتركيز في اتجاه معيّن. (I5d9ec][https://android-review.googlesource.com/#/q/I5d9eca3a2cd283c1b84ad6b77d929ef9a49ce4cc], b/245755256)

الإصدار ‎1.8.0-rc03

‫9 أبريل 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-rc03. يتضمّن الإصدار 1.8.0-rc03 هذه التعديلات.

إصلاح الأخطاء

الإصدار ‎1.8.0-rc02

‫26 مارس 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-rc02. يتضمّن الإصدار 1.8.0-rc02 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تؤدي إلى إعادة إنشاء التركيب عند إزالة العرض المركّز من قائمة lazylist، وذلك عندما تكون طرق العرض المركّزة مضمّنة في بنية Compose الهرمية. (765562)

الإصدار ‎1.8.0-rc01

‫12 مارس 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-rc01. يتضمّن الإصدار 1.8.0-rc01 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح تعطُّل يحدث عند إزالة AndroidView تم التركيز عليه مع تفعيل لوحة مفاتيح افتراضية. (Ic725a)
  • إصلاح بعض المشاكل في عملية تنفيذ معالجة حالة التركيز الجديدة (b/395895685)
  • تم إصلاح مشكلة تمنع ميزة "الملء التلقائي" عند استخدام LaunchedEffect لطلب التركيز على حقل نصي. (b/392539099)

الإصدار ‎1.8.0-beta03

‫26 فبراير 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-beta03. يتضمّن الإصدار 1.8.0-beta03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم نقل واجهة برمجة التطبيقات enableAccessibilityChecks() التي تفعّل "عمليات التحقّق من إمكانية الوصول" في Android إلى حِزم منفصلة، وهي compose:ui:ui-test-accessibility إذا كنت لا تستخدم TestRule، وcompose:ui:ui-test-junit4-accessibility عند استدعاء TestRule (I547ef، b/391560768)
  • تمت إضافة سمة دلالية جديدة InputText تسجّل قيمة حقل نصي قبل تطبيق عملية تحويل الإخراج. (Iae46a)

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تتسبب في حفظ خدمات الملء التلقائي للنص المحوّل بدلاً من النص الأصلي. (Iae46a، b/395911609، b/176949051)

الإصدار ‎1.8.0-beta02

‫12 فبراير 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-beta02. يتضمّن الإصدار 1.8.0-beta02 هذه التعديلات.

الميزات الجديدة

  • تمت إضافة عملية فحص باستخدام أداة Lint للتحذير من إجراء طلبات إلى Configuration#screenWidth/heightDp، ويمكن استخدام LocalWindowInfo.current.containerSize بدلاً من ذلك لاسترداد حجم النافذة الحالية.

الإصدار ‎1.8.0-beta01

‫29 يناير 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-beta01. يتضمّن الإصدار 1.8.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم وضع علامة "متوقّف نهائيًا" على السمتَين ContextualFlowRow وContextualFlowColumn. تم طرح هذا المكوّن التجريبي في الإصدار 1.7 ولم يتم تثبيته بعد، وتم اعتبار عملية التنفيذ غير مرغوب فيها. في المستقبل، قد يتم توفير مكوّن يحلّ حالات الاستخدام التي كان من المفترض أن يحلّها هذا المكوّن.
    • تحتوي FlowRow وFlowColumn على عمليات تحميل تجريبية تم تقديمها في الإصدار 1.7 وتتضمّن المَعلمة overflow. تم إيقاف استخدام هذه المَعلمة نهائيًا، ويمكن استخدام عمليات التحميل الزائد بدون هذه المَعلمة بدلاً منها. سيكون السلوك التلقائي "للتجاوز" في هذه الحالات هو "القص"، كما كان منذ طرحه.
    • يمكن تحقيق العديد من حالات استخدام ContextualFlowRow باستخدام FlowRow، ولكننا ندرك أنّ هذا ليس صحيحًا بشكل عام. يمكن تنفيذ ContextualFlowRow بالكامل في مساحة المستخدم، ويمكن محاولة نسخ عملية التنفيذ وتعديلها إذا لزم الأمر. نأمل في المستقبل أن نجد طريقة مختلفة لحلّ حالات الاستخدام هذه. (Ibafec)
  • تمّت إزالة SemanticsNodeInteraction.semanticsId(). يمكنك استخدام SemanticsNodeInteraction.fetchSemanticsNode().id كبديل. (Ie397a)
  • تم إيقاف واجهات برمجة التطبيقات القديمة الخاصة بميزة "الملء التلقائي" نهائيًا. يمكنك استخدام واجهة برمجة التطبيقات الجديدة المستندة إلى الدلالات بدلاً من ذلك. (I943ff)
  • إعادة كتابة واجهة برمجة التطبيقات requestAutofill لتكون خارج مدير الملء التلقائي (Id1929)

إصلاح الأخطاء

  • تم إصلاح مشكلة التركيز التي كانت تؤدي إلى تخطّي ComposeView عند استخدام requestFocus() مع المَعلمة previouslyFocusedRect غير المنطقية (المتعلّقة باتجاه التركيز). (Ifdc2f، b/388590015)
  • تم إصلاح خطأ NPE الذي كان يظهر أحيانًا عند استخدام GraphicsLayer.record { this@ContentDrawScope.drawContent() }. إذا كنت تسجّل drawContent() بهذه الطريقة، احرص على استخدام دالة الإضافة GraphicsLayer#record داخل DrawScope، وليس دالة العنصر في GraphicsLayer. (I75fc0، b/389046242)
  • تم إصلاح مشكلة تخطيط النص التي تؤدي أحيانًا إلى ترجمة علامة الحذف الإيجازي بشكل غير صحيح أثناء الرسوم المتحركة. يمكنك الاطّلاع على b/389707025 لمزيد من المعلومات (Ie55b1، b/389707025)

الإصدار ‎1.8.0-alpha08

‫15 يناير 2025

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha08. يتضمّن الإصدار 1.8.0-alpha08 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • جعل AutofillManager فئة مجرّدة (I0a3b0)
  • تم إصلاح العديد من المشاكل المتعلّقة بالتركيز، بما في ذلك حالات التعطّل عند محاولة أداة IME التركيز على ComposeView بدون عناصر يمكن التركيز عليها، وتغيير التركيز داخل العنصر الفرعي AndroidViews، وطلب التركيز الذي يترك AndroidView. (Ia03c3، b/369256395، b/378570682، b/376142752)
  • تغيير FocusEnterExitScope.cancelFocus() إلى cancelFocusChange() (I89959)
  • يمكنك الآن حساب عمليات الإخفاء القابلة للتركيب باستخدام RectInfo.calculateOcclusions().
  • تمت إضافة دالة إضافة إلى DelegatableNode لتسجيل أداة معالجة لتغييرات التنسيق العام. (I68b59)

إصلاح الأخطاء

  • يستخدم النشاط الذي يتم استخدامه كمضيف للدالة المركّبة قيد الاختبار عند استخدام ComposeContentTestRule.setContent الآن المظهر Theme.Material.Light.NoActionBar، وذلك لتجنُّب تداخل ActionBar مع محتوى الاختبار عند استهداف الإصدار 35 من حزمة تطوير البرامج (SDK). لإيقاف هذا السلوك، يمكنك إزالة الاعتمادية في ui-test-manifest وإضافة إدخال نشاط في ملف AndroidManifest.xml الخاص بتطبيق الاختبار لـ ComponentActivity باستخدام المظهر الذي تختاره. (I7ae1b، b/383368165)
  • ستتجنّب خطوط الموارد التي تتضمّن إعدادات الصيغة نفسها الآن التخزين المؤقت الزائد الذي يؤدي إلى تطبيق إعدادات الصيغة غير الصحيحة. (If3dff، b/372044241)
  • تتيح AnnotatedString.fromHtml الآن استخدام علامات <ul>/<li>. (I7c2fe، b/299662276، b/139326648)

المساهمة الخارجية

  • تمت إضافة واجهة Clipboard جديدة وعنصر CompositionLocal لها. (I80809)

الإصدار ‎1.8.0-alpha07

‫11 ديسمبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha07. يتضمّن الإصدار 1.8.0-alpha07 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم عرض المالك من LayoutNode للأدوات. (I26f7f)
  • يجب أن تستخدم السمة LocalAutofillHighlightColor composition المحلية نوع Color. (I0e05b)
  • احتفظ بالرمز UrlAnnotation المتوقّف نهائيًا وطرق استخدامه مصنّفة على أنّها تجريبية. (Ic0021)

إصلاح الأخطاء

  • تم إصلاح عُطل IndexOutOfBoundsException عند استخدام LinkAnnotation داخل العنصر المركّب BasicText أو Text (be7605، b/374115892)
  • تم إصلاح المشكلة المتمثّلة في عدم قص خط المؤشر في حقول النص المملوءة ذات الشكل المخصّص. (I4f87f، b/380704151)
  • تم إصلاح مشكلة عدم ظهور الخلفيات في لقطات الشاشة الطويلة. (I4d57a)
  • تستخدم هذه المكتبة الآن تعليقات توضيحية بشأن إمكانية القيم الفارغة في JSpecify، وهي تعليقات توضيحية خاصة باستخدام النوع. على مطوّري Kotlin استخدام وسيطة المترجم البرمجي التالية لفرض الاستخدام الصحيح: -Xjspecify-annotations=strict (هذه هي القيمة التلقائية بدءًا من الإصدار 2.1.0 من مترجم Kotlin البرمجي). (Idfef8، b/326456246)
  • تعديل توافق Compose مع الألوان ذات النطاق الواسع والألوان بتقنية HDR عند التشغيل على الإصدار Android Q والإصدارات الأحدث (Icd8be، b/379135036)
  • سيتم الآن الرجوع تلقائيًا إلى الخط التلقائي عند تعذُّر تحميل خطوط الموارد، بدلاً من السلوك السابق الذي كان يتمثل في طرح استثناء في القياس. (Ib6a49)
  • تم إصلاح مشكلة فقدان التركيز عند فصل AndroidView وإعادة ربطه. (I53446)
  • قبول requestFocus() من إجراء تخطيط خارج الحدود (Ia8461)

المساهمة الخارجية

  • أضِف BringIntoViewResponderModifierNode إلى واجهة المستخدم، ما يوفّر طريقة جديدة لتنفيذ وظيفة "إظهار العنصر في إطار العرض"، كما يتيح تنفيذها على مستوى النظام الأساسي. (Ia6dd8)

الإصدار ‎1.8.0-alpha06

‫13 نوفمبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha06. يتضمّن الإصدار 1.8.0-alpha06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تضيف هذه السمة معدِّل stylusHoverIcon. (Iff20a، b/331289114)
  • تغيير "مدير الملء التلقائي" ليكون واجهة (I84914، b/376080755)
  • يضيف requestFocus(FocusDirection) إلى كل من focusRequester وFocusTargetModifierNode للسماح بالتركيز في اتجاه معيّن. (I5d9ec، b/245755256)
  • تم استبدال FocusProperties.enter وFocusProperties.exit بـ onEnter وonExit، وذلك باستخدام نطاق جهاز استقبال بدلاً من المَعلمة FocusDirection. (I6e667)
  • إضافة ميزة "الملء التلقائي" في شريط أدوات النص (Ie6a4c)
  • تغييرات واجهة برمجة التطبيقات على Modifier.focusRestorer() (I99c03):
    • تم تغيير اسم المَعلمة إلى "fallback"
    • المَعلمة هي الآن FocusRequester وليست دالة lambda
    • أصبحت المَعلمة غير فارغة مع ضبط القيمة التلقائية على "تلقائي"
  • إزالة التعليق التوضيحي @Experimental من واجهة أداة إدارة الملء التلقائي لا تزال الميزة قيد التطوير لاستهداف هذا الإصدار، ولكننا لا نريد طرح واجهة برمجة التطبيقات التجريبية (Id8398).
  • توفّر السمة LocalHapticFeedback الآن عملية تنفيذ تلقائية HapticFeedback عندما تشير واجهة برمجة التطبيقات Vibrator API إلى إمكانية استخدام ردود الفعل اللمسية. تمت إضافة ما يلي إلى HapticFeedbackType - Confirm وContextClick وGestureEnd وGestureThresholdActivate وReject وSegmentFrequentTick وSegmentTick وToggleOn وToggleOff وVirtualKey. تنفّذ الآن مكوّنات Wear Compose التي يمكن النقر عليها مطوّلاً، مثل Button وIconButton وTextButton وCard، عملية LONG_PRESS باللمس عند توفير معالج للنقر المطوَّل. (I5083d)
  • تتم إزالة OverscrollConfiguration وLocalOverscrollConfiguration، وإضافة rememberPlatformOverscrollFactory لإنشاء مثيل من عملية التنفيذ التلقائية لتجاوز حد التمرير أو تخصيص مَعلماتها. لإيقاف تجاوز حد التمرير، استخدِم LocalOverscrollFactory provides null بدلاً من LocalOverscrollConfiguration provides null. لتغيير لون التوهّج أو المساحة المتروكة، استخدِم LocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding) بدلاً من LocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding). (Ie71f9 وb/255554340 وb/234451516)
  • تمت إزالة واجهة برمجة التطبيقات التجريبية GlobalAssertions. كان الغرض من استخدامه هو إجراء عمليات التحقّق من إمكانية الوصول، لذا يمكنك استخدام enableAccessibilityChecks() لهذا الغرض بدلاً من ذلك. (I59322)

الإصدار ‎1.8.0-alpha05

‫30 أكتوبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha05. يتضمّن الإصدار 1.8.0-alpha05 هذه التعديلات.

الميزات الجديدة

تتوفّر ميزة "الملء التلقائي" في هذا الإصدار خلف علامة ميزة. نحن نعمل على تحسين الأداء، ونسعى إلى تلقّي ملاحظات مبكرة بشأن واجهات برمجة التطبيقات. من المتوقّع أن تتطوّر واجهات برمجة التطبيقات قبل أن تصبح مستقرة استنادًا إلى الملاحظات.

  • لتفعيل ميزة "الملء التلقائي"، اضبط قيمة ComposeUiFlags.isSemanticAutofillEnabled على true في onCreate واستخدِم أحدث إصدار من Compose Snapshot.
  • يتيح هذا الإصدار من ميزة "الملء التلقائي" حفظ بيانات الاعتماد يدويًا ومن خلال ميزة "اقتراح كلمة مرور قوية" ومن خلال التنقّل. تتيح هذه الميزة أيضًا التعبئة عندما يركّز المستخدم على حقل يمكن تعبئته تلقائيًا أو عندما يتم تفعيل ميزة "التعبئة التلقائية" من خلال شريط أدوات النص في مكوّنات النص. سيتم تمييز المكوّن للإشارة إلى اكتمال عملية الملء التلقائي.

تغييرات واجهة برمجة التطبيقات

  • تعديل واجهة "الملء التلقائي" لتتّبع بنية expect/actual (I22dce)
  • إضافة CompositionLocal التي يمكن استخدامها لتعديل درجة لون التمييز الذي يظهر عند نجاح عملية الملء التلقائي (I32092)
  • تمت إضافة واجهة برمجة التطبيقات Modifier.onRectChanged، وهي واجهة برمجة تطبيقات تتيح للمستخدم الاشتراك في الموضع والحجم النسبيين للجذر/النافذة/الشاشة في LayoutNode. تحلّ واجهة برمجة التطبيقات العديد من حالات الاستخدام التي يحلّها المعدِّل onGloballyPositioned الحالي، ولكنها تفعل ذلك مع تقليل النفقات العامة بشكل كبير، وتتضمّن واجهة برمجة التطبيقات تسهيلات لإزالة التكرار وتقييد عدد مرات معاودة الاتصال وفقًا لما تتطلبه حالة الاستخدام. (Id28c7 وb/372765423 وb/372757007 وb/372994338)
  • توسيع نطاق "مدير الملء التلقائي" ليشمل واجهتَي برمجة التطبيقات commit() وcancel() اللتين تساعدان المستخدمين في حفظ بيانات الاعتماد التي تم إدخالها حديثًا (I2da00)
  • تتضمّن هذه السمة واجهة AutofillManager جديدة يمكن استخدامها لتحسين رحلة المستخدمين في ميزة "الملء التلقائي"، بالإضافة إلى العلامة isSemanticAutofillEnabled لتفعيل هذا الإصدار الجديد من ميزة "الملء التلقائي". (I9d484)
  • تمت إضافة واجهة برمجة التطبيقات Modifier.onRectChanged، وهي واجهة برمجة تطبيقات تتيح للمستخدم الاشتراك في الموضع والحجم النسبيين للجذر/النافذة/الشاشة الخاصين بـ LayoutNode. تحلّ واجهة برمجة التطبيقات العديد من حالات الاستخدام التي يحلّها المعدِّل onGloballyPositioned الحالي، ولكنها تفعل ذلك مع تقليل النفقات العامة بشكل كبير، وتتضمّن واجهة برمجة التطبيقات تسهيلات لإزالة التكرار وتقييد عدد مرات معاودة الاتصال وفقًا لما تتطلبه حالة الاستخدام. (I3c8fa)
  • أضِف السمات الدلالية وأنواع البيانات لتوفير دعم موسّع لميزة "الملء التلقائي". (I52c7d)
  • أصبحت جميع الطرق في أداة إنشاء AnnotatedString غير تجريبية الآن (Ia89c8، b/261561823)

إصلاح الأخطاء

  • يمكن الآن أن تتلقّى طرق العرض المضمّنة في الإنشاء أحداثًا متعلقة بأداة التدوير إذا كانت في المقدّمة (I4d53a، b/320510084).
  • تم إصلاح مشكلة عدم تعديل أنواع الموارد المختلفة عند إجراء تغييرات في الإعدادات (Ia9b99، b/352336694)
  • تم حلّ مشكلة كانت تمنع TextField من العمل بشكل صحيح عند استخدام لوحة المفاتيح اليابانية POBox على بعض أجهزة Sony القديمة. (Ia9b99، b/373743376)
  • تم إصلاح مشكلة ظهور مربّعات الحوار في أسفل الشاشة بدلاً من توسيطها (Ia2ec، b/373093006)
  • لم يعُد استهداف المستوى 35 أو أعلى لواجهة برمجة التطبيقات يفرض ضبط قيمة decorFitsSystemWindows على "خطأ" في مربّعات الحوار. (Ibc94، b/364492593)
  • تم إصلاح عُطل يحدث عند نقل الطبقات بين النوافذ (مثل مربّع الحوار والمحتوى الرئيسي) (I675ba، b/330955281)

الإصدار ‎1.8.0-alpha04

‫16 أكتوبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha04. يتضمّن الإصدار 1.8.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إضافة عمليات ردّ الاتصال DelegatableNode#onDensityChange وDelegatableNode#onLayoutDirectionChange للسماح بتعديل حالة العقدة عند تغيُّرها (I04f3e، b/340662451)
  • تضيف هذه السمة WindowInfo#containerSize لتوفير حجم حاوية المحتوى في النافذة الحالية. يمكن استردادها باستخدام LocalWindowInfo. (Idc38c، b/369334429، b/360343819)
  • إصلاح المشكلة المتعلّقة بعناصر قابلة للتمرير متداخلة تتم إزالتها من شجرة العُقد أثناء عملية تمرير الإصبع ثم رفعه بسرعة مستمرة. ستلغي هذه العُقد الآن عملية التحريك السريع وسترسل حدث onPostFling بشكل صحيح مع السرعة المتبقية. نقدّم أيضًا العلامة NewNestedScrollFlingDispatchingEnabled للتحكّم في السلوك في حال حدوث تراجعات. ستتم إزالة العلامة قبل الإصدار التجريبي. (I05c37، b/371168883)
  • تم تقديم PointerInputModifierNode#touchBoundsExpansion، والذي يمكن استخدامه لتكبير حدود اللمس لمعدِّل إدخال مؤشر واحد. (Iccf02، b/335339283)
  • تضيف هذه السمة WindowInfo#containerSize لتوفير حجم حاوية المحتوى في النافذة الحالية. يمكن استردادها باستخدام LocalWindowInfo. (I27767، b/369334429، b/360343819)
  • أزِل readOnly من TextFields' لتثبيت الإصدار الأساسي الثابت. (I3aaba)
  • تتلقّى السمتان Paragraph وParagraphIntrinsics الآن قائمة بجميع التعليقات التوضيحية المطبّقة على AnnotatedString، بينما كانت تتلقّى في السابق قائمة بـ SpanStyles فقط (I12f80)

إصلاح الأخطاء

  • تم تعديل طريقة التعامل مع الفقرات في AnnotatedString. في السابق، كان بإمكانك إنشاء فقرات غير متداخلة فقط. أصبح بإمكان AnnotatedString الآن السماح بفقرات متداخلة بالكامل سيتم دمجها معًا، وفقرات متداخلة سيتم تقسيم الفقرة الخارجية على حدود الفقرة الداخلية، وسيتم دمج نمط الفقرة الداخلية مع نمط الفقرة الخارجية (Ic9554)
  • إصلاح عُطل في AnnotatedString مع LinkAnnotation بطول صفر (89aac6)

الإصدار ‎1.8.0-alpha03

‫2 أكتوبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha03. يتضمّن الإصدار 1.8.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تحديث إصدار Kotlin إلى 1.9 (I1a14c)
  • تم تقديم دور دلالي جديد باسم "لوحة عرض دوّارة" لمحاكاة سلوك القائمة في أدوات "التنقل بين الصفحات" لخدمات تسهيل الاستخدام. (Id354b، b/354109776، b/239672673)
  • تمّت إعادة تسمية invisibleToUser() إلى hideFromAccessibility. وستبقى وظيفتها كما هي. يمكنك الاطّلاع على المستندات لمزيد من التفاصيل. (Ib43a3)

إصلاح الأخطاء

  • تعديل المستندات الخاصة بأداة التعديل SensitiveContent (Ib0442)
  • تم إصلاح المشكلة المتمثّلة في تجاهل بعض مقاطع المخطط التفصيلي العامة عند استخدامها مع ظلال الارتفاع في بعض إصدارات Android
  • تم إصلاح المشكلة التي كانت تؤدي إلى تطبيق مقاطع فارغة عند تحديد مقاطع عامة ذات مخطط تفصيلي على إصدارات معيّنة من Android.
  • تم إصلاح الخطأ الذي يحدث عند تفعيل "محرّك طرق الإدخال" (IME) على "عرض" خارجي واستخدام الإجراء "التالي" لتفعيل التركيز على ComposeView. يتوافق سلوك clearFocus() مع سلوك العرض على الإصدارات الأقدم من 28 من واجهة برمجة التطبيقات، حيث يمكن أن يؤدي clearFocus() إلى التركيز على العرض التلقائي.
  • تم إصلاح مشكلة ظهور موضع الإعلان في عقد منفصلة في LazyList من خلال فصل إدارة التركيب الفرعي عن عمليات التنسيق المختلفة.
  • تم إصلاح مشكلة كانت تتسبب في وميض لوحة المفاتيح على الشاشة عند التبديل من TextField إلى EditText أو أي محرر آخر مستند إلى طريقة العرض.
  • سترسل الآن عقد Nested Scroll أحداث onPostFling بشكل صحيح بعد فصلها.
  • تحسينات عامة على الأداء

الإصدار ‎1.8.0-alpha02

‫18 سبتمبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha02. يتضمّن الإصدار 1.8.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • يتوفّر الآن الرمز TextOverflow.StartEllipsis والرمز TextOverflow.MiddleEllipsis اللذان يتيحان وضع علامة الحذف في بداية سطر النص الفردي أو وسطه. (I38913، b/185418980)

إصلاح الأخطاء

  • إصلاح مربع الحوار dismissOnClickoutside (39a3d، b/364508685)
  • عدم قصّ ظلال محتوى الحوار (e8e2f، b/363027803)
  • إصلاح السلوك الخاطئ عند انتقال البحث المركّز بين Compose وView (58377، b/350534714)

المساهمة الخارجية

  • يقبل AlignmentLines Map الآن النوعَين المحددين VerticalAlignmentLine أو HorizontalAlignmentLine. (I02912)
  • طريقة ByteArray.decodeToImageBitmap(): ImageBitmap شائعة جديدة (I83c21)

الإصدار ‎1.8.0-alpha01

‫4 سبتمبر 2024

تم طرح androidx.compose.ui:ui-*:1.8.0-alpha01. يتضمّن الإصدار 1.8.0-alpha01 هذه التعديلات.

الإصدار 1.7

الإصدار 1.7.8

‫12 فبراير 2025

تم طرح androidx.compose.ui:ui-*:1.7.8. يتضمّن الإصدار 1.7.8 هذه التعديلات.

الإصدار 1.7.7

‫29 يناير 2025

تم طرح androidx.compose.ui:ui-*:1.7.7. يتضمّن الإصدار 1.7.7 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح الخطأ IndexOutOfBoundsException عند تمرير AnnotatedString مع LinkAnnotation إلى العنصر القابل للإنشاء Text. (Ic96d2)
  • تم إصلاح مشكلة انتهاء المهلة في الاختبارات في بعض الحالات النادرة عند استخدام LinkAnnotation في AnnotatedString. (I04a03)

الإصدار 1.7.6

‫11 ديسمبر 2024

تم طرح androidx.compose.ui:ui-*:1.7.6. يتضمّن الإصدار 1.7.6 هذه التعديلات.

إصلاح الأخطاء

  • في السابق، كنّا نطرح خطأً كلّما صادفنا حدثًا رئيسيًا عندما كان نظام التركيز يتضمّن عمليات إبطال معلّقة. نحن الآن نسجّل خطأً بدلاً من ذلك (I7ea0، b/346370327).
  • تمت إزالة التعليق التوضيحي التجريبي من SemanticsPropertyReceiver.invisibleToUser(). سيتم إيقاف هذا الحقل نهائيًا في الإصدار 1.8 واستبداله بالحقل SemanticsPropertyReceiver.hideFromAccessibility(). (I448f0، b/376479686)
  • تم إصلاح مشكلة كانت تمنع TextField من العمل بشكل صحيح عند استخدام لوحة مفاتيح POBox اليابانية على بعض أجهزة Sony القديمة. (I94e0e، b/373743376)
  • تم إصلاح مشكلة متعلّقة بإمكانية الوصول حيث لم يعلن TalkBack عن inlineContent الخاص بـ BasicText. (I67bcb، b/376479686)

الإصدار 1.7.5

‫30 أكتوبر 2024

تم طرح androidx.compose.ui:ui-*:1.7.5. يتضمّن الإصدار 1.7.5 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح المشاكل التي تمنع عرض الارتفاع والقص بشكلٍ صحيح باستخدام المخططات التفصيلية المخصّصة.
  • تم إصلاح مشكلة تعطُّل النص التي تحدث مع LinkAnnotation بعرض صفر. (Ic1e2e)
  • يتم إصلاح إشعار في Talkback الزر عند إنشائه كعنصر Text قابل للنقر. (I1f588)

الإصدار 1.7.4

‫16 أكتوبر 2024

تم طرح androidx.compose.ui:ui-*:1.7.4. يتضمّن الإصدار 1.7.4 هذه التعديلات.

الإصدار 1.7.3

‫2 أكتوبر 2024

تم طرح androidx.compose.ui:ui-*:1.7.3. يتضمّن الإصدار 1.7.3 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة تؤدي إلى ظهور حدود مقطع فارغة عند تحديد مقطع عام على بعض إصدارات Android.
  • تم إصلاح الخطأ الذي يحدث عند تفعيل "محرّك طرق الإدخال" (IME) على "عرض" خارجي واستخدام الإجراء "التالي" لتفعيل التركيز على ComposeView. يتوافق سلوك clearFocus() مع سلوك العرض على الإصدارات الأقدم من 28 من واجهة برمجة التطبيقات، حيث يمكن أن يؤدي clearFocus() إلى التركيز على العرض التلقائي.
  • تم إصلاح مشكلة استخدام placeOrder غير صحيح لإبطال صحة البحث المسبق، وبالتالي تم إصلاح حالة حدودية تم فيها تخطّي موضع البحث المسبق.

الإصدار 1.7.2

‫18 سبتمبر 2024

تم طرح androidx.compose.ui:ui-*:1.7.2. يتضمّن الإصدار 1.7.2 هذه التعديلات.

إصلاح الأخطاء

  • تحسين أداء معلومات عقدة تسهيل الاستخدام وأحداث الدلالات من خلال إزالة التتبُّع المطوّل (I89156، b/362530618)
  • لن يتعطّل ComposeView بعد الآن عند تمرير حجم قياس كبير بشكل استثنائي (da5db، b/347036173)
  • تم إصلاح مشكلة في إمكانية الوصول إلى برامج قراءة الشاشة حيث لم يتم إصدار إشعارات LiveRegion على الأزرار. (f66fa7، b/348590026)

الإصدار 1.7.1

‫10 سبتمبر 2024

  • لم يتم إجراء أي تغييرات على عناصر Android. تمت إزالة -desktop عنصر وإضافة العنصرين -jvmStubs و-linuxx64Stubs. لا يُفترض استخدام أي من هذه الأهداف، بل هي عناصر نائبة للمساعدة في جهود Jetbrains Compose.

الإصدار 1.7.0

‫4 سبتمبر 2024

تم طرح androidx.compose.ui:ui-*:1.7.0.

التغييرات المهمة منذ الإصدار 1.6.0

يمكنك الاطّلاع على التغييرات المهمة في الإصدار 1.7.0 في مشاركة المدونة هذه.

الإصدار ‎1.7.0-rc01

‫21 أغسطس 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-rc01. يتضمّن الإصدار 1.7.0-rc01 هذه التعديلات.

التغييرات البارزة

  • يفرض الآن الوحدة ui:ui شرط توفّر الإصدار 1.7.0-rc01 أو إصدار أحدث من foundation:foundation كحدّ أدنى. يتم فرض ذلك لمعالجة عدم توافق السلوك بين واجهة المستخدم والطبقة الأساسية في ما يتعلق بتغييرات NestedScrollSource التي حدثت في وقت مبكر أثناء الإصدار 1.7.0-alpha01.

الإصدار ‎1.7.0-beta07

‫7 أغسطس 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta07. يتضمّن الإصدار 1.7.0-beta07 هذه التعديلات.

إصلاح الأخطاء

  • ستعرض الآن دوال إدخال النص ذات الصلة SemanticsNodeInteraction performTextReplacement وperformTextInput وperformTextClearance أخطاء تأكيد عند طلبها في TextFields للقراءة فقط. (I4ae8f)

الإصدار ‎1.7.0-beta06

‫24 يوليو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta06. يتضمّن الإصدار 1.7.0-beta06 هذه التعديلات.

الإصدار ‎1.7.0-beta05

‫10 يوليو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta05. يتضمّن الإصدار 1.7.0-beta05 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح الخلل الذي كان يؤدي إلى عدم قبول TextField للإدخال من لوحة المفاتيح الافتراضية الجديدة إلى أن يتم فقدان التركيز واستعادته عند تغيير لوحة المفاتيح الافتراضية.
  • تم إصلاح مشكلة كانت تؤدي فيها محاولات الاحتفاظ بمحتوى الطبقة إلى حدوث آثار جانبية غير مقصودة عند العرض باستخدام محتوى SurfaceView.

الإصدار ‎1.7.0-beta04

‫26 يونيو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta04. يتضمّن الإصدار 1.7.0-beta04 هذه التعديلات.

إصلاح الأخطاء

  • تجنُّب الأعطال عند قياس أسطر نصية كبيرة جدًا (مثل 10 آلاف حرف) (8157ab)
  • أوقِف إمكانية عرض البرامج لواجهة برمجة التطبيقات GraphicsLayer. (35ddd8)
  • تم إصلاح عُطل في منطق استمرار الطبقة. (70b13e)
  • تم التراجع عن تحسين إعادة استخدام عناصر الطبقة، لأنّه تسبّب في مشاكل في العرض. (70b13e)

الإصدار ‎1.7.0-beta03

‫12 يونيو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta03. يتضمّن الإصدار 1.7.0-beta03 هذه التعديلات.

الإصدار ‎1.7.0-beta02

‫29 مايو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta02. يتضمّن الإصدار 1.7.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية SemanticsProperties.Editable إلى IsEditable وتغيير SemanticsPropertyReceiver.editable إلى القيمة isEditable. أصبحت السمة الآن قيمة منطقية ويتم تحديدها دائمًا من خلال حقول النص. (I8acd8)
  • إعادة تسمية مَعلمة قياس أداء تسهيل الاستخدام (I3d440)
  • تم تعديل واجهة برمجة التطبيقات لتصميم الروابط: أصبح TextLinkStyles الآن جزءًا من الدالة الإنشائية LinkAnnotation والطريقة AnnotatedString.fromHtml (I90b2b). تمت أيضًا إزالة TextDefaults من المادة (I5477b)

إصلاح الأخطاء

  • تمت إعادة تسمية LayoutCoordinates.introducesFrameOfReference إلى LayoutCoordinates.introducesMotionFrameOfReference لتعكس الغرض منها بشكل أفضل. تمت إعادة تسمية الدالة ذات الصلة لحساب الإحداثيات استنادًا إلى هذا العلامة. (I3a330)

الإصدار ‎1.7.0-beta01

‫14 مايو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-beta01. يتضمّن الإصدار 1.7.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية "performCustomAccessibilityActionLabelled" إلى "performCustomAccessibilityActionWithLabel" و"performCustomAccessibilityActionWhere" إلى "performCustomAccessibilityActionWithLabelMatching". (I5387f)
  • ‫"AnnotatedString.hasEqualsAnnotations" أصبح الآن "hasEqualAnnotations" (I685c0)
  • تم تعديل واجهة برمجة التطبيقات للحصول على روابط ذات تصميم Material في النص. على وجه التحديد، تمت إزالة الطرق من TextDefaults لإنشاء LinkAnnotations ذات سمات وتحليل HTML باستخدام روابط ذات سمات. بدلاً من ذلك، تمت إضافة فئة TextLinkStyles تتيح تنسيق الروابط كمَعلمة إلى العنصر Text القابل للإنشاء. (I31b93)

إصلاح الأخطاء

  • إصلاح حالات استخدام إضافية عند إضافة معدِّلات إدخال المؤشر ديناميكيًا أثناء الأحداث 63e1504

الإصدار ‎1.7.0-alpha08

‫1 مايو 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha08. يتضمّن الإصدار 1.7.0-alpha08 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تضيف هذه السمة إمكانية استخدام عمليات تنفيذ الأشكال القابلة للتغيير. يمكن الآن ملاحظة Shape#createOutline داخل طبقات الرسومات، لذا ستؤدي قراءة قيم الحالة داخلها إلى إبطالها عند تغيُّر الحالة، ما يتيح إنشاء رسوم متحركة أكثر فعالية للأشكال. (Id1629، b/326070216)
  • تمت إعادة تسمية "isPositionedByParentWithDirectManipulation" إلى "introducesFrameOfReference". يُرجى العِلم أنّ هذا الإعداد أصبح له تأثير معاكس، ما يعني أنّه بشكلٍ تلقائي، تقدّم معظم LayoutCoordinates إطارًا مرجعيًا، ولن تكون السمة خطأ إلا عند وضعها تحت التلاعب المباشر. للاستعلام عن الموضع باستخدام العناصر التي تقدّم إطارًا مرجعيًا فقط، استخدِم positionInLocalFrameOfReference(...). أو positionInLocalLookaheadFrameOfReference من LookaheadScope (Ifc5f7)
  • LookaheadScope تم توفير واجهات برمجة التطبيقات بشكل ثابت (I21507)
  • تغيير دالة lambda للإجراء getScrollViewportLength وفقًا لملاحظات مجلس API. (Ibc74a)
  • تم تعديل واجهات برمجة التطبيقات الخاصة بمخطط GraphicsLayer لاستخدام مَعلمات ذات قيمة عشرية بدلاً من مَعلمات ذات قيمة عدد صحيح. تمت إزالة قيم UnsetOffset/UnsetSize IntSize الخاصة بالقيم الحدّية لصالح الثوابت غير المحدّدة المتوفّرة حاليًا في الفئات المضمّنة الخاصة بالإزاحة والحجم المستندة إلى القيم العشرية (I2fb03 وb/333863462).
  • عند إدخال بيانات الماوس أثناء الاختبارات، تقبل الآن MouseInjectionScope.click() وMouseInjectionScope.doubleClick() وMouseInjectionScope.tripleClick() وMouseInjectionScope.longClick() المَعلمة button: MouseButton لجعلها قابلة للتطبيق على نطاق أوسع. القيمة التلقائية هي MouseButton.Primary لجميع الطرق. (I31a23، b/190493367، b/261439695)
  • تمت إعادة تسمية onClicked إلى onClick داخل LinkInteractionListener. (Iaa35c)
  • تمّت إعادة تسمية TextInclusionStrategy.isInside إلى isIncluded. اجعل نوع القيمة التي تم إرجاعها في Paragraph/MultiParagraph#getRangeForRect() غير قابل لأن يكون فارغًا. (I51f26)

إصلاح الأخطاء

  • تم إصلاح مشكلة التقاط لقطة شاشة طويلة للحاويات التي يمكن التمرير فيها باستخدام reverseScrolling=true. (I7c59c)

المساهمة الخارجية

  • تمت إضافة إمكانية جلب البيانات مسبقًا للعناصر في LazyLists المتداخلة (مثل LazyColumn يعرض LazyRows متداخلة). من المتوقّع أن يقلّل هذا التغيير من انخفاض عدد اللقطات في الثانية أثناء التمرير في LazyLists هذه. الإعداد التلقائي للتنفيذ هو الجلب المسبق لأول عنصرَين متداخلَين، ولكن يمكن التحكّم في هذا السلوك من خلال واجهتَي برمجة التطبيقات الجديدتَين LazyLayoutPrefetchStrategy(nestedPrefetchItemCount) وLazyListPrefetchStrategy#onNestedPrefetch. (I51952)

الإصدار ‎1.7.0-alpha07

‫17 أبريل 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha07. يتضمّن الإصدار 1.7.0-alpha07 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم وضع علامة "متوقّف نهائيًا" على ClickableText. لإضافة روابط إلى النص، أنشئ AnnotatedString مع LinkAnnotation يتوافق مع الرابط، ثم مرِّر AnnotatedString إلى العنصر القابل للإنشاء Text. (I34d4b، b/323346994)
  • إضافة ViewConfiguration.HandwritingGestureLineMargin لإيماءات الكتابة بخط اليد إتاحة إيماءة JoinOrSplit لتنفيذ BasicTextField (Ie6e13، b/325660505)
  • لم يعُد FocusProperties.enter وFocusProperties.exit ميزتَين تجريبيتَين. لم يعُد FocusDirection.Enter وFocusDirection.Exit ميزتَين تجريبيتَين. لم يعُد FocusRequester.Cancel تجريبيًا (I461a1، b/261564106)
  • عند طلب إحداثيات Layout، يمكنك الآن استخدام الوسيطة excludeDirectManipulationOffset لاستبعاد الإزاحة التي تم ضبطها بواسطة Layouts الرئيسية التي وضعت العناصر التابعة لها باستخدام Placeable.PlacementScope.withDirectManipulationPlacement. وبالمثل، قد يضع الآن Layout العناصر التابعة له التي تغيّر موضعها بشكل متكرر باستخدام withDirectManipulationPlacement (مثل Scroll، الذي يتم تنفيذه تلقائيًا). يساعد ذلك في جعل الصور المتحركة المستندة إلى approachLayout أكثر سهولة في الاستخدام، إذ يمكن الآن التمييز بين الإزاحة التي سيتم تحريكها والإزاحة التي سيتم تطبيقها مباشرةً عند اتّخاذ قرار بتحريك طريقة العرض. (I60ec7)
  • تمت إزالة علامة الميزة الخاصة بلقطات الشاشة الطويلة. (I28648، b/329128246)
  • ستعرض LazyColumn الآن العناوين الثابتة بشكل صحيح في لقطات الشاشة الطويلة. (I8d239، b/329296635)
  • NestedScroll يتم استبدال مصادر السحب والإفلات (Drag and Fling) بمصدرَي UserInput وSideEffect لاستيعاب التعريف الموسّع لهذه المصادر الذي يتضمّن الآن الصور المتحركة (Side Effect) وعجلة الماوس ولوحة المفاتيح (UserInput). (I40579)
  • أصبحت الرموز ApproachLayoutModifierNode وModifier.approachLayout ثابتة الآن، وتمت إضافة الرمزين الجديدين isMeasurementApproachInProgress() وisPlacementApproachInProgress() ليحلا محل الرمزين القديمين isMeasurementApproachComplete() وisPlacementApproachComplete() على التوالي.
  • تمت إزالة المبدّل intermediateLayout المتوقّف نهائيًا. (I3e91c)
  • أعِد تسمية GraphicsLayer#buildLayer إلى record لتعكس طريقتَي begin/endRecording في واجهات برمجة التطبيقات المستندة إلى Displaylist، مثل RenderNode وPicture.
  • تم تعديل rememberGraphicsLayer للاستفادة من rememberObserver. (I312c1، b/288494724، b/330758155)
  • تم إيقاف UrlAnnotation نهائيًا، لذا يُرجى استخدام LinkAnnotation.Url بدلاً منها. إذا كنت تستخدم "تحديد نسق المواد"، استخدِم العنصر TextDefaults لإنشاء التعليق التوضيحي مع تطبيق "تحديد نسق المواد" عليه (I8d180، b/323346545).
  • تمت إضافة خيار تنسيق حالة الضغط إلى الروابط النصية، بالإضافة إلى التنسيق العادي وتنسيقَي التمرير والتركيز (I5f864، b/139312671)
  • تمت إعادة تسمية String.parseAsHtml إلى AnnotatedString.Companion.fromHtml. (I43dcd)
  • تمت إضافة وسيطات التنسيق (linkStyle وfocusedLinkStyle وhoveredLinkStyle) وأداة معالجة تفاعلات الروابط إلى الطريقة parseAsHtml. عند تحليل السلسلة الموسومة بتنسيق HTML باستخدام علامات <a>، ستنشئ الطريقة LinkAnnotation.Url لكل علامة من هذا النوع وتمرّر عناصر التصميم ومستمع التفاعل مع الروابط إلى كل تعليق توضيحي. (I7c977)
  • تتلقّى LinkAnnotation الآن وسيطات التنسيق المستندة إلى الحالة وLinkInteractionListener. أضِف هذه التعليق التوضيحي إلى AnnotatedString للحصول على رابط تشعّبي. من خلال تمرير focusedState و/أو hoveredState، يمكنك تحديد configuration المرئي للروابط عند التركيز عليها و/أو تمرير مؤشر الماوس فوقها. (I81ce4، b/139312671)
  • لم يعُد ImeOptions.hintLocales يقبل القيمة الخالية. إذا أردت تمرير قائمة Locale فارغة، يُرجى استخدام LocaleList.Empty. (Ic5bc4)

إصلاح الأخطاء

  • التعامل بشكل سليم مع بيانات أحداث الإدخال السابقة غير الصالحة أو التالفة (تجاهل بيانات الإزاحة غير الصالحة)
  • إصلاح أحداث المؤشر غير المتوقّعة عند إضافة أداة تعديل إدخال المؤشر بشكل ديناميكي قبل أداة تعديل إدخال مؤشر أخرى أثناء بث حدث إدخال مؤشر نشط (على سبيل المثال، بين حدثَي "المرور فوق العنصر" و"الخروج من العنصر" [الماوس/القلم]).

الإصدار ‎1.7.0-alpha06

‫3 أبريل 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha06. يتضمّن الإصدار 1.7.0-alpha06 هذه التعديلات.

الميزات الجديدة

  • تمت إضافة طريقة parseAsHtml للسلاسل ذات التنسيق: تتيح هذه الطريقة تحويل سلسلة مميّزة بعلامات HTML إلى AnnotatedString. يُرجى العِلم أنّ بعض العلامات غير متوافقة، مثلاً لن تتمكّن بعد من عرض قوائم نقطية. (I84d3d، I30626، b/139326648)
  • تمّت إضافة دعم تجريبي للقطات الشاشة الطويلة في حاويات التمرير في Compose باستخدام واجهة برمجة التطبيقات الرسمية لنظام التشغيل Android (ScrollCaptureCallback). هذه الميزة تجريبية وقد لا تتعامل حاليًا مع جميع الحالات بشكل صحيح. لهذا السبب، يتم إيقافها تلقائيًا في الوقت الحالي. للموافقة على هذه الميزة، اضبط العلامة ComposeFeatureFlag_LongScreenshotsEnabled على "صحيح". (I2b055، b/329296471)

تغييرات واجهة برمجة التطبيقات

  • تم تغيير fun ClipEntry.getMetadata() إلى val ClipEntry.clipMetadata. (I50155)
  • تمت إزالة الدالتَين ClipboardManager.getClipMetadata وClipboardManager.hasClip. يُرجى استخدام clipEntry.getMetadata() لقراءة البيانات الوصفية الخاصة بإدخال المقطع الحالي. تحقَّق أيضًا من نتيجة ClipboardManager.getClip لمعرفة ما إذا كانت فارغة أم لا، وذلك لتحديد ما إذا كانت "الحافظة" تتضمّن مقطعًا حاليًا. (I50498)
  • يمكنك الآن تمرير عناصر GraphicsLayer إلى دوال placeable.placeWithLayer() (I1b22f)
  • يقبل ClipboardManager.setClip الآن القيمة الخالية لتتمكّن من محو الحافظة. (I7d2e9)
  • تمت إضافة أرقام تعريف الموارد للمساعدة في إخفاء طرق العرض المستخدَمة كتفاصيل التنفيذ ضمن أدوات الإنشاء (I99531)
  • تمت إضافة طريقة تعليق GraphicsLayer#toImageBitmap لإتاحة عرض محتويات صورة نقطية في GraphicsLayer. هذه عملية عرض يتم تسريعها من خلال الأجهزة على مستوى واجهة برمجة التطبيقات 22 أو أعلى (بما في ذلك المستوى 22)، وتتوافق مع أكثر من% 99 من جميع أجهزة Android. في المستوى 21 من واجهة برمجة التطبيقات في Android، يتم الرجوع إلى العرض البرمجي. (I9e114)
  • طريقة مساعدة لتحويل RectF في Android إلى ComposeRect (I39925، b/325660505)
  • تحتوي جميع المَعلمات KeyboardOptions الآن على قيمة غير محدّدة تلقائيًا. تمت إضافة طريقة الدفع KeyboardOptions.merge.
  • تمت إعادة تسمية KeyboardOptions.autoCorrect إلى autoCorrectEnabled وتمّت إتاحة إمكانية ضبطها على قيمة فارغة، حيث تشير القيمة الفارغة إلى عدم تحديد أي قيمة. (Ia8ba0، b/295951492)
  • يستخدم المتغير BasicTextField(state) والمتغير BasicSecureTextField الآن KeyboardActionHandler بدلاً من KeyboardActions لمعالجة الإجراءات التي يتم اتخاذها باستخدام لوحة مفاتيح افتراضية. (I58dda)

الإصدار ‎1.7.0-alpha05

‫20 مارس 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha05. يتضمّن الإصدار 1.7.0-alpha05 هذه التعديلات.

الميزات الجديدة

  • إطلاق واجهة برمجة التطبيقات GraphicsLayer الجديدة لتسجيل أوامر الرسم في قائمة العرض، بالإضافة إلى سمات إضافية تؤثّر في عرض قائمة العرض يوفر ذلك حدودًا لعزل المشهد المعقّد وتقسيمه إلى أجزاء أصغر يمكن تعديلها بشكل منفصل عن بعضها البعض بدون إعادة إنشاء المشهد بأكمله. يمكن إجراء عمليات تحويل على GraphicsLayer بدون إعادة تسجيل قائمة العرض. على عكس Modifier.graphicsLayer، يتيح GraphicsLayer عرض محتوى قابل للإنشاء في أماكن أخرى، وهو مفيد في حالات الاستخدام المتحركة التي يُتوقّع فيها عرض المحتوى في مشاهد مختلفة.

تغييرات واجهة برمجة التطبيقات

  • لم يعُد GraphicsLayer.draw(Canvas) واجهة برمجة تطبيقات متاحة للجميع. يُرجى استخدام دالة الإضافة DrawScope.drawLayer(GraphicsLayer) بدلاً من ذلك لرسم الطبقة. (I7a7c0)
  • تقسيم restrictedConstraints() إلى طريقتَين: fitPrioritizingWidth() وfitPrioritizingHeight() (I6d7fd)
  • تمت إضافة HardwareCanvas رمز بديل لاستخدام Android L (I1c3b5، b/288494724)
  • تعديل إطار عمل Compose لعرض GraphicsContext composition local بالإضافة إلى تعديل عمليات تنفيذ Owner وDelegateableNode وdrawWithCache Modifier لعرض إذن الوصول إلى GraphicsContext من أجل الوصول المحدود النطاق الذي سيؤدي تلقائيًا إلى تنظيف مثيلات GraphicsLayer عند إيقاف Modifiers. (I64a2f، b/288494724)
  • تم تقديم InterceptPlatformTextInput للمساعدة في كتابة اختبارات منخفضة المستوى ذات صلة بطرق الإدخال وغيرها من حالات الاستخدام المنخفضة المستوى لطرق الإدخال. تم إيقاف PlatformTextInputTestOverride نهائيًا. (I862ed، b/322680547)
  • تمت إضافة دالة الإضافة GraphicsLayer.setOutline(Outline). (Ib81f4)
  • إضافة أداة إنشاء الدالة GraphicsContext لإنشاء مصنع لإنشاء مثيلات GraphicsLayer (Ib98d6، b/288494724)
  • تم توفير واجهة برمجة التطبيقات GraphicsLayer لمنح المطوّرين مرونة محدّدة في تسجيل أوامر الرسم التي يمكن استخدامها للرسم في مكان آخر، بالإضافة إلى تطبيق مؤثرات مرئية مختلفة على النتيجة النهائية. (I80245، b/288494724)
  • نقدّم Paragraph#getRangeForRect التي تعرض نطاقًا من النص الذي تغطيه مساحة مستطيلة معيّنة. (Iee516، b/325660505)
  • تمت إزالة الإعداد التجريبي التلقائي لـ BasicText باستخدام الوسيطة onLinkClicked. سيتم توفير واجهة برمجة تطبيقات بديلة لدعم الروابط التشعبية في المستقبل. (I107d5)

إصلاح الأخطاء

  • تمت إضافة تعريف واجهة برمجة التطبيقات GraphicsLayer expect/actual لإتاحة تسجيل أو إعادة تشغيل أوامر الرسم مع تأثيرات مرئية اختيارية للتركيب والتحويلات. تقديم واجهة GraphicsContext لاحتواء تبعيات الرسومات، بما في ذلك إنشاء وإدارة مثيلات GraphicsLayer (I4a8d6، b/288494724)
  • تم إصلاح مشكلة عدم توافق مع البحث عن التركيز الأحادي الأبعاد، حيث كان التركيز يتعذّر الخروج من ComposeView مضمّن بين طرق عرض أخرى. (I08fd4)

المساهمة الخارجية

  • تم نقل LocalLifecycleOwner من واجهة مستخدم Compose إلى lifecycle-runtime-compose حتى يمكن استخدام واجهات برمجة التطبيقات المساعدة المستندة إلى Compose خارج واجهة مستخدم Compose. نشكر "جيك وارتون" على مساهمته. (I6c41b، b/328263448)
  • عرض خصائص الانحياز العائم باستمرار على جميع الأنواع الفرعية للمحاذاة المستندة إلى الانحياز (I69f0f، b/328088992)

الإصدار ‎1.7.0-alpha04

‫6 آذار (مارس) 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha04. يتضمّن الإصدار 1.7.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إتاحة ميزة الكتابة بخط اليد باستخدام قلم الشاشة في BasicTextField2 على الأجهزة التي تعمل بالإصدارات الأحدث من Android U (I002e4)
  • في هذا التغيير، نضيف الإجراء الدلالي GetScrollViewportLength حتى نتمكّن من نقل معلومات حول المكوّنات التي يتمّ تصفّحها في Compose إلى نظام تسهيل الاستخدام. ينطبق هذا التغيير أيضًا على استخدام السمة المذكورة في "القوائم القابلة للتمرير" في Foundation. (Ic5fa2)
  • أصبحت FocusRequester.createRefs الآن إصدارًا ثابتًا (I4d92c، b/261436820)
  • تمت إضافة DelegatableNode.requireView() للسماح لعُقد المعدِّل بالحصول على View الحالي لنظام التشغيل Android بدون قراءة التركيبة المحلية. (I40768)
  • واجهة برمجة التطبيقات الجديدة Path.reverse() لعكس اتجاه المسار (I36348)
  • تمت إضافة hintLocales إلى KeyboardOptions لتزويد TextFields بإمكانية إرسال تلميحات إلى محرّرات طرق الإدخال (IME) تتضمّن إعدادات محلية معيّنة لضبط لغة مفضَّلة مسبقًا.
  • عرض السمة platformLocale من Locale التي تعرض عنصر النظام الأساسي الأساسي، مثل java.util.Locale (I921c6)

الإصدار ‎1.7.0-alpha03

‫21 فبراير 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha03. يتضمّن الإصدار 1.7.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • نقدّم لك ContextualFlowRow وFlowRow/Column المحسّنة مع MaxLines وOverflow. يسرّنا الإعلان عن تحسينات على FlowRow وFlowColumn التجريبيتين، إذ تتضمّنان الآن ميزة maxLines وإمكانية التعامل مع المحتوى الزائد، بالإضافة إلى طرح ContextualFlowRow وContextualFlowColumn لأول مرة. تم تصميم هذا التحديث لتوفير مكوّنات ذات أداء مثالي، حيث إنّ ContextualFlow* مثالية لعدد كبير من العناصر التي تستخدم إعدادات maxLines صغيرة وأزرار ديناميكية +N "عرض المزيد"، بينما FlowRow وFlowColumn مثاليتان لعدد صغير من العناصر، أي أقل من 100 عنصر. ملاحظة مهمة: للحفاظ على السلوك الحالي في FlowRow أو FlowColumn حيث يتم إنشاء جميع العناصر بغض النظر عما إذا كانت تتناسب مع الحد الأقصى للمحور المتقاطع، اضبط overflow على FlowRowOverflow.Visible أو FlowColumnOverflow.Visible أثناء عملية التهيئة. يمكنك الاطّلاع على ContextualFlowRowSample وFlowRowSample للحصول على أمثلة على هذه الميزات الجديدة أثناء عملها. (Ib9135، b/293577082)
  • أضِف السمة الدلالية maxTextLength التي يجب ضبطها في الحقول النصية التي تفلتر الحد الأقصى المسموح به لعدد الأحرف. (I24d9f، b/170648072)
  • تم إيقاف وحدة التغليف Modifier.inspectable نهائيًا. ستؤدي واجهة برمجة التطبيقات هذه إلى إبطال المعدِّل أكثر من اللازم، لذا لم يعُد يُنصح باستخدامها. ننصح المطوّرين بتنفيذ طريقة inspectableProperties() على ModifierNodeElement إذا كانوا يريدون عرض خصائص المعدِّل للأدوات. (Ib3236)
  • دالة إنشاء جديدة لـ PopupProperties تتيح التحكّم الكامل في علامات WindowManager.LayoutParams. (Ibb33e، b/312485503)
  • تم تقديم DelegatableNode.requireLayoutCoordinates() كطريقة للحصول على LayoutCoordinates الحالي الخاص بـ Modifier.Node بدون الحاجة إلى إلغاء onPlaced وتخزين الإحداثيات في خاصية بنفسك. (Ia8657)
  • تم تقديم DelegatableNode.currentLayoutCoordinates كطريقة للحصول على LayoutCoordinates الحالي الخاص بـ Modifier.Node بدون الحاجة إلى إلغاء onPlaced وتخزين الإحداثيات في عنصر بنفسك. (Iaebaa)
  • تم نقل واجهة برمجة التطبيقات BasicTextField2 وواجهات برمجة التطبيقات ذات الصلة ضمن حزمة androidx.compose.foundation.text2 إلى androidx.compose.foundation.text. (I9f635)
  • تمت إضافة واجهة برمجة تطبيقات ApproachLayoutModifierNode جديدة تتيح إنشاء منطق مخصّص للتعامل مع الطلبات في عقدة معدِّل صريحة. تم أيضًا إضافة واجهة برمجة تطبيقات تجريبية جديدة DeferredTargetAnimation للرسوم المتحركة التي يكون هدفها غير معروف عند إنشاء مثيل. (I60745)
  • واجهات برمجة تطبيقات Path جديدة للاستعلام عن اتجاه مسار واستخراج خطوط كفاف من Path (I63d04)
  • تمت إضافة PathHitTest وPath.contains(Offset) للتحقّق مما إذا كان Path يحتوي على نقطة معيّنة. (I3b218)
  • تعرض السمة TextLayoutResult الآن الطريقة getLineBaseline(lineIndex). يتيح ذلك قراءة خط الأساس لأي سطر من النص بالإضافة إلى سمات الملاءمة الحالية firstBaseline وlastBaseline. (Ide4e8، b/237428541)
  • تمت إضافة طريقة لمقارنة التعليقات التوضيحية لاثنتين من AnnotatedStrings فقط. (I32659)

إصلاح الأخطاء

  • تم إصلاح مشكلة في التوافق مع الإصدارات القديمة من SemanticsPropertyReceiver.performImeAction وSemanticsActions.PerformImeAction. (Id0528، b/322269946)

الإصدار ‎1.7.0-alpha02

‫7 فبراير 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha02. يتضمّن الإصدار 1.7.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم إصلاح مشكلة في توافق الرمز الثنائي مع SemanticsPropertyReceiver.performImeAction. (I65865، b/322269946)
  • لم يعُد منشئ PopupProperties الذي يأخذ المَعلمة usePlatformDefaultWidth تجريبيًا. (I8f8d2)
  • تمت إضافة تحميل زائد للدالة ComposeTestRule.waitUntil يأخذ وصفًا نصيًا للحالة المطلوب تضمينها في رسالة المهلة. (I9413e)
  • واجهة برمجة تطبيقات جديدة للدلالات unset() لإزالة خصائص الدلالات التي تتم إضافتها في سلسلة المعدِّل نفسها سمة دلالية جديدة isOpaque (I8c583، b/317966058، b/246056649)
  • تمت إزالة originalEventPosition من طريقة النسخ في واجهة برمجة التطبيقات العامة الخاصة بـ PointerInputChange. (I7bead)

إصلاح الأخطاء

  • تم إصلاح خطأ في إمكانية الوصول كان يسمح بالنقر على عناصر غير علامات التبويب وأزرار الاختيار عند تحديدها. (I2181c)
  • سيتضمّن الإصدار VelocityTracker الآن إصلاحًا يتيح إضافة النقاط تلقائيًا. يمكنك إيقاف الإصلاح من خلال ضبط VelocityTrackerAddPointsFix على "خطأ" في حال حدوث أي مشاكل. (Ib3877، b/269487059)
  • تم إصلاح عدم التوافق الثنائي مع الإصدارات القديمة في TextStyle وParagraphStyle. (I179f0، b/320819734)

المساهمة الخارجية

  • تمت إضافة أداة إنشاء DialogProperties جديدة بدون مَعلمات خاصة بالنظام الأساسي. (I45829)
  • تمت إضافة أداة إنشاء PopupProperties جديدة بدون مَعلمات خاصة بالنظام الأساسي. (I9a038)

الإصدار 1.7.0-alpha01

‫24 يناير 2024

تم طرح androidx.compose.ui:ui-*:1.7.0-alpha01. يتضمّن الإصدار 1.7.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم توسيع ClipboardManager من خلال إضافة ClipEntry وClipMetadata لدعم المحتوى العشوائي، مثل الصور.
  • تضيف واجهة برمجة التطبيقات DeviceConfigurationOverride إلى ui-test للسماح بتجاوز سلوك المحتوى قيد الاختبار محليًا، مثل تحديد حجم متاح أو لغة أو اتجاه التنسيق أو مقياس الخط أو المظهر.

الإصدار 1.6

الإصدار 1.6.8

‫12 يونيو 2024

تم طرح androidx.compose.ui:ui-*:1.6.8. يتضمّن الإصدار 1.6.8 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح حالات عدم الاتساق في تغيير حجم الخط عندما يكون مقياس الخط أقل من الحد الأدنى للجدول المحدّد. في هذه الحالة، يتم الآن الاستيفاء بين المقياس الخطي 1x وأدنى جدول محدّد، بحيث يزداد حجم الخط بشكل رتيب مع زيادة المقاييس. (Icbae3)

الإصدار 1.6.7

‫1 مايو 2024

تم طرح androidx.compose.ui:ui-*:1.6.7. يتضمّن الإصدار 1.6.7 هذه التعديلات.

الإصدار 1.6.6

‫17 أبريل 2024

تم طرح androidx.compose.ui:ui-*:1.6.6. يتضمّن الإصدار 1.6.6 هذه التعديلات.

إصلاح الأخطاء

  • إصلاح عُطل نادر في BasicTextField

الإصدار 1.6.5

‫3 أبريل 2024

تم طرح androidx.compose.ui:ui-*:1.6.5. يتضمّن الإصدار 1.6.5 هذه التعديلات.

الإصدار 1.6.4

‫20 مارس 2024

تم طرح androidx.compose.ui:ui-*:1.6.4. يتضمّن الإصدار 1.6.4 هذه التعديلات.

الإصدار 1.6.3

‫6 آذار (مارس) 2024

تم طرح androidx.compose.ui:ui-*:1.6.3. يتضمّن الإصدار 1.6.3 هذه التعديلات.

الإصدار 1.6.2

‫21 فبراير 2024

تم طرح androidx.compose.ui:ui-*:1.6.2. يتضمّن الإصدار 1.6.2 هذه التعديلات.

الإصدار 1.6.1

‫7 فبراير 2024 تم طرح androidx.compose.ui:ui-*:1.6.1. يتضمّن الإصدار 1.6.1 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة في التوافق مع الإصدارات القديمة من SemanticsPropertyReceiver.performImeAction وSemanticsActions.PerformImeAction. (Ie0bb2، b/322269946)
  • تعرض التصاميم الآن خطأ أثناء القياس عندما يعرض أحدها حجمًا كبيرًا بشكل غير طبيعي. يحدث هذا النوع من الأخطاء عادةً عندما تستخدم القياسات الحد الأقصى للقيود مباشرةً بدون التحقّق من Constraints.Infinity. سيساعد هذا الفحص المطوّرين في العثور على مشاكل في التنسيق الذي يحتوي على حجم غير صحيح بدلاً من التنسيق الذي يتضمّنه. (I339a9)

الإصدار 1.6.0

‫24 يناير 2024

تم طرح androidx.compose.ui:ui-*:1.6.0. يتضمّن الإصدار 1.6.0 هذه التعديلات.

الإصدار 1.6.0-rc01

‫10 يناير 2024

تم طرح androidx.compose.ui:ui-*:1.6.0-rc01. يتضمّن الإصدار 1.6.0-rc01 هذه التعديلات.

إصلاح الأخطاء

  • تم تحسين تنفيذ الرسومات المتجهة لتحسين الأداء من خلال تقليل عمليات إعادة التركيب الإضافية.

الإصدار ‎1.6.0-beta03

‫13 ديسمبر 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-beta03. يتضمّن الإصدار 1.6.0-beta03 هذه التعديلات.

الميزات الجديدة

  • يمكن الآن فصل LayoutCoordinates بدون فصل العقدة. يمكنك الحماية من ذلك في "أداة فحص تنسيق Compose" (If693).

إصلاح الأخطاء

  • أصبح PlatformImeOptions الآن فئة ملموسة بدلاً من واجهة. (If40a4)
  • تم إصلاح عمليات إعادة التركيب الإضافية الثابتة التي تحدث بسبب توفير قيم جديدة لـ LocalSoftwareKeyboardController وLocalTextInputService في كل مرة تتم فيها إعادة تركيب العنصر الجذر. (I42190، b/310510985)

الإصدار ‎1.6.0-beta02

‫29 نوفمبر 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-beta02. يتضمّن الإصدار 1.6.0-beta02 هذه التعديلات.

الإصدار 1.6.0-beta01

‫15 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-beta01. يتضمّن الإصدار 1.6.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • يأخذ المعدِّل DragAndDropTarget الآن DragAndDropTarget المستلِم بشكلٍ صريح ويتضمّن تعبير lambda للموافقة على جلسة السحب والإفلات. تتوفّر الآن دالتان مصنع لـ DragAndDropModifierNode. أحدهما لتلقّي عمليات النقل والآخر لنقل البيانات (I69481)
  • تم تعديل maximumFlingVelocity ليتم تمثيله كعدد عشري. تم تعديل المستندات لتكون أكثر وضوحًا بشأن maximumFlingVelocity. (I8adc7)
  • تمت إعادة تسمية onDragAndDropStart في مصنع DragAndDropModifierNode إلى acceptDragAndDropTransfer.تمت إضافة acceptsDragAndDropTransfer إلى أداة التعديل dragAndDropTarget لقبول المحتوى من جلسة سحب وإفلات. تعرض دالة lambda هذه قيمة DragAndDropTarget صالحة إذا كنت مهتمًا بجلسة السحب والإفلات. تم استبدال دوال lambda الأخرى لمعالجة أحداث السحب بهذه الدالة. تمت إضافة دالة مصنع DragAndDropTarget لتلقّي البيانات من جلسات السحب والإفلات (Iebf3a).
  • تمت إزالة DragAndDropInfo كنوع، ويتم الآن استخدام DragAndDropModifierNode.drag مع مَعلمات transferData وحجم الزخرفة ووظيفة lambda DrawScope الخاصة بسحب الزخرفة

    يحتوي DragAndDropTarget على طرق لأحداث معيّنة للسحب والإفلات بدلاً من أن يكون طريقة مجرّدة واحدة

    تمت إعادة تسمية onDragAndDropEvent في دالة المصنع الخاصة بـ DragAndDropModifierNode إلى onDragAndDropStart لتوضيح أنّ DragAndDropTarget المقدَّم صالح لجلسة سحب وإفلات معيّنة فقط

    تمت إزالة DragAndDropEventType (I645b1)

  • تمت إعادة تسمية "PlatformTextInputModifierNode.runTextInputSession" إلى "establishTextInputSession". (I03cd0)

  • تحسين أسماء واجهات برمجة التطبيقات الخاصة بالعُقد القابلة للاجتياز لجعلها أكثر وضوحًا (Ia4474)

  • استبدِل OriginalText بـ TextSubstitution. (Ifa5a8)

  • تمت إعادة تسمية "PlatformTextInputModifierNode.textInputSession" إلى "runTextInputSession". (Ie9c6b)

  • يتم اعتبار العناصر الفرعية من SubcomposeLayout (والتنسيقات المشابهة مثل LazyColumn المستندة إليها) التي يتم الاحتفاظ بها لإعادة استخدامها في المستقبل غير نشطة. تم تقديم واجهة برمجة تطبيقات جديدة لاختبار assertIsDeactivated() لاختبار هذه العُقد. ستستبعد بقية واجهات برمجة التطبيقات التجريبية العُقد التي تم إيقافها تلقائيًا. (I2ef84، b/187188981)

  • تمت إزالة FocusDirection.In وFocusDirection.Out واستخدام FocusDirection.Enter وFocusDirection.Exit بدلاً منهما (I2f660)

  • تعتمد واجهات برمجة التطبيقات الخاصة بـ Material SwipeToReveal (للبطاقات والرقائق) الآن على واجهة برمجة تطبيقات مستندة إلى الخانات (كما هو مقترَح في Compose) بدلاً من مثيلات مستندة إلى فئة البيانات لإنشاء هذه الخانات. هذا تغيير غير متوافق مع الإصدارات السابقة، لذا يُرجى الاطّلاع على العرض التوضيحي والرمز النموذجي للحصول على أمثلة حول كيفية استخدام واجهة برمجة التطبيقات الجديدة. (Ia8943)

  • تم إيقاف الدالة الإنشائية FontStyle(int) نهائيًا، لذا يُرجى استخدام FontStyle.Normal أو FontStyle.Italic بدلاً منها. (I66610)

  • تمت إعادة تسمية واجهة FontScalable إلى FontScaling (Ie804a)

إصلاح الأخطاء

  • لن يعرض SoftwareKeyboardController.show() لوحة مفاتيح افتراضية إذا لم يكن هناك محرِّر نصوص مركّز عليه. (I2165a، b/301477279)
  • سيتم الآن تجاهل أحداث "التحرير" لمفاتيح الأجهزة التي لم تتلقَّ حدث "الضغط" في "طريقة العرض Compose" نفسها. (Ib37b4، b/305518328)
  • إضافة إمكانية استخدام أداة العرض لـ "تدرّج الألوان الدائري" في ArcLine (I4d5bb)
  • نفِّذ الدالتَين equals وhashcode للسمة PageSize.Fixed. (Ie3ede، b/300134276)
  • إصلاح مشكلة توافق البرنامج الثنائي مع تغيير مساحة النافذة الداخلية (Iee695)
  • أزِل طبقة Material الأساسية من Material3 Chip/Button لأنّ اختبارات الأداء الدقيقة تُظهر أداءً أفضل بدونها. (I55555)
  • سيتم الآن استخدام TestDispatchers التي تم تمريرها كـ effectContext إلى اختبارات Compose لإنشاء اختبارات وساعات إطار. (Ia7178)

الإصدار ‎1.6.0-alpha08

‫18 أكتوبر 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha08. يتضمّن الإصدار 1.6.0-alpha08 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية دالة lambda onDrawDragShadow في Modifier.dragAndDrawSource إلى drawDragDecoration، كما تمت إعادة تسمية مَعلمة الحجم في DragAndDropInfo إلى dragDecorationSize. (Id0e30، b/303904810)
  • إضافة SemanticsNodeInteraction.isDisplayed() وSemanticsNodeInteraction.isNotDisplayed() للتحقّق مما إذا كانت العقدة المطابقة مرئية أم لا بدون التأكيد عليها أيضًا (I2c196، b/302100809)
  • تم تقديم القيمة الخاصة Unspecified للحقول TextAlign وTextDirection وHyphens وLineBreak من ParagraphTextStyle لاستبدال null. بما أنّ هذه الفئات هي فئات مضمّنة، نتجنّب تضمين النوع الأساسي من خلال استبدال القيمة القابلة للتصغير بالقيمة Unspecified. تم تعديل أدوات الإنشاء وعناصر الجلب والطرق الأخرى في TextStyle و"نمط الفقرة" لقبول المَعلمات المذكورة كأنواع غير قابلة للقيم الخالية. (I4197e، b/299490814)
  • أضِف حمولة زائدة GoogleFont لقراءة GoogleFont من XML. (If8f59)
  • تم إنشاء LoremIpsum PreviewParameterProvider كصف مفتوح. (I41bf5، b/266918816، b/300116360)

إصلاح الأخطاء

  • تستخدم FontFamilyResolver الآن Dispatchers.Main لروتينات مشتركة لإدارة ذاكرة التخزين المؤقت. (Ie8dd9)
  • تزيل AndroidViewBinding الآن بشكل متزامن مثيلات Fragment التي تم تضخيمها من خلال تضمين FragmentContainerView في التصميم كجزء من onRelease باستخدام commitNow (بدلاً من commit التي كانت تستخدمها سابقًا)، وبالتالي إصلاح المشاكل المتعلّقة بطريقة "التعديل المباشر" مع استبدال التركيبة عند إجراء تغييرات. (I58fbf)

الإصدار ‎1.6.0-alpha07

‫4 أكتوبر 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha07. يتضمّن الإصدار 1.6.0-alpha07 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم تقديم PlatformTextInputMethodTestOverride لكتابة اختبارات لمحرّرات النصوص المخصّصة. (Id159b)
  • تضيف هذه السمة المعدِّل dragAndDropSource لبدء جلسات السحب والإفلات، والمعدِّل dragAndDropTarget لتلقّي البيانات من جلسات السحب والإفلات. (Ib7828، b/286038936)
  • تمت إضافة مجموعتَي ColorList وColorSet اللتين تتجنّبان عمليات التخصيص. (I744bd)
  • تمت إضافة العلامة المؤقتة DisableNonLinearFontScalingInCompose لإيقاف الضبط غير الخطي لحجم الخط. اضبط DisableNonLinearFontScalingInCompose = true في اختباراتك إذا كنت بحاجة إلى وقت لتنظيفها. ستتم إزالة هذا الخيار في الإصدار 1.6.0-beta01 من Compose. (Ic9486)

إصلاح الأخطاء

  • تحسين تحليل الرسومات المتجهة القابلة للرسم بتنسيق XML (Ibb015)

الإصدار 1.6.0-alpha06

‫20 سبتمبر 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha06. يتضمّن الإصدار 1.6.0-alpha06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تحسينات إضافية على رموز Material (I3e08d)
  • تضيف هذه السمة إمكانية التنقّل للأعلى أو للأسفل في شجرة المعدِّلات للعثور على عُقد مشابهة. (I2d234)
  • تمت إضافة معاودة الاتصال onRestoreFailed() إلى أداة التعديل focusRestorer() (Ie1d43)
  • تمت إضافة تعليقات توضيحية androidx إلى واجهات برمجة تطبيقات الرسومات المختلفة لتحديد ColorInt وFloatRange وIntRange وSize وغير ذلك. (Id65c8، b/290950582)
  • إضافة showSystemUi=true إلى تعريف PreviewScreenSizes (Ib61d3)

التغييرات في السلوك

  • تستخدم ميزة "الكتابة الذكية" الآن ضبطًا غير خطّي لحجم الخط لتسهيل القراءة والاستخدام. عندما يكون حجم الخط > %100 في إعدادات النظام، سيزداد حجم النص الصغير بشكلٍ طبيعي، ولكن النص الكبير سيزداد حجمه قليلاً فقط. بالإضافة إلى ذلك، سيتم تعديل ارتفاعات الأسطر المحدّدة في SP تلقائيًا لتبقى متناسبة مع الارتفاع المقصود بنسبة% 100. يمكنك الاطّلاع على أفضل الممارسات المتعلّقة بتغيير حجم الخط للحصول على مزيد من المعلومات. (I11518)

الإصدار ‎1.6.0-alpha05

‫6 سبتمبر 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha05. يتضمّن الإصدار 1.6.0-alpha05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • فعِّل ميزة "التقاط المحتوى" في AndroidComposeViewAccessibilityDelegateCompat. (Ib2969)
  • يتم تحديد الحد الأقصى لسرعات التحريك السريع في مكوّنات العرض، مثل ScrollView وRecyclerView، عند ViewConfiguration.ScaledMaximumFlingVelocity. يتضمّن تطبيق "إنشاء" الآن إصدارًا خاصًا به من maximumFlingVelocity ينطبق على Draggable. (Ibf974)
  • تضيف هذه الحزمة عملية إنشاء أساسية لدعم واجهات برمجة التطبيقات التي تتيح السحب والإفلات على المنصات. (If84ce)
  • إضافة deviceId إلى RotaryScrollEvent (Iba3bf)
  • تم تعديل واجهة برمجة التطبيقات ui-tooling Devices API لتشمل أجهزة أحدث (Ib25b4)

الإصدار ‎1.6.0-alpha04

‫23 أغسطس 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha04. يتضمّن الإصدار 1.6.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أضفنا طريقة لإيقاف ReusableComposition، ما يؤدي إلى إزالة الملاحظات مع الإبقاء على العُقد. يمكن إعادة تفعيل التركيب الذي تم إيقافه من خلال استدعاء setContent. (Ib7f31)
  • إضافة واجهة ReusableComposition لإدارة مراحل النشاط وإعادة استخدام التركيبات الفرعية (I812d1، b/252846775)
  • تمت ترقية Modifier.focusGroup إلى واجهات برمجة تطبيقات ثابتة. (I7ffa3)
  • تمت إضافة تعليقات توضيحية androidx إلى واجهات برمجة تطبيقات الرسومات المختلفة لتحديد ColorInt وFloatRange وIntRange وSize وغير ذلك. (I70487، b/290950582)
  • تم تعديل واجهة برمجة التطبيقات ColorFilter لتضمين أنواع فئات فرعية ملموسة من أجل تحسين إمكانية فحص المَعلمات. (I5fe29)
  • إضافة مكتبة wear-tooling-preview لعرض قائمة بأجهزة Wear OS الصالحة التي يمكن استخدامها لمعاينات واجهة المستخدم (Ib036e)
  • تم إنشاء واجهة FontScalable للتعامل مع جزء تغيير حجم الخط في واجهة "الكثافة". (I2cf3f)

الإصدار ‎1.6.0-alpha03

‫9 أغسطس 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha03. يتضمّن الإصدار 1.6.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • نوع جديد من انتقالات الدخول/الخروج التي توسّع المحتوى أو تقلّصه استنادًا إلى حجم الحاوية المتحركة أثناء حركة الدخول والخروج أصبحت واجهة LookaheadScope Composable fun الآن ثابتة. (Ifb2ce)
  • تمت إضافة إمكانية ضبط privateImeOptions (Idb772)

إصلاح الأخطاء

  • سيعدّل PopupPositionProvider.calculatePosition الآن تلقائيًا موضع النافذة المنبثقة عند تغيير حالة القراءة في عملية الحساب. (I676a1، b/292257547)
  • تم إصلاح الحقول النصية التي تعرض لوحة المفاتيح ويمكن تعديلها عندما تكون قيمة readOnly صحيحة. تم أيضًا إصلاح مشكلة عدم ظهور لوحة المفاتيح عند تغيير قيمة readOnly من "صحيح" إلى "خطأ" أثناء التركيز. (I34a19، b/246909589)
  • توسيع نطاق استخدام تأكيدات عامة في اختبار واجهة المستخدم (I1f90d)

الإصدار ‎1.6.0-alpha02

‏26 تموز (يوليو) 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha02. يتضمّن الإصدار 1.6.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة أداة تحديد موقع الخدمة التي يمكن أن ينفّذها منفّذو Composition، ما يسمح بتنفيذ Composition الذي يفوّض عمليات البحث عن خدمة تفويض أخرى إلى Composition الأصلي. يجب عدم استدعاء هذه الدالة مباشرةً، ويتم استخدامها لتفعيل إنشاء واجهات برمجة تطبيقات تجريبية في وقت التشغيل يمكن العثور عليها من الإصدارات المُغلَّفة من أداة الإنشاء، مثلما تفعل وحدة واجهة المستخدم. (I296b9)
  • إعادة تصميم واجهة برمجة التطبيقات PlatformTextInput* بالكامل (I6c93a، b/274661182، b/267235947، b/277380808)
  • لم يعُد SoftwareKeyboardController وLocalSoftwareKeyboardController ميزتَين تجريبيتَين. أصبح LocalSoftwareKeyboardController الآن CompositionLocal مناسبًا أيضًا. (I4c364)
  • تم إيقاف LookaheadLayout وLookaheadLayoutScope نهائيًا في بعض الإصدارات السابقة، وتمت إزالتهما الآن. واجهات برمجة التطبيقات البديلة هي LookaheadScope التي يمكنها العمل مع أي تنسيق. (I12ac3)
  • تمت إضافة SemanticsNodeInteraction.requestFocus كطريقة أكثر ملاءمة وسهولة لاكتشاف كيفية طلب التركيز في الاختبارات. (Ie8722)
  • إضافة واجهات برمجة تطبيقات تجريبية لتسجيل تأكيدات عامة، لاستخدامها من قِبل أُطر الاختبار في المستقبل (I12d77)

إصلاح الأخطاء

  • سيتم الآن تأجيل الاستدعاء الأول update للدالة AndroidView إلى حين ربط العرض، بدلاً من تنفيذه عند تطبيق التركيبة التي تقدّم AndroidView. يحلّ هذا الخطأ مشكلة عدم إبطال معاودة الاتصال update إذا تم تغيير حالة تمت قراءتها على الفور من خلال تأثير. (Ie9438، b/291094055)

الإصدار ‎1.6.0-alpha01

‫21 حزيران (يونيو) 2023

تم طرح androidx.compose.ui:ui-*:1.6.0-alpha01. يتضمّن الإصدار 1.6.0-alpha01 هذه التعديلات.

الميزات الجديدة

  • إتاحة البحث المسبق في LazyList يسمح ذلك LazyList في عملية البحث المسبق بتجاوز أي صورة متحركة (مثل صورة متحركة لوضع العناصر، AnimatedVisibility، وما إلى ذلك) واحتساب حجم وموضع البحث المسبق لجميع العناصر الفرعية. بعد عملية التمرير المسبق، يمكن للأطفال في LazyList تحريك الشخصيات بشكل مستقل بما يتوافق مع الواقع كما يظهر في عملية التمرير المسبق.

تغيير في السلوك: تم ضبط قيمة includeFontPadding على false تلقائيًا في Compose

أصبحت قيمة includeFontPadding الآن false تلقائيًا (21d806) في Compose.

‫includeFontPadding هي سمة قديمة تتحكّم في ما إذا كان سيتم تضمين مساحة متروكة إضافية أعلى السطر الأول وأسفل السطر الأخير من النص لاستيعاب أي أحرف قد تمتد فوق خطوط الأساس أو تحتها.

سيؤدي تعديل إصدار Compose هذا إلى تغيير طريقة عرض جميع النصوص في واجهة المستخدم من خلال إزالة المساحة المتروكة الإضافية أعلى السطر الأول والسطر الأخير من كل نص تعرضه.

واعتمادًا على متطلبات واجهة المستخدم ومقاييس الخطوط التي تستخدمها، يجب أن تكون التغييرات بسيطة. ومع ذلك، قد تواجه بعض المشاكل، مثل: - تعطُّل اختبارات لقطات الشاشة. أصلِح واجهة المستخدم إذا لزم الأمر، وأعِد إنشاء الصور المرجعية. - النص غير محاذٍ قليلاً. أزِل أي مسافات سالبة مخصّصة أو أضِف مسافة إذا لزم الأمر.

يمكنك الموافقة على includeFontPadding باستخدام PlatformTextStyle لكل نص:

Text(
 text = myText,
 style = TextStyle(
   lineHeight = 2.5.em,
   platformStyle = PlatformTextStyle(
     includeFontPadding = true/false
   )
   /* … */
  )
)

يمكنك تفعيل includeFontPadding لجميع نصوصك من خلال ضبط أنماط Material. يُرجى العِلم أنّ أسماء المَعلمات ستختلف بين M2 وM3.

val Typography = Typography(
   body1 = TextStyle(
       fontFamily =    /* … */,
       fontSize =    /* … */,
       platformStyle = PlatformTextStyle(
           includeFontPadding = false
       )
   /* … */
   )
)

MaterialTheme(
   typography = Typography,
   /* … */
)

يمكنك الاطّلاع على مزيد من المعلومات حول Compose includeFontPadding في مستندات المطوّرين ومنشور المدوّنة هذا.

إذا واجهت مشاكل أو أخطاء مرتبطة بهذا التغيير، يمكنك تسجيل خطأ باستخدام أداة تتبُّع المشاكل.

تغييرات واجهة برمجة التطبيقات

  • دعم InputConnection#requestCursorUpdates (I0c69b)
  • تمت إضافة FocusRequester.saveFocusedChild وFocusRequester.restoreFocusedChild (Ic557e وb/272302679 وb/275157318)
  • أضِف النوع ResourceResolutionException لتضمين العناصر القابلة للرمي التي يتم طرحها عند محاولة تحميل مواد عرض الصور النقطية مع وصف لمسار مادة العرض التي تعذّر تحميلها. (I19f44، b/230166331، b/278424788)
  • تم تحسين إمكانية الوصول إلى الذاكرة وتخصيصها لتحسين الأداء. (Iede48)
  • أضفنا خصائص ودلالات وإجراءات لدعم ترجمة النصوص. (I4a6bc)
  • سمة جديدة في IntrinsincMeasureScope وعمليات تنفيذها (مثل MeasureScope) للإشارة إلى ما إذا كانت عملية قياس المقياس الحالية هي عملية بحث مسبق. (I7a812)
  • تم تعديل واجهة برمجة التطبيقات DrawScope لإتاحة إمكانية إعادة استهداف العرض في لوحة عرض مختلفة باستخدام كثافة/اتجاه تخطيط وحجم بديلَين.
  • تم تعديل DrawContext لإتاحة ضبط الكثافة واتجاه التصميم، بالإضافة إلى إمكانية ضبط لوحة العرض. (Ie1f9b، b/225408150)
  • تمت إضافة Paragraph#fillBoundingBoxes لاحتساب مربّعات الحدود الخاصة بالأحرف. (If30ee)
  • تمت إضافة مجموعة من MultiPreviews الشائعة (Ia5a27)

إصلاح الأخطاء

  • تمت إضافة واجهة FocusTargetModifierNode يمكن استخدامها لإنشاء FocusTarget مخصّص. (I9790e)
  • تمت إعادة تسمية المَعلمات fallback* في الدالة الإنشائية TextMeasurer إلى default*. (I940a5)
  • تمت إعادة تسمية "SemanticsPropertyReceiver.performImeAction" إلى "onImeAction" و"SemanticsActions.PerformImeAction" إلى "OnImeAction". (I8e841)
  • تضيف هذه السمة "العجلة" للتمييز بين التمرير باستخدام الماوس والسحب في التمرير المتداخل (في NestedScrollConnection تحديدًا). (Ie57e4)
  • تمت إضافة واجهة برمجة التطبيقات asComposePaint لاستبدال toComposePaint لأنّ العنصر الذي يتم عرضه يغلّف android.graphics.Paint الأصلي (I22b4c)
  • إيقاف SemanticsProperties.imeAction نهائيًا واستبداله بمعلَمة جديدة في SemanticsActions.performImeAction (I4a587)
  • تمت إضافة إمكانية التحديد باستخدام الماوس. سيتوسّع التحديد المستند إلى اللمس بمقدار كلمة، وسيتقلّص بمقدار حرف. (Ic0c6c، b/180639271)
  • تُطلق الآن طرق Paragraph التي كانت تُطلق AssertionError لإزاحات خارج الحدود الخطأ IllegalArgumentException كما تفعل MultiParagraph. (I549d3، b/243338896)

الإصدار 1.5

الإصدار 1.5.4

‫18 أكتوبر 2023

تم طرح androidx.compose.ui:ui-*:1.5.4. يتضمّن الإصدار 1.5.4 هذه التعديلات.

الإصدار 1.5.3

‫4 أكتوبر 2023

تم طرح androidx.compose.ui:ui-*:1.5.3. يتضمّن الإصدار 1.5.3 هذه التعديلات.

إصلاح الأخطاء

  • (b/301209788) كان TextField في بعض الأحيان يطبّق الأوامر السابقة بشكل غير صحيح عند التركيز على الإدخال باللغة الكورية وإدخاله، ما يؤدي إلى فقدان الأحرف.

الإصدار 1.5.2

‫27 سبتمبر 2023

تم طرح androidx.compose.ui:ui-*:1.5.2. يتضمّن الإصدار 1.5.2 هذه التعديلات.

إصلاح الأخطاء

  • تمت إضافة حلّ بديل للأعطال التي تحدث عند الوصول إلى واجهة برمجة تطبيقات التمرير للأعلى أو للأسفل من سلسلة الخلفية.
  • إصلاح مشكلة إضافة العُقد غير المرفقة إلى شجرة الدلالات

الإصدار 1.5.1

‫6 سبتمبر 2023

تم طرح androidx.compose.ui:ui-*:1.5.1. يتضمّن الإصدار 1.5.1 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح الحقول النصية التي تعرض لوحة المفاتيح ويمكن تعديلها عندما تكون قيمة readOnly صحيحة. تم أيضًا إصلاح مشكلة عدم ظهور لوحة المفاتيح عند تغيير قيمة readOnly من "صحيح" إلى "خطأ" أثناء التركيز. (I34a19، b/246909589)

الإصدار 1.5.0

‫9 أغسطس 2023

تم طرح androidx.compose.ui:ui-*:1.5.0. يتضمّن الإصدار 1.5.0 هذه التعديلات.

الإصدار 1.5.0-rc01

‏26 تموز (يوليو) 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-rc01. يتضمّن الإصدار 1.5.0-rc01 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح عُطل يحدث عند استخدام SubcomposeLayout داخل movableContentOf().

الإصدار ‎1.5.0-beta03

‫28 حزيران (يونيو) 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-beta03. يتضمّن الإصدار 1.5.0-beta03 هذه التعديلات.

إصلاح الأخطاء

  • تمت إضافة واجهة FocusTargetModifierNode التي يمكن استخدامها لإنشاء FocusTarget مخصّص. (Ifb1d6)
  • تم إصلاح مشكلة في عناصر Dialog وPopup القابلة للإنشاء قد تؤدي إلى عدم تغيير حجم النافذة الفرعية على النحو المتوقّع عند استخدام usePlatformDefaultWidth=true. (I112ee)

الإصدار ‎1.5.0-beta02

‫7 يونيو 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-beta02. يتضمّن الإصدار 1.5.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة التطبيقات asComposePaint لإتاحة استخدام مثيل android.graphics.Paint في Compose

إصلاح الأخطاء

  • تمت إضافة واجهة برمجة التطبيقات asComposePaint لاستبدال toComposePaint لأنّ العنصر الذي يتم عرضه يغلّف android.graphics.Paint الأصلي (I22b4c)

الإصدار ‎1.5.0-beta01

‫24 مايو 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-beta01. يتضمّن الإصدار 1.5.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة عمليات التخصيص في إعادة التركيب، والصور المتحركة للألوان، وAndroidComposeView (Ib2bfa)
  • إضافة وظيفة مساعدة CacheDrawModifierNode() للسماح بالتفويض (Icf8f9)
  • نقدّم السمة isLookingAhead التي يمكن الوصول إليها من MeasureScope لمراقبة نتائج البحث المسبق والتأثير في عملية الفحص الرئيسية إذا أردت ذلك. (Ibf4c3)
  • سمة دلالية جديدة traversalIndex، وهي عدد عائم يُستخدَم لإعادة ترتيب العُقد في عملية اجتياز TalkBack (تأتي القيم الأصغر أولاً). (I9a81b، b/186443263)
  • إعادة تسمية السمة "الدلالات" isContainer إلى isTraversalGroup (I121f6)
  • تم الآن منح "ColorProducer" دور operator fun invoke بدلاً من produce (I4a9a2)
  • أضِف Path transform API لتطبيق عمليات تحويل الترجمة/الحجم/التدوير على عناصر المسار. (I23434، b/233772232)
  • تُعرف طريقة ColorProducer باسم produce. (I78bde)
  • تمّت إعادة تسمية "toFrameworkColorSpace" إلى "toAndroidColorSpace" (I4f547)
  • تمّت إعادة تسمية ColorLambda إلى ColorProducer. (I73b1a)
  • إضافة واجهات برمجة تطبيقات للتحويل بين أنواع مساحات الألوان في Android وCompose (Ie7db4، b/279979665)
  • تمت إضافة مَعلمة لون إلى BasicText للسماح بتحريك لون النص أو ضبطه بكفاءة. (Iffd88، b/246961787)
  • تمت إعادة تسمية "TextRange.constrain" إلى "TextRange.coerceIn". (I31be2)
  • تمّت إضافة TextStyle.merge(...) محسَّنة مع قائمة المَعلمات الكاملة. (Iad234، b/246961787)
  • تم تثبيت العديد من واجهات برمجة التطبيقات الخاصة بالنصوص والتي تتضمّن Brush وDrawStyle وTextMotion وDrawScope.drawText وParagraph.paint(Brush) وMultiParagraph.paint(Brush). (I2f740، b/261581564، b/261581931، b/261561245)
  • تمت إعادة تفعيل PlatformTextStyle.includeFontPadding. كانت نيتنا الأصلية هي إزالة الحقل، ولكن تشير الملاحظات إلى أنّ المطوّرين يحتاجون إلى خيار الإعداد هذا. لذلك، أزلنا الإيقاف النهائي من الحقل (I98e96، b/277703184).
  • تمت إضافة طريقة TextRange.constrain العامة. (I97912)
  • يمكن الآن فتح UrlAnnotation في AnnotatedString من خلال خدمات تسهيل الاستخدام، مثل TalkBack. (If4d82، b/253292081)
  • تمت إضافة إجراء InsertTextAtCursor الدلالي لحقول النص. (I11ed5)
  • تمت ترقية الدالة الإنشائية LineHeightStyle.Alignment(topRatio) إلى واجهة برمجة تطبيقات ثابتة. (I79c32، b/261565383)
  • لم تعُد واجهة برمجة التطبيقات TextMeasurer والواجهات ذات الصلة بها تجريبية. (I74647، b/261581753)
  • تمت إضافة إجراء PerformImeAction الدلالي لاستدعاء إجراء محرر أسلوب الإدخال على عقد محرر النصوص. (Ic606f، b/269633506)
  • لم تعُد واجهات برمجة التطبيقات PlatformTextInput تجريبية على Android. (I668eb)
  • تم تغيير اسم مَعلمة القيمة Enum.valueOf (Ia9b89)
  • المزيد من الاستثناءات التي تم طرحها من enum valueOf (I818fe)
  • تم تقديم واجهة برمجة التطبيقات الجديدة PlatformTextInputAdapter المنخفضة المستوى لإنشاء عمليات تنفيذ مخصّصة لإدخال النصوص تتواصل مباشرةً مع واجهات برمجة التطبيقات الخاصة بالمنصة. (I58df4)
  • تمت إضافة المَعلمة BlendMode إلى الطرق DrawScope.drawText وParagraph.paint وMultiParagraph.paint لتوفير خوارزميات دمج مختلفة عند رسم نص على Canvas. (I57508)
  • تمّت إعادة تسمية Font.MaximumAsyncTimeout إلى Font.MaximumAsyncTimeoutMillis. إعادة التسمية فقط (I07af5)
  • تعديل قيم النقاط لكل بوصة لأجهزة @Preview المرجعية (Id6151، b/254528382)
  • أضِف المَعلمتَين brush وalpha إلى BasicText للسماح بتحريك النص أو ضبط فرشاة النص بكفاءة.
  • تحديد أنواع lambda غير المعبأة لكل من Float وDouble وLong وInt وShort في ‎ :ui:ui-unit (I6f18d وb/246961787)

إصلاح الأخطاء

  • تمت إزالة عمليات تخصيص متعدّدة في تتبُّع سرعة المؤشر (I26bae)
  • تقليل عمليات التخصيص في إدارة تخطيطات الإدخال باستخدام المؤشر (I5333a)
  • تحسين استخدام ذاكرة Vector وعرض الإطارات الأولى (I2f3c6)
  • تمت إزالة عمليات التخصيص عند رسم خطوط ونقاط باستخدام Canvas (I9f535)
  • إضافة مستندات لـ AndroidFont.fontVariationSettings (I7d9e2)

المساهمة الخارجية

  • تحسين الأداء وتقليل عمليات التخصيص في Vector APIs (I906cb)

الإصدار ‎1.5.0-alpha04

‫10 مايو 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-alpha04. يتضمّن الإصدار 1.5.0-alpha04 هذه التعديلات.

الميزات الجديدة

  • Modifier.Node تحسينات على التفويض تمت إضافة إمكانية محسّنة للتفويض إلى مثيلات Modifier.Node أخرى من DelegatingNode. يمكن إجراء ذلك باستخدام واجهتَي برمجة التطبيقات delegate وundelegate. قبل هذا التغيير، كان يجب تفويض كل واجهة برمجة تطبيقات من العقدة المفوضة بشكلٍ صريح إلى العقدة المفوض إليها. بعد هذا التغيير، سيتم تفويض واجهات العُقد ضمنيًا ما لم يتم إلغاؤها صراحةً باستخدام DelegatingNode. (67352bc)

تغييرات واجهة برمجة التطبيقات

  • قدِّم NestedScrollModifierNode، وهو NestedScroll Modifier.Node يمكن تفويضه. (I69513)
  • تمت إضافة المَعلمتَين onReset وonRelease إلى الدالة المركّبة AndroidViewBinding، ما يطابق الدالة المركّبة AndroidView ويتيح إمكانية إعادة استخدام العرض باستخدام ViewBinding. (I00b1e، b/276802519)
  • تم تعديل واجهة برمجة التطبيقات Compose Path API لتتيح عمليات الترجيع من أجل دعم حالات الاستخدام التي تتضمّن تعديلاً متكررًا على المسار مع إعادة استخدام أسرع. (I7b797)
  • تمّت إضافة TextStyle.merge(...) محسَّنة مع قائمة المَعلمات الكاملة. (Iad234، b/246961787)
  • تم تثبيت العديد من واجهات برمجة التطبيقات الخاصة بالنصوص والتي تتضمّن Brush وDrawStyle وTextMotion وDrawScope.drawText وParagraph.paint(Brush) وMultiParagraph.paint(Brush). (I2f740، b/261581564، b/261581931، b/261561245)
  • تمت إعادة تفعيل PlatformTextStyle.includeFontPadding. كانت نيتنا الأصلية هي إزالة الحقل، ولكن تشير الملاحظات إلى أنّ المطوّرين يحتاجون إلى خيار الإعداد هذا. لذلك، أزلنا الإيقاف النهائي من الحقل (I98e96، b/277703184).

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم ظهور لوحة المفاتيح في الحقول النصية داخل مربّعات الحوار التي لم يتم إنشاؤها باستخدام العنصر القابل للإنشاء Dialog. (I82551، b/262140644)

الإصدار ‎1.5.0-alpha03

‫19 أبريل 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-alpha03. يتضمّن الإصدار 1.5.0-alpha03 هذه التعديلات.

الميزات الجديدة

  • السلوك التلقائي الجديد لـ SubcomposeLayout في LookaheadScope: تعمل الآن SubcomposeLayouts التي لا تحتوي على خانات مشروطة (مثل TabRow وScaffold وBoxWithConstraints وما إلى ذلك) بشكل جيد مع الرسوم المتحركة المسبقة.

تغييرات واجهة برمجة التطبيقات

  • تتيح السمة التلقائية الجديدة intermediateMeasurePolicy التي تعيد استخدام سياسة القياس من عملية البحث المسبق إمكانية استخدام الأنواع الفرعية SubcomposeLayout بدون خانات مشروطة، مثل Scaffold وTabRow وBoxWithConstraints، مع عملية البحث المسبق تلقائيًا. (Id84c8)
  • سيحظر أداة إعادة الإنشاء التي تم إنشاؤها لنافذة Android المكالمات الواردة إلى withFrameNanos فقط بدلاً من كل المحتوى المركّب عند تلقّي إشعار ON_STOP. وهذا يعني أنّ النوافذ المرتبطة بالأنشطة المتوقّفة ستستمر في إعادة الإنشاء عند حدوث تغييرات في البيانات، ولكن سيتم حظر الحركات أو أيّ برنامج آخر يستدعي withFrameNanos. (Id9e7f، b/240975572)
  • تغيير motionEventSpy إلى الإصدار الثابت (Ic5ec4، b/261560988)
  • تمت إضافة طريقة TextRange.constrain العامة. (I97912)
  • لم يعُد PlatformTextStyle.includeFontPadding متوقفًا نهائيًا لتشجيع المطوّرين على استخدام واجهة برمجة التطبيقات المتوافقة هذه للتبديل واختبار ضبط includeFontPadding على "خطأ". (I98e96، b/277703184)

الإصدار ‎1.5.0-alpha02

‫5 أبريل 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-alpha02. يتضمّن الإصدار 1.5.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • واجهة برمجة التطبيقات SubcomposeLayout الجديدة التي تتضمّن سياسة وسيطة إضافية للتعامل مع منطق القياس/التنسيق أثناء الرسوم المتحركة المستندة إلى التوقّع المسبق. (I017d3)
  • أصبحت السمة PointerInput الآن تعمل بشكل غير متزامن وتستخدم Modifier.Node لتحسين الأداء (مزيد من المعلومات عن التغيير الطفيف في السلوك). (15dab9)
  • تغيير واجهات برمجة التطبيقات التجريبية إلى واجهات ثابتة باستخدام الأحداث الرئيسية (I9c7d8، b/261566839، b/261567368)
  • تغيير واجهات برمجة التطبيقات التجريبية إلى إصدار ثابت في PointerInputChange (I1b543، b/261560988، b/261565762، b/261565749)
  • تضيف هذه السمة طريقة لإنشاء مثيل من SuspendingPointerInputModifierNode لتنفيذ عمليات Modifier.Node أكثر تعقيدًا. (Ic4933)
  • يمكن الآن فتح UrlAnnotation في AnnotatedString من خلال خدمات تسهيل الاستخدام، مثل TalkBack. (If4d82، b/253292081)
  • تمت إضافة واجهة برمجة تطبيقات لاعتراض مفاتيح الأجهزة قبل إرسالها إلى لوحة المفاتيح الافتراضية (I4f4c6، b/186800395)
  • تمت إضافة إجراء InsertTextAtCursor الدلالي لحقول النص. (I11ed5)
  • ستطلب الآن إجراءات الاختبار المتعلّقة بالنصوص (مثل performTextInput) التركيز مباشرةً، باستخدام الإجراء الدلالي، بدلاً من النقر على الحقل. (I6ed05)

إصلاح الأخطاء

  • تتطلّب إجراءات اختبار النص الآن تفعيل حقول النص. (Iab328)

الإصدار ‎1.5.0-alpha01

‫22 مارس 2023

تم طرح androidx.compose.ui:ui-*:1.5.0-alpha01. يتضمّن الإصدار 1.5.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • لم يعُد Modifier.intermediateLayout يتطلّب LookaheadScope صريحًا. يحتوي حظر القياس في intermediateLayout على IntermediateMeasureScope كمستقبِل، ما يوفّر CoroutineScope وLookaheadScope وMeasureScope بشكل مناسب.(Ibe2e5)
  • تم استبدال LookaheadLayout بـ LookaheadScope، الذي لم يعُد Layout. يتيح ذلك التحكّم مباشرةً في محتوى الطفل في LookaheadScope من خلال MeasurePolicy الخاص بالوالد. (Ibe2e5)
  • تضيف هذه السمة Modifier.Node#coroutineScope للسماح لـ Modifier.Nodes بتشغيل إجراءات روتينية. (I76ef9)
  • السماح لفئة Modifier.Nodes بقراءة CompositionLocals من خلال تنفيذ واجهة CompositionLocalConsumerModifierNode (Ib44df)
  • نقل فئة ‎ @Deprecated إلى السمة (I882d1)

الإصدار 1.4

الإصدار 1.4.3

‫3 مايو 2023

تم طرح androidx.compose.ui:ui-*:1.4.3. يتضمّن الإصدار 1.4.3 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم عرض AndroidView بشكلٍ صحيح عند استخدامه مع بعض المعدِّلات. (I4dc77، b/274797771)
  • تم إصلاح خطأ في ميزة "البحث مع التركيز الثنائي الأبعاد" كان يؤثر في DropDown القوائم (b/276811828)
  • تم إصلاح خطأ في خصائص الدخول/الخروج من التركيز المخصّص التي لم يتم تشغيل كتلة الدخول/الخروج إلا في المرة الأولى التي تم فيها استدعاء تعبير lambda (b/277234245)
  • تم إصلاح مشكلة في نظام التركيز تسبّبت في حدوث تعطُّل أثناء قراءة focusProperties. (b/271324781 وb/274897776)

الإصدار 1.4.2

‫19 أبريل 2023

تم طرح androidx.compose.ui:ui-*:1.4.2. يتضمّن الإصدار 1.4.2 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم إعادة استخدام AndroidView للمعدِّلات بشكلٍ صحيح، ما قد يؤدي إلى حدوث سلوك غير متوقّع وتعطُّل. (Ib67ee، b/275919849)
  • تم إصلاح مشكلة تراجع حيث لم تكن لوحة المفاتيح تظهر للحقول النصية داخل مربّعات الحوار التي لم يتم إنشاؤها بواسطة العنصر القابل للإنشاء Dialog (I82551، b/262140644)

الإصدار 1.4.1

‫5 أبريل 2023

تم طرح androidx.compose.ui:ui-*:1.4.1. يتضمّن الإصدار 1.4.1 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم تأثير ParentDataModifier في AndroidView (b/274797771)

الإصدار 1.4.0

‫22 مارس 2023

تم طرح androidx.compose.ui:ui-*:1.4.0. يتضمّن الإصدار 1.4.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.3.0

  • تمت إضافة واجهة برمجة تطبيقات PinnableContainer جديدة تتيح تثبيت عناصر القائمة الكسولة، حتى لا يتم التخلص منها عند التمرير خارج الحدود. على سبيل المثال، تستخدم Modifier.focusable() هذه الآلية لتثبيت العنصر الذي يتم التركيز عليه حاليًا. (Ib8881، b/259274257، b/195049010)
  • تمت إعادة كتابة نظام التركيز باستخدام واجهات برمجة التطبيقات التجريبية الجديدة Modifier.Node. (I7f4d7 وb/247708726 وb/255352203 وb/253043481 وb/247716483 وb/254529934 وb/251840112 وb/251859987 وb/257141589)
  • تمت إضافة السمة الدلالية IsContainer إلى "الأسطح". سيتم استخدام هذه السمة في تغيير لاحق يحدّد ترتيب الانتقال استنادًا إلى المعنى الدلالي للعناصر، مثل المساحات. (I63379)
  • تمت إضافة دور جديد لتسهيل الاستخدام DropdownList. يمكن استخدام هذا الخيار لتكرار سلوك TalkBack عند التركيز على android.widget.Spinner. (I177e5، b/236159001)
  • يمكنك الآن استخدام PlatformTextStyle(emojiSupportMatch) لإيقاف معالجة الرموز التعبيرية بشكل اختياري لفقرة واحدة. (Ia7100، b/139326806)
  • ستنفِّذ الآن اختبارات واجهة المستخدم في Android Compose عمليات تمرير التنسيق لكل إطار عند تنفيذ الإطارات للوصول إلى حالة عدم النشاط (على سبيل المثال، من خلال waitForIdle). وقد يؤثّر ذلك في الاختبارات التي تؤكّد على إطارات فردية من الرسوم المتحركة للتنسيق. (I8ea08، b/222093277)
  • تمت إضافة TextMotion تجريبية إلى TextStyle لتحديد ما إذا كان النص Static(default) أو متحركًا. استخدِم TextMotion.Animated إذا كان سيتم تغيير حجم النص أو ترجمته أو تدويره باستخدام رسوم متحركة. (I24dd7)

الإصدار 1.4.0-rc01

‫8 مارس 2023

تم طرح androidx.compose.ui:ui-*:1.4.0-rc01. يتضمّن الإصدار 1.4.0-rc01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة تحميل زائد للدالة المركّبة AndroidView، والتي تقبل المَعلمة onReset. يسمح بإعادة استخدام مثيلات View عندما يتم تجاهل عقدتها في التركيب وإعادة استخدامها بطريقة متوافقة. ويفيد ذلك بشكل خاص في LazyRows وLazyColumns من المشاهدات. (I3f10d، b/230099236)
  • تم تقديم واجهة برمجة التطبيقات الجديدة PlatformTextInputAdapter المنخفضة المستوى لإنشاء عمليات تنفيذ مخصّصة لإدخال النصوص تتواصل مباشرةً مع واجهات برمجة التطبيقات الخاصة بالمنصة. (I58df4)

إصلاح الأخطاء

  • سيعدّل الإجراء الدلالي BasicTextField في SetText الآن مخزن النص المؤقت باستخدام مسار الرمز البرمجي نفسه المستخدَم في تعديلات IME ووظائف الاختبار (مثل performTextReplacement).
  • تستخدم دوال اختبار النصوص performTextClearance وperformTextReplacement وperformTextSelection الآن SemanticsActions. (I0807d، b/269633168، b/269624358)

الإصدار 1.4.0-beta02

‫22 فبراير 2023

تم طرح androidx.compose.ui:ui-*:1.4.0-beta02. يتضمّن الإصدار 1.4.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة واجهة برمجة التطبيقات modifierElementOf(). يُرجى تمديدها من ModifierNodeElement مباشرةً بدلاً من ذلك. (I2256b)
  • تمت إضافة دالة ردّ نداء جديدة Modifier.Node.onReset() تتيح لك إعادة ضبط بعض الحالات المحلية للتعامل بشكل صحيح مع الحالة التي سيتم فيها إعادة استخدام Layout (على سبيل المثال، كعنصر من LazyColumn). تم إصلاح FocusTargetModifierNode لإعادة ضبط وضع التركيز بشكل صحيح. (I65495، b/265201972)
  • تمت إضافة المَعلمة BlendMode إلى الطرق DrawScope.drawText وParagraph.paint وMultiParagraph.paint لتوفير خوارزميات دمج مختلفة عند رسم نص على Canvas. (I57508)

إصلاح الأخطاء

  • تم تحسين خوارزمية ترتيب التركيز على إمكانية الوصول، على سبيل المثال، تتم قراءة الأشرطة العلوية/السفلية غالبًا أولاً/أخيرًا على التوالي (74e9c5)

الإصدار 1.4.0-beta01

‫8 فبراير 2023

تم طرح androidx.compose.ui:ui-*:1.4.0-beta01. يتضمّن الإصدار 1.4.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تسمية "PinnableContainer.PinnedHandle.unpin()" إلى "release()" (I4667a)
  • تمت إضافة waitUntilNodeCount وwaitUntilAtLeastOneExists وwaitUntilExactlyOneExists وwaitUntilDoesNotExist كواجهة برمجة تطبيقات تجريبية إلى ComposeTestRule، ما يؤدي إلى توسيع نطاق واجهة برمجة التطبيقات waitUntil لقبول أي أداة مطابقة وأي عدد من العُقد. يمكنك الاطّلاع على ComposeTestRule للحصول على مستندات إضافية. (Ifa1b9، b/226934294)
  • تمّت إعادة تسمية Font.MaximumAsyncTimeout إلى Font.MaximumAsyncTimeoutMillis. (I07af5)
  • تمت إزالة GoogleFont.Provider.AllFontsListUri وتمت إضافة رابط يؤدي إليها في ktdoc بدلاً من ذلك. (I16f29)

إصلاح الأخطاء

  • إضافة مستندات لـ AndroidFont.fontVariationSettings (I7d9e2)

الإصدار 1.4.0-alpha05

‫25 يناير 2023

تم طرح androidx.compose.ui:ui-*:1.4.0-alpha05. يتضمّن الإصدار 1.4.0-alpha05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم تقديم عمليات تحميل تجريبية جديدة للدالة runComposeUiTest والدالتين create*ComposeRule اللتين تقبلان المَعلمات CoroutineContext. سيتم استخدام السياق في تركيبة الاختبار وأي طلبات LaunchedEffect وrememberCoroutineScope() في التركيبة. (I10614، b/265177763)
  • إضافة واجهة برمجة تطبيقات جديدة لتتبُّع السرعة الأحادية البُعد (If5a82)
  • تم الآن وضع علامة @Stable على "FocusRequester". (I580ee)
  • أزِل تعليقًا توضيحيًا تجريبيًا من الدالة الإنشائية DialogProperties التي تأخذ المَعلمة usePlatformDefaultWidth. (Ic4048)
  • تمت إضافة دالة لاحتساب الموضع والمماس على مسافة معيّنة على مسار باستخدام PathMeasure.getPosition() وPathMeasure.getTangent() (I3b47c)
  • تمت إزالة أداة ضبط عامة تم عرضها عن طريق الخطأ في ‎PlatformParagraphStyle. (I07f47)
  • المزيد من أنواع/إمكانية قبول القيم الفارغة للدوال المضمّنة/المخفية التي تم إيقافها نهائيًا (I24f91)
  • أضِف AnnotatedString.hasStringAnnotations لطلب البحث عن التعليقات التوضيحية التي تتضمّن عمليات تخصيص بقيمة صفر. (I94dfe، b/246960758)
  • تمت إضافة تحميل زائد جديد للدالة TextMeasurer.measure يقبل String كنص. (I47b2d، b/242705342)
  • تمت ترقية واجهتَي برمجة التطبيقات LineBreak وHyphens في TextStyle إلى إصدار ثابت. (Ic1e1d)

المساهمة الخارجية

  • لن يتم إيقاف طريقتَي notifyFocusedRect في TextInputSession وTextInputService نهائيًا مرة أخرى. (I23a04، b/262648050)

الإصدار 1.4.0-alpha04

‫11 يناير 2023

تم طرح androidx.compose.ui:ui-*:1.4.0-alpha04. يتضمّن الإصدار 1.4.0-alpha04 هذه التعديلات.

الميزات الجديدة

  • تمت إضافة واجهة برمجة تطبيقات PinnableContainer جديدة تتيح تثبيت عناصر القائمة الكسولة، حتى لا يتم التخلص منها عند التمرير خارج الحدود. على سبيل المثال، تستخدم Modifier.focusable() هذه الآلية لتثبيت العنصر الذي يتم التركيز عليه حاليًا. (Ib8881، b/259274257، b/195049010)
  • تمت إعادة كتابة نظام التركيز باستخدام واجهات برمجة التطبيقات التجريبية الجديدة Modifier.Node. (I7f4d7 وb/247708726 وb/255352203 وb/253043481 وb/247716483 وb/254529934 وb/251840112 وb/251859987 وb/257141589)
  • تمت إضافة السمة الدلالية IsContainer إلى "الأسطح". سيتم استخدام هذه السمة في تغيير لاحق يحدّد ترتيب الانتقال استنادًا إلى المعنى الدلالي للعناصر، مثل المساحات. (I63379)
  • تمت إضافة دور جديد لتسهيل الاستخدام DropdownList. يمكن استخدام هذا الخيار لتكرار سلوك TalkBack's عند التركيز على android.widget.Spinner. (I177e5، b/236159001)
  • يمكنك الآن استخدام PlatformTextStyle(emojiSupportMatch) لإيقاف معالجة الرموز التعبيرية بشكل اختياري لفقرة واحدة. (Ia7100، b/139326806)
  • ستنفِّذ الآن اختبارات واجهة المستخدم في Android Compose عمليات تمرير التنسيق لكل إطار عند تنفيذ الإطارات للوصول إلى حالة عدم النشاط (على سبيل المثال، من خلال waitForIdle). وقد يؤثّر ذلك في الاختبارات التي تؤكّد على إطارات فردية من الرسوم المتحركة للتنسيق. (I8ea08، b/222093277)
  • تمت إضافة TextMotion تجريبية إلى TextStyle لتحديد ما إذا كان النص Static(default) أو متحركًا. استخدِم TextMotion.Animated إذا كان سيتم تغيير حجم النص أو ترجمته أو تدويره باستخدام رسوم متحركة. (I24dd7)

تغييرات واجهة برمجة التطبيقات

  • تم استبدال الوسيطة maxSize: IntSize في drawText بالوسيطة size: Size لتكون متوافقة مع دوال DrawScope الأخرى. يتم ضبط size على Size.Unspecified تلقائيًا، ما يعني أنّه لن يتم تغيير السلوك التلقائي السابق. (Icd27d)
  • تمت إزالة أداة إنشاء الخط التجريبية المتوقّفة نهائيًا. (I8a724، b/261435386)
  • يحتوي الآن فئة بيانات أدوات واجهة المستخدم Group على حقل isInline يشير إلى ما إذا كانت المجموعة مخصّصة لاستدعاء دالة قابلة للإنشاء مضمّنة. إذا كانت قيمة isInline هي true، يعني ذلك أنّ الاستدعاء يتم لدالة مركّبة مضمّنة. ومع ذلك، قد تكون القيمة خطأ بالنسبة إلى عمليات استدعاء الدوال المركّبة المضمّنة من الوحدات التي يتم تجميعها باستخدام إصدار من مكوّن Compose الإضافي للمجمّع لا ينشئ معلومات الدالة المضمّنة. (Idb846)
  • نقل عدد من واجهات برمجة التطبيقات التجريبية السابقة إلى الإصدار الثابت
  • أصبح Rotary Scroll Event API ثابتًا الآن (I42ad3، b/261561229)
  • أصبحت واجهة برمجة التطبيقات FontVariation ثابتة الآن (I8779f، b/241016309)
  • أصبحت جميع أدوات إنشاء Font() الآن واجهة برمجة تطبيقات ثابتة (I5948b وb/261435386)
  • أصبحت DeviceFontFamilyName الآن إصدارًا ثابتًا (I8b640، b/261435386)
  • أصبحت الدالة الإنشائية AndroidFont التي تتضمّن variationSettings الآن واجهة برمجة تطبيقات ثابتة، ويمكن استخدامها لإنشاء أنواع جديدة من واصفات الخطوط. (I5adcc، b/261565807)
  • أصبحت واجهة برمجة التطبيقات createFontFamilyResolver API ثابتة الآن. يمكن استخدام هذا الإعداد لرصد الاستثناءات غير المعالَجة أثناء تحميل الخطوط بشكل غير متزامن. (Ibb481، b/261435386)
  • أصبحت واجهة برمجة التطبيقات Font.loadingStrategy API ثابتة الآن. (I5937c، b/261435386)
  • أصبحت واجهة برمجة التطبيقات GoogleFont API ثابتة الآن. (Ic90b0، b/261435386)
  • أصبحت واجهة برمجة التطبيقات TextUnit(float, TextUnitType) الآن واجهة برمجة تطبيقات ثابتة. (I90c84، b/261561612)
  • أصبحت واجهة برمجة التطبيقات pluralStringResource الآن واجهة برمجة تطبيقات ثابتة. (I09849، b/261439703)

الإصدار ‎1.4.0-alpha03

‫7 ديسمبر 2022

تم طرح androidx.compose.ui:ui-*:1.4.0-alpha03. يتضمّن الإصدار 1.4.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إزالة ExperimentalComposeUiApi من PointerIcon (I23af8)
  • إضافة إجراءات تسهيل استخدام الصفحة: PageUp وPageDown وPageLeft وPageRight يُرجى العِلم أنّ هذه الميزات متاحة فقط بدءًا من المستوى 29 لواجهة برمجة التطبيقات. (Ida4ab)
  • تم تعديل طريقة عرض المَعلمة rememberNestedScrollConnection من العرض الجذر إلى عرض المضيف. (Ia5200)
  • تمت إضافة Modifier API للاستعلام عن معلومات التمرير الخاصة بالعناصر الرئيسية. (I2ba9d، b/203141462)
  • يُستخدَم في Clickable لتأخير التفاعلات مع الضغط بشكل صحيح، عندما يمكن أن تصبح الإيماءات أحداث تمرير.
  • تم إصلاح المشكلة التي كانت تتسبّب في عدم تأخير تأثيرات التموّج بشكل صحيح عند استخدام Clickables داخل Scrollable ViewGroup.
  • تم تعديل الأدراج وأوراق البيانات لتأخير الضغطات بشكل صحيح في حال إمكانية تحوّل الإيماءات إلى أحداث تمرير.
  • تمت إعادة تسمية CompositingStrategy.Always إلى Offscreen للإشارة إلى أنّه سيتم دائمًا عرض graphicsLayer في مخزن مؤقت وسيط (I47dc1)
  • أصبح التحميل الزائد للتنسيق مع خانات محتوى متعدّدة ثابتًا الآن (I10566، b/248294649)
  • تمت إضافة واجهتَي برمجة تطبيقات تجريبيتين جديدتين PerfettoTrace.record {} وPerfettoTraceRule لتسجيل بيانات تتبُّع Perfetto (المعروفة أيضًا باسم "بيانات تتبُّع النظام") كجزء من الاختبار، وذلك لفحص سلوك الاختبار وأدائه. (I3ba16)
  • في اختبارات واجهة المستخدم التي تستخدم قاعدة Compose، لن يتم إرسال عمليات الاستئناف التي تم استئنافها أثناء عمليات معاودة الاتصال withFrameNanos إلا بعد انتهاء جميع عمليات معاودة الاتصال بإطارات التشغيل. يتطابق هذا مع سلوك الإنشاء عند التشغيل بشكل طبيعي. ومع ذلك، قد يتعذّر إجراء الاختبارات التي تعتمد على السلوك القديم. من المفترض أن يؤثر ذلك فقط في الرموز التي تستدعي withFrameNanos أو withFrameMillis مباشرةً، والتي تتضمّن منطقًا خارج دالة رد الاتصال التي تم تمريرها إلى هاتين الدالتين، وقد تحتاج إلى نقلها إلى داخل دوال رد الاتصال. يمكنك الاطّلاع على التغييرات في اختبار الصورة المتحركة في طلب التغيير هذا للحصول على أمثلة.
  • تمت إضافة المَعلمة الاختيارية onPerformTraversals: (Long) -> Unit إلى الدالة الإنشائية TestMonotonicFrameClock ودالة المصنع لتشغيل الرمز بعد عمليات رد الاتصال withFrameNanos ولكن قبل استئناف إجراءات الروتين الفرعي للمتصلين. (Idb413، b/254115946، b/222093277، b/255802670)
  • إضافة EmojiCompat إلى Compose (Ibf6f9، b/139326806)
  • تمت إضافة مَعلمة خلفية جديدة إلى @Preview لإتاحة الألوان الديناميكية (I9f512)

إصلاح الأخطاء

  • يتم الآن إرسال إشعارات تطبيق اللقطة بعد انتهاء Recomposer من تطبيق التغييرات. (Iad6c0، b/222093277)
  • تم إجراء تغييرات في captureToImage للسماح بالتقاط لقطات شاشة في النوافذ المتعددة. ويكون ذلك مفيدًا لاختبارات لقطات الشاشة التي تستخدم PopUp في Compose. (I169c5)

تحديثات الاعتماديات

  • تعتمد مكتبتا Compose UI وCompose Material الآن على الإصدار 2.5.1 من Lifecycle. (I05ab0، b/258038814)

الإصدار 1.4.0-alpha02

‫9 نوفمبر 2022

تم طرح androidx.compose.ui:ui-*:1.4.0-alpha02. يتضمّن الإصدار 1.4.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم تعديل GraphicsLayerScope لعرض الحجم الحالي لـ graphicsLayer. ويكون ذلك مفيدًا لاحتساب عمليات تحويل graphicsLayer كدالة لحجم Composable. (If8c43،b/181387080)
  • تمت إضافة CompositingStrategy لتحديد وقت استخدام طبقة تركيب خارج الشاشة لعرض محتوى graphicsLayer. تحتفظ السمة Auto بالسلوك التلقائي الذي يستفيد داخليًا من طبقة إذا تم تطبيق ألفا أو RenderEffect/Overscroll. سيؤدي ضبط القيمة على "دائمًا" إلى إنشاء مخزن مؤقت خارج الشاشة، حيث سيتجنّب ModulateAlpha استخدام مخزن مؤقت خارج الشاشة، وبدلاً من ذلك سيعدّل كل تعليمات الرسم المسجّلة ضمن graphicsLayer. سيظل استخدام ModulateAlpha يستفيد من المخزن المؤقت خارج الشاشة لاستخدامات RenderEffect/Overscroll (I25e82، b/256382834)
  • تمت إضافة invalidateSubtree() إلى Modifier.Node للسماح بإبطال التسلسلات الهرمية بأكملها للتنسيق والرسم. (I4bd90)
  • ترقية rememberNestedScrollInteropConnection إلى الإصدار الثابت تم توفير إمكانية تمرير طريقة عرض جذر إلى rememberNestedScrollInteropConnection. يمكن أن يساعد ذلك في أن تتفاعل طريقة العرض المخصّصة بشكل أفضل مع قيود التمرير، خاصةً في طرق العرض غير العادية (مثل ModalBottomSheetDialog). (I9e107)
  • تمت إضافة واجهة ObserverNode التي يمكن استخدامها من خلال عمليات تنفيذ Modifier.Node التي يجب إعلامها عند تغيير قيمة سبق أن قرأتها (I5728b، b/247716483)
  • تمت إضافة منشئ جديد إلى Paint يقبل android.graphics.Paint أصليًا. تمت أيضًا إضافة دالة إضافية toComposePaint() تحوّل عنصر Paint أصليًا حاليًا إلى Compose Paint. (Ica91b)
  • أضِف FontFamily.Resolver.resolveAsTypeface جديدًا لاستخدامه على Android. (I8950b)
  • إضافة ToolingState للسماح للأدوات بتغيير الحالات الداخلية لـ Composable (Ie6614)
  • إعادة تصميم الأدوات لتوفير دعم أفضل للرسوم المتحركة الجديدة المضافة (I8677b)
  • تمت إضافة المَعلمة minLines إلى النص في Material وMaterial3، وTextField وOutlinedTextField، ما يتيح ضبط الحد الأدنى لارتفاع المكوّن من حيث عدد الأسطر (I4af1d)

الإصدار 1.4.0-alpha01

‫24 أكتوبر 2022

تم طرح androidx.compose.ui:ui-*:1.4.0-alpha01. يتضمّن الإصدار 1.4.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة جديدة، awaitEachGesture()، لأدوات رصد الإيماءات. تعمل هذه السمة بشكل مشابه للسمة forEachGesture()، ولكنّ حلقة الإيماءات تعمل بالكامل ضمن AwaitPointerEventScope، وبالتالي لا يمكن فقدان الأحداث بين التكرارات.
  • تم إيقاف forEachGesture() نهائيًا واستبداله بـ awaitEachGesture() لأنّه يسمح بفقدان الأحداث بين الإيماءات. (Iffc3f، b/251260206)
  • إيقاف إعادة استخدام عناصر تسهيل الاستخدام نهائيًا في androidx لقد تبيّن لنا أنّ التغييرات في الأداء لا تُذكر حتى في أقدم الإصدارات المتوافقة. (I0a961)
  • تمت إضافة DrawStyle كسمة تجريبية إلى TextStyle وSpanStyle لتفعيل رسم نص محدّد. (If24b8، b/155421273)
  • تستخدم AnnotatedString.Builder الآن kotlin.text.Appendable. (I1a061، b/231030444)
  • يحتوي AnnotatedString.Builder الآن على طريقة append(AnnotatedString, start: Int, end: Int) لإلحاق سلسلة فرعية من AnnotatedString والأنماط المتقاطعة.
  • تمت إضافة المَعلمة DrawStyle إلى دالتَي الطلاء Paragraph وMultiParagraph اللتين تتيحان رسم نص محدّد. (Ic8102، b/155421273)

المساهمة الخارجية

  • شكرًا على vighnesh لإضافة أجهزة التلفزيون إلى المعاينات (Ie15cd)

الإصدار 1.3

الإصدار 1.3.3

‫11 يناير 2023

تم طرح androidx.compose.ui:ui-*:1.3.3. يتضمّن الإصدار 1.3.3 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح عُطل كان يحدث أحيانًا على Android 9 عندما يحفظ النشاط حالة "عرض Compose". (I0b755، b/260322832)

الإصدار 1.3.2

‫7 ديسمبر 2022

تم طرح androidx.compose.ui:ui-*:1.3.2. يتضمّن الإصدار 1.3.2 هذه التعديلات.

إصلاح الأخطاء

  • تم تعديلها لاستخدام الإصدار 3.21.8 من Profobuf، ما يمنع ظهور تنبيه أمني في protobuf-javalite:3.19.4 (CVE-2022-3171) (b/255545055)

الإصدار 1.3.1

‫9 نوفمبر 2022

تم طرح androidx.compose.ui:ui-*:1.3.1. يتضمّن الإصدار 1.3.1 هذه التعديلات.

الإصدار 1.3.0

‫24 أكتوبر 2022

تم طرح androidx.compose.ui:ui-*:1.3.0. يتضمّن الإصدار 1.3.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.2.0

الإصدار 1.3.0-rc01

‫5 أكتوبر 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-rc01. يتضمّن الإصدار 1.3.0-rc01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة التطبيقات التجريبية الجديدة Hyphens لإتاحة التقطيع التلقائي للكلمات في النص (Iaa869)

إصلاح الأخطاء

  • لن يتم ضبط إعدادات wght وital المتغيرة تلقائيًا على خطوط DeviceFontFamilyName، بل سيتم استخدام إعدادات النظام الأساسي لخطوط Typeface المحمَّلة. (Ia7a6d، b/246989332)
  • تم إصلاح تسريب الذاكرة LazyColumn - لم يتم استدعاء onModifierLocalsUpdated بالقيمة التلقائية عند إعادة استخدام المعدِّلات (b/230168389)

الإصدار 1.3.0-beta03

‫21 سبتمبر 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-beta03. يتضمّن الإصدار 1.3.0-beta03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إضافة خيارات لتخصيص تقسيم الأسطر في "النص" (I86907)
  • تم تغيير وسيطة size:IntSize إلى constraints: Constraints في طريقة TextMeasurer.measure لتوفير قيود الحد الأدنى للعرض. (I37530، b/242707525)

إصلاح الأخطاء

  • تعمل واجهة برمجة التطبيقات BackHandler الخاصة بـ AndroidX Activity الآن ضمن عنصر Dialog قابل للإنشاء. (I35342)

الإصدار ‎1.3.0-beta02

‫7 أيلول (سبتمبر) 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-beta02. يتضمّن الإصدار 1.3.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة تحميل تجريبي زائد للسمة Layout يقبل قائمة من عدة دوال لامدا قابلة للإنشاء، ما يتيح التعامل مع العناصر القابلة للقياس التي يتم وضعها في دوال لامدا مختلفة للمحتوى بشكل مختلف (Ic1b4e)

التغييرات في واجهات برمجة التطبيقات التجريبية الخاصة بميزة "التركيز":

  • تم إيقاف FocusDirection.In وFocusDirection.Out نهائيًا واستبدالهما بـ FocusDirection.Enter وFocusDirection.Exit. (Ia4262، b/183746982)
  • تمت إضافة سمتَي التركيز الجديدتَين enter وexit لتحديد سلوك مخصّص للعنصرَين FocusManager.moveFocus(Enter) وFocusManager.moveFocus(Exit). (I5f3f9، b/183746982)
  • يمكنك الآن استخدام FocusRequester.Cancel لإلغاء حركة التركيز. يمكن استخدام FocusRequester.Cancel في أي من خصائص التركيز التالية: up وdown وleft وright وnext وprevious وstart وend وenter وexit. (Ib300f)

الإصدار 1.3.0-beta01

‫24 أغسطس 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-beta01. يتضمّن الإصدار 1.3.0-beta01 هذه التعديلات.

إعادة هيكلة عقدة المعدِّل

تمت إعادة تصميم الطبقة التي تتعامل مع مثيلات Modifier/Modifier.Element وتنسّق سلوكها على LayoutNodes بشكل كبير. في الوقت الحالي، كان هذا إعادة تصميم لم تؤثّر في واجهة برمجة التطبيقات العامة لأي من المعدِّلات العديدة في Compose، ويمكن اعتبارها تغييرًا على مستوى التنفيذ فقط. مع ذلك، هذا تغيير مهم لعدة أسباب. (Ie4313)

ملخّص التغييرات

توفّر واجهات برمجة التطبيقات التجريبية Modifier.Node المُضافة تجريدًا يسمح بالحفاظ على الحالة في مثيل سيتم الاحتفاظ به مع دورة حياة عقدة التصميم، وسيتم تخصيصه لكل عقدة تصميم ولكل استخدام للعنصر Modifier.Element المقابل الذي أنشأه.

وبشكل عام، يوفّر هذا التجريد آلية بديلة لإنشاء معدِّلات ذات حالة بدون الاعتماد على آليات واجهة برمجة التطبيقات Modifier.composed.

المخاطرة

يتوافق هذا التغيير تمامًا مع الإصدارات السابقة، ويهدف إلى التوافق مع الإصدارات القديمة من حيث السلوك الملحوظ قدر الإمكان والمعقول. ومع ذلك، هناك بعض الأنظمة الفرعية في Compose لم يتأثر بها هذا التعديل، ومن المحتمل أن يكون السلوك قد تغيّر بطرق لم تغطّها اختباراتنا ولم يتم العثور عليها وإصلاحها بعد.

يُرجى الترقية إلى هذا الإصدار بحذر. إذا كنت تعتقد أنّ هذا التغيير قد أثّر سلبًا في تجربتك، يُرجى إعلامنا بذلك.

واجهات برمجة التطبيقات التجريبية

تمت إضافة واجهات برمجة تطبيقات تجريبية مختلفة، وكلها مرتبطة بالمفهوم الجديد "عقدة المعدِّل". يتم إنشاء Modifier.Node’s نتيجةً لما يلي:

  • fun modifierElementOf(…): Modifier
  • abstract class ModifierNodeElement
  • abstract class Modifier.Node
  • abstract class DelegatingNode
  • interface LayoutModifierNode
  • interface DrawModifierNode
  • interface SemanticsNode
  • interface PointerInputNode
  • interface ModifierLocalNode
  • interface ParentDataModifierNode
  • interface LayoutAwareModifierNode
  • interface GlobalPositionAwareModifierNode
  • interface IntermediateLayoutModifierNode

تغيير في السلوك يؤدي إلى حدوث خطأ

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

تم خفض الحد الأقصى للارتفاع المسموح به في مربّعات الحوار والنوافذ المنبثقة في Compose من 30dp إلى 8dp. يؤثّر هذا التغيير في مربّعات الحوار المخصّصة والنوافذ المنبثقة لكلّ من Material وUI. تم إجراء هذا التغيير للحدّ من خطأ في إمكانية الوصول على إصدارات Android الأقدم من الإصدار S، ولضمان قدرة خدمات تسهيل الاستخدام داخل هذه النوافذ على التفاعل مع المحتوى داخل مربّع الحوار أو النافذة المنبثقة.

لن يؤثّر هذا التغيير فيك إلا إذا كنت تنشئ تنفيذًا مخصّصًا لمربّع حوار أو نافذة منبثقة مع ضبط مستوى الارتفاع على أكثر من 8 وحدات بكسل مستقلة عن الكثافة. ننصحك بخفض مستوى ارتفاع مربّع الحوار أو النافذة المنبثقة. إذا كنت بحاجة إلى إيقاف هذا السلوك الجديد، يمكنك إنشاء نسخة من مربّع الحوار أو النافذة المنبثقة مع ضبط مستوى الارتفاع المطلوب. لا يُنصح بذلك، لأنّ ذلك قد يؤثّر سلبًا في إمكانية الوصول، ويقع على المطوّر مسؤولية ضمان إمكانية التفاعل مع الجزء السفلي من مربّع الحوار أو النافذة المنبثقة وإمكانية قراءته من خلال خدمات تسهيل الاستخدام.

تغييرات واجهة برمجة التطبيقات

  • تم إصلاح مشكلة عدم تعديل painterResource عند إجراء تغييرات في الإعدادات (I58e73، b/228862715)
  • لم يعُد rememberTextMeasurer يقبل المَعلمات FontFamily.Resolver أو Density أو LayoutDirection. يُرجى استخدام أداة الإنشاء TextMeasurer لتقديم قيم مخصّصة لهذه المَعلمات. (Ia1da3)
  • تمت إضافة السمة DialogProperties.decorFitsSystemWindows لإتاحة استخدام WindowInsets في مربّعات الحوار. (I57742، b/229378542)
  • تم نقل دوال إنشاء الخطوط إلى ملف Kotlin الأصلي للحفاظ على التوافق الثنائي. لم يطرأ أي تغيير مقارنةً بآخر إصدار ثابت. (Ieb2f3)
  • تمت إزالة عامل غير ضروري من عدة تعريفات للمساواة، وهذا ليس له أي تأثير. (I6c309)
  • ‫FontVariation.Setting هي واجهة محكمة الإغلاق، وذلك للسماح بواجهات برمجة تطبيقات مستقبلية للحدّ من التتبُّع. (I11021، b/143703328)
  • أضِف CompositionGroup.findParameters إلى SlotTree.kt. يتيح ذلك للأدوات استرداد مَعلمات CompositionGroup بدون الحاجة إلى تحليل جدول الخانات الإعلانية بالكامل. (I124fe)

الإصدار 1.3.0-alpha03

‫10 أغسطس 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-alpha03. يتضمّن الإصدار 1.3.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أصبحت LayoutCoordinates.findRootCoordinates() متاحة للجميع (I7fa37، b/204723384)
  • تمت إضافة واجهة برمجة تطبيقات تجريبية للحصول على LayoutCoordinates في PlacementScope. يتيح ذلك للمطوّرين معرفة مكان التنسيق الحالي لوضع العناصر الثانوية بالنسبة إلى موضعها. (I5482b، b/238632578)
  • تمت إضافة LayoutCoordinates.transformFrom للحصول على تحويل المصفوفة من LayoutCoordinates إلى أخرى. (Ic5ab1، b/238632578)
  • تم إيقاف SemanticsModifier.id نهائيًا ونقل رقم تعريف الدلالات إلى LayoutInfo.semanticsId بدلاً من ذلك. (Iac808، b/203559524)
  • تتيح خطوط الموارد الآن ضبط إعدادات تنويع الخطوط (المستوى 26 من واجهة برمجة التطبيقات أو أعلى). (I900dd، b/143703328)
  • إتاحة الخطوط المتغيّرة في DeviceFontFamilyNameFont (Ic1279، b/143703328)
  • تقبل الآن أدوات إنشاء الخطوط قائمة FontVariation.Setting لإعداد الخطوط المتغيرة على الأجهزة التي تعمل بالإصدار Android 8.0 (O) والإصدارات الأحدث. (I11a9d، b/143703328)
  • تمت إضافة واجهة برمجة التطبيقات FontVariation لتحديد الخطوط المتغيرة واستخدامها. (I3c40c، b/143703328)
  • أصبح الدالة الإنشائية LineHeightStyle.Alignment الآن متاحة للجميع (تجريبية) (I4bbbe، b/235876330)
  • تم الآن تحديد الفقرة على أنّها expected|actual لكل من Android وأجهزة الكمبيوتر. (Id387e، b/239962983)
  • أصبحت واجهة Paragraph الآن واجهة Paragarph محكمة الإغلاق. لا توجد حالة استخدام لتصنيف الفقرة، وننصحك بالتواصل معنا إذا كان هذا التغيير يؤثر فيك. (If5247، b/239962983)
  • تمت إزالة التعليق التوضيحي التجريبي من PlatformTextStyle وLineHeightStyle. (I64bef)
  • إيقاف TextInputService.show|hideSoftwareKeyboard يُرجى استخدام SoftwareKeyboardController بدلاً من ذلك في رمز التطبيق وTextInputSession في رمز إدارة محرّك طرق الإدخال. (I14e4c، b/183448615)
  • إضافة واجهة برمجة تطبيقات جديدة لأنواع الرسوم المتحركة الحالية (I26179)

إصلاح الأخطاء

  • تمت إضافة @RequiresPermission إلى واجهات برمجة التطبيقات التي تتطلّب منح إذن POST_NOTIFICATIONS على الإصدار 33 من حزمة تطوير البرامج (SDK) والإصدارات الأحدث. (Ie542e، b/238790278)

الإصدار 1.3.0-alpha02

‫27 يوليو 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-alpha02. يتضمّن الإصدار 1.3.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة السمة الجديدة PointerInputChange#pressure لاسترداد الضغط. (I45a5e، b/205164819)
  • تمت إضافة rememberTextMeasurer لتسهيل إنشاء مثيلات TextMeasurer وتذكُّرها في التجميع. (I8d66e)
  • تتوافق Rect وRoundRect وMutableRect الآن مع بنية in في Kotlin لاستدعاء الدالة contains. (Ie42b0، b/238642990)
  • أزِل الوظائف غير الضرورية من KeyInjectionScope، لأنّه يمكن تنفيذها بسهولة باستخدام أجزاء أبسط من واجهة برمجة التطبيقات. تشمل الدوال التي تمت إزالتها pressKeys وkeysDown وkeysUp. (I81d77)
  • تمت إعادة تصميم أسماء الثوابت والمَعلمات في KeyInjectionScope لتضمين اللاحقة "Millis" حيث تكون وحدات الثوابت والمَعلمات المذكورة بالملّي ثانية. (Iabef5)
  • تمت إضافة الطريقة toStringForLog() إلى EditCommand للمساعدة في تحديد المشاكل وحلّها المتعلّقة بتعديل النصوص. (I53354، b/228862731)
  • تمت إضافة دالة الإضافة drawText إلى DrawScope لتوفير طريقة لرسم نص متعدد الأنماط على العناصر القابلة للإنشاء والمعدِّلات التي تعمل على DrawScope مثل Canvas وdrawBehind. (I16a62، b/190787898)
  • نقدّم واجهة برمجة تطبيقات تجريبية جديدة باسم TextMeasurer تتيح احتساب تخطيط نص عشوائي يؤدي إلى نتائج مطابقة لنتائج BasicText، بغض النظر عن وقت تشغيل Compose. (I17101)
  • أضِف mapTree إلى SlotTree.kt. يسمح ذلك للأدوات بفحص SlotTree بدون إنشاء نسخة في الذاكرة أولاً، كما يفعل asTree. بالنسبة إلى "أداة فحص التصميم"، يؤدي ذلك إلى تحسين الأداء بمقدار 10 مرّات تقريبًا. (I5e113)
  • تم تغيير "معاينة الإنشاء" ليتم تخزينها في ملفات الإخراج الثنائية، وذلك للسماح للمطوّرين بكتابة وإعادة استخدام تعليقات توضيحية MultiPreview من المكتبات. (I85699، b/233511976)

إصلاح الأخطاء

  • عند إضافة أحداث InputEventChange إلى أداة التتبُّع Velocity، سنأخذ في الاعتبار الآن الفروق بدلاً من المواضع، وسيضمن ذلك احتساب السرعة بشكلٍ صحيح في جميع الحالات حتى إذا تحرّك العنصر المستهدَف (Icea9d، b/216582726، b/223440806، b/227709803).
  • تم إصلاح خطأ NPE الناتج عن AnnotatedString.toUpperCase عند توفّر التعليقات التوضيحية. (I0aca2، b/210899140)

الإصدار 1.3.0-alpha01

‫29 يونيو 2022

تم طرح androidx.compose.ui:ui-*:1.3.0-alpha01. يتضمّن الإصدار 1.3.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • LookaheadLayout جديد يتيح إجراء عملية بحث مسبق قبل القياس أو التخطيط الفعلي. يسمح ذلك بإجراء عملية حسابية مسبقة للتصميم عند تغيُّره، مع السماح للمقياس/التصميم بعد التوقّع المسبق باستخدام الحجم/الموضع المحسوب مسبقًا لتحريك الحجم والمواضع نحو الهدف. لا تتوفّر SubcomposeLayouts بعد، ولكن ستتوفّر في إصدار قادم. (I477f5)
  • أضِف مَعلمة ألفا اختيارية إلى نكهة الفرشاة TextStyle وSpanStyle لتعديل عتامة Text بالكامل. (Ic2fac، b/234117635)
  • تم تقديم نوع التعليق التوضيحي UrlAnnotation والطُرق المرتبطة به لتوفير إمكانية استخدام الروابط TalkBack في AnnotatedString. (I1c754، b/231495122)
  • نقل وظائف الأداة إلى وقت التشغيل (I4f729)

إصلاح الأخطاء

المساهمة الخارجية

  • تمت إضافة واجهة برمجة تطبيقات جديدة WindowInfo.keyboardModifiers لمراقبة حالتها ضمن الدوال القابلة للإنشاء أو من خلال snapshotFlow (Icdb8a)

الإصدار 1.2

الإصدار 1.2.1

‫10 أغسطس 2022

تم طرح androidx.compose.ui:ui-*:1.2.1. يتضمّن الإصدار 1.2.1 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح الخطأ nullpointer في أداة الفحص (b/237987764)
  • تم إصلاح استثناء تحويل الفئة أثناء التذكير في "أداة الفحص" (b/235526153)

الإصدار 1.2.0

‫27 يوليو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0. يتضمّن الإصدار 1.2.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.1.0

  • تحسينات في التنقّل بين العناصر باستخدام التركيز:

    • أصبح بإمكانك الآن استخدام ميزة التمرير المستند إلى التركيز في القوائم الكسولة، وذلك باستخدام واجهة برمجة التطبيقات BeyondBoundsLayout الأساسية الجديدة.
    • واجهات برمجة التطبيقات الجديدة لتخصيص السلوك في FocusOrder وFocusProperties
    • تحسين الأداء عند استخدام لوحة مفاتيح خارجية أو جهاز تحكّم عن بُعد للتلفزيون
  • واجهات برمجة التطبيقات الجديدة لما يلي:

    • حواف النوافذ
    • العناصر الأساسية للرسوم المتحركة التي تعتمد على الإيماءات وغير المحدودة وتلك المتعلّقة بالتصميم
    • إمكانات GraphicsLayer، بما في ذلك RenderEffect
  • إصلاح العديد من الأخطاء وتحسينات في الأداء

الإصدار 1.2.0-rc03

‫29 يونيو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-rc03. يتضمّن الإصدار 1.2.0-rc03 هذه التعديلات.

  • لم يتم إجراء أي تغييرات منذ الإصدار 1.2.0-rc02.

الإصدار 1.2.0-rc02

‫22 يونيو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-rc02. يتضمّن الإصدار 1.2.0-rc02 هذه التعديلات.

الإصدار 1.2.0-rc01

‫15 يونيو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-rc01. يتضمّن الإصدار 1.2.0-rc01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أصبحت الواجهات في مكتبات Compose يتم إنشاؤها الآن باستخدام طرق الواجهة التلقائية في الإصدار 8 من حزمة تطوير البرامج (JDK) (I5bcf1).
  • تمت إضافة وظائف من الدرجة العليا إلى KeyInjectionScope لإدخال ضغطات المفاتيح أثناء الضغط مع الاستمرار على مفاتيح أخرى أو تفعيلها. وتشمل هذه الدوال withKeysDown وwithKeysToggled وما إلى ذلك. أضفنا أيضًا خصائص للتحقّق مما إذا كان مفتاح وصف معيّن مضغوطًا، على سبيل المثال، isCtrlDown للتحقّق مما إذا كان أي من مفتاحي التحكّم مضغوطًا. يمكنك الرجوع إلى KeyInjectionScope للاطّلاع على مستندات حول كل دالة. (I9f6cd، b/229831515)
  • تم تقديم OverscrollEffect تجريبي للسماح بتأثيرات تجاوز حد التمرير المخصّصة، بالإضافة إلى عمليات التحميل الزائد Modifier.scrollable التي تقبلها.
  • تم نقل LocalOverScrollConfiguration التجريبي من foundation.gesture إلى حزمة الأساس وإعادة تسميته إلى LocalOverscrollConfiguration (If19fb، b/204650733)
  • تمت إعادة تسمية runComposeUiTestWithoutActivity {} إلى runEmptyComposeUiTest {}، ما يجعله متوافقًا مع createEmptyComposeRule() (I6fed7)

الإصدار ‎1.2.0-beta03

‫1 يونيو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-beta03. يتضمّن الإصدار 1.2.0-beta03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة pressKeyTimes وisCapsLockOn والأصدقاء إلى KeyInjectionScope بالإضافة إلى ذلك، تتيح واجهة برمجة التطبيقات الآن أنماط إدخال مجمّعة للماوس ولوحة المفاتيح، مثل النقر على زر الماوس مع الضغط باستمرار على مفتاح meta. (I4c8da، b/229831515)
  • تمت إضافة دعم تجريبي لإدخال الأحداث الرئيسية. استخدِم performKeyInput لإرسال الأحداث الرئيسية، أو أرسِلها من خلال السمة key الخاصة بالعنصر MultiModalInjectionScope أثناء إيماءة إدخال متعدّدة الوسائط باستخدام performMultiModalInput. يمكنك الاطّلاع على KeyInjectionScope للحصول على مستندات حول واجهة برمجة التطبيقات. (Ic5000، b/229831515)
  • أضِف GoogleFont.Provider.AllFontsListUri لاسترداد مصدر الإنترنت الأساسي لخطوط Google المتوافقة مع Android.
  • تحسين رسائل الخطأ التي يتم إعادة طرحها عندما يتعذّر تحميل GoogleFonts في Compose (I0416c)

إصلاح الأخطاء

  • عند إضافة أحداث InputEventChange إلى أداة Velocity Tracker، سنأخذ في الاعتبار الآن الفروق بدلاً من المواضع، وسيضمن ذلك احتساب السرعة بشكل صحيح في جميع الحالات حتى إذا تحرّك العنصر المستهدف (I51ec3 وb/216582726 وb/223440806 وb/227709803).
  • سيتم الآن تطبيق إعداد Show Layout Bounds على العناصر القابلة للإنشاء مباشرةً بعد تفعيله أو إيقافه من مربّع الإعدادات السريعة، بدون الحاجة إلى الخروج من النشاط وإعادة الدخول إليه. (I843d5، b/225937688)
  • لا يؤدي البحث عن سلسلة تسهيل الاستخدام إلى بدء تحميل الخط. في السابق، كان يتم محاولة تحميل الخطوط الخاصة بـ StyleSpans، ما كان يؤدي إلى حدوث أعطال إذا تمت الكتابة فوق FontFamily.Resolver. (I4609d)
  • لن يؤدي الضغط على مفتاح الحذف للأمام عندما يكون المؤشر في نهاية حقل نص إلى حدوث عطل.
  • يتطلّب كل من DeleteSurroundingTextCommand وDeleteSurroundingTextInCodePointsCommand الآن أن تكون وسيطات الدالة الإنشائية غير سالبة. (Ica8e6، b/199919707)

الإصدار ‎1.2.0-beta02

‫18 مايو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-beta02. يتضمّن الإصدار 1.2.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إعادة استخدام الوظائف في أنواع المعاينات الأخرى (I19f39)

إصلاح الأخطاء

  • تمت إعادة تسمية ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer إلى DisposeOnDetachedFromWindowOrReleasedFromPool لتعكس بشكل أفضل الحالات التي يتم فيها التخلص من الموارد، بدلاً من الحالات التي لا يتم فيها التخلص من الموارد. (If15ca)

الإصدار 1.2.0-beta01

‫11 مايو 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-beta01. يتضمّن الإصدار 1.2.0-beta01 هذه التعديلات.

الميزات الجديدة

  • هذا هو الإصدار التجريبي الأول من الإصدار 1.2.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة BeyondBoundsInterval تجريبية يمكن استخدامها من خلال عمليات التنفيذ المخصّصة لـ LazyList عندما يتم تخطيط العناصر خارج الحدود المرئية (Ifabfb، b/184670295)
  • أصبحت الإصدارات التي تتضمّن مفاتيح من Modifier.composed واجهة برمجة تطبيقات ثابتة (Ie65e4، b/229988420)
  • تم تبسيط واجهة برمجة التطبيقات rememberNestedScrollConnection لاستخدام متغيرات محلية للتركيب من أجل الحصول على معلومات العرض الحالية (I67ca7)
  • يمكن الآن استخدام التعليق التوضيحي @ComposableTarget والتعليقات التوضيحية التي تحمل العلامة @ComposableTargetMarker في نطاق الملف باستخدام البادئة @file. سيؤدي استخدام تعليق توضيحي مستهدَف على مستوى نطاق الملف إلى افتراض أنّ جميع الدوال القابلة للإنشاء في الملف تهدف إلى استهداف أداة التطبيق المرتبطة. على سبيل المثال، يؤدي استخدام @file:UiComposable إلى الإعلان بأنّ جميع دوال @Composable تستهدف أداة تطبيق واجهة مستخدم Compose. يجب أن توفّر الدالة التي تحتاج إلى استهداف أداة تطبيق أخرى بشكل صريح التعليق التوضيحي الخاص بعلامة الاستهداف لأداة التطبيق المطلوبة. (I40804)
  • تم طرح واجهة برمجة تطبيقات تجريبية جديدة ومستقلة عن النظام الأساسي للاختبار: interface ComposeUiTest وfun runComposeUiTest(block: ComposeUiTest.() -> Unit)، ويمكن استخدامهما لتشغيل اختبارات واجهة مستخدم Compose بدون الحاجة إلى TestRule. لتنفيذ اختبار بدون ComposeTestRule، مرِّر الاختبار كدالة lambda إلى runComposeUiTest، واستخدِم الطرق والعناصر في نطاق جهاز الاستقبال ComposeUiTest، وهي نفسها الموجودة في ComposeContentTestRule.

    تتم إضافة interface AndroidComposeUiTest وfun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit) الخاصتَين بنظام التشغيل Android لتوفير إمكانية الوصول إلى النشاط الأساسي، على غرار AndroidComposeTestRule. للحصول على المزيد من التحكّم، يمكنك إنشاء class AndroidComposeUiTestEnvironment بنفسك.

    تكون عملية التنفيذ على الكمبيوتر المكتبي class DesktopComposeUiTest، ولكن لا تتوفّر حاليًا أي دوال تشغيل خاصة بالكمبيوتر المكتبي.

    يمكن نقل اختبار من ComposeTestRule إلى ComposeUiTest باتّباع الخطوات التالية (مثال على نظام التشغيل Android). من:

    @RunWith(AndroidJUnit4::class)
    class MyTest {
        @get:Rule val rule = createComposeRule()
        @Test
        fun test() {
            rule.setContent {
                Text("Hello Compose!")
            }
            rule.onNodeWithText("Hello Compose!").assertExists()
        }
    }
    

    إلى:

    @RunWith(AndroidJUnit4::class)
    class MyTest {
        @Test
        @OptIn(ExperimentalTestApi::class)
        fun test() = runComposeUiTest {
            setContent {
                Text("Hello Compose!")
            }
            onNodeWithText("Hello Compose!").assertExists()
        }
    }
    
  • في الوقت الحالي، لا تتضمّن ComposeContentTestRule وComposeTestRule ميزات ComposeUiTest، ما يعني أنّه لا يمكن بعد استدعاء دوال الإضافة على ComposeUiTest من واجهة TestRule. عندما تنتقل ComposeUiTest إلى واجهة برمجة تطبيقات ثابتة، سيتم تغيير ComposeContentTestRule وComposeTestRule ليتم تمديدهما من ComposeUiTest. (Ib4e90)

  • تمت إعادة تسمية "LineHeightBehavior" إلى "LineHeightStyle"

  • تمت إعادة تسمية "LineVerticalAlignment" إلى "LineHeightStyle.Alignment"

  • تمت إعادة تسمية LineHeightTrim إلى LineHeightStyle.Trim

  • تمت إزالة قيم أداة الإنشاء التلقائية من LineHeightStyle (I582bf، b/181155707)

  • تمت إضافة Brush إلى TextStyle وSpanStyle لتوفير طريقة لرسم نص بألوان متدرّجة. (I53869، b/187839528)

  • تم تغيير السمتَين trimFirstLineTop وtrimLastLineBottom الخاصتَين بالعنصر LineHeightBehavior إلى قيمة تعدادية واحدة: LineHeightTrim. تحتوي LineHeightTrim على 4 حالات محدّدة بقيمتَين منطقيتَين: FirstLineTop وLastLineBottom وBoth وNone (Ifc6a5 وb/181155707)

  • تمت إضافة "LineHeightBehavior" إلى "TextStyle" و"ParagraphStyle". تتحكّم السمة LineHeightBehavior في ما إذا كان سيتم تطبيق ارتفاع السطر على أعلى السطر الأول وأسفل السطر الأخير. ويحدّد أيضًا محاذاة السطر في المساحة التي يوفّرها TextStyle(lineHeight).

    على سبيل المثال، يمكن الحصول على سلوك مشابه لما تحدّده خدمة CSS من خلال LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false).

  • لا تعمل إعدادات trimFirstLineTop وtrimLastLineBottom بشكل صحيح إلا عندما تكون قيمة includeFontPadding هي "خطأ". (I97332، b/181155707)

  • تم تغيير الدالتَين PlatformParagraphStyle.lerp وPlatformSpanStyle.lerp ليصبحا دالتَين من المستوى الأعلى (I9a268).

إصلاح الأخطاء

  • توضّح مستندات PointerInputChange::copy الآن بشكل صحيح أنّها نسخة سطحية. (I182f5)
  • إتاحة علامة الحذف الإيجازي عندما يكون الارتفاع محدودًا ولا يتسع لجميع أسطر النص (Ie528c، b/168720622)
  • تم تفعيلها تلقائيًا في includeFontPadding. يمكنك إيقاف includeFontPadding باستخدام السمة TextStyle.platformTextStyle. في المستقبل القريب، سنغيّر السلوك التلقائي، ولكن إلى أن يحين ذلك الوقت، سيسمح لنا هذا التغيير بدمج تحسينات ارتفاع الأسطر بشكل أفضل (aosp/2058653) وحلّ مشاكل الاقتصاص TextField. (I01423، b/171394808)

المساهمة الخارجية

  • تم الآن عكس اتجاه MouseInjectionScope.scroll(delta = someDelta) على أجهزة Android عند التمرير عموديًا (إذا كانت قيمة someDelta موجبة، سيتم التمرير للأسفل) (Ifb697، b/224992993)

الإصدار ‎1.2.0-alpha08

‫20 أبريل 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha08. يتضمّن الإصدار 1.2.0-alpha08 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم تصنيف وظائف pluralStringResource على أنّها تجريبية من أجل السماح بتطويرها لتوفير دعم أفضل للغة العربية في المستقبل. (If24e4)
  • تقبل الآن الفقرة وMultiParagraph مَعلمة Constraints. لا يؤدي تمرير Constraints.maxHeight إلى تنفيذ أي عملية في الوقت الحالي، ولكنّه سيسمح بإجراء بعض العمليات الحسابية في المستقبل، مثل حذف بعض الأحرف استنادًا إلى الارتفاع. (I6afee، b/168720622)
  • تقبل السمة SubcomposeSlotReusePolicy.getSlotsToRetain() الآن فئة مخصّصة تشبه MutableSet ولا تسمح بإضافة عناصر جديدة إليها. (Icd314)
  • أصبح PointerIcon الآن واجهة @Stable (I9dafe)
  • تم إيقاف الاستهلاك الجزئي (النزول أو الموضع) نهائيًا في PointerInputChange. يمكنك استخدام consume() لاستهلاك التغيير بالكامل. يمكنك استخدام isConsumed لتحديد ما إذا كان مستخدم آخر قد استهلك التغيير من قبل أم لا.
  • تنشئ الدالة PointerInputChange::copy() الآن نسخة سطحية دائمًا. وهذا يعني أنّه سيتم استخدام نُسخ PointerInputChange عند استخدام إحدى النُسخ. إذا أردت إنشاء PointerInputChange غير مرتبط، استخدِم الدالة الإنشائية بدلاً من ذلك. (Ie6be4، b/225669674)
  • تفعيل إمكانية التشغيل التفاعلي لميزة "التمرير المتداخل" بين Compose وView في الاتجاه Compose > View وهذا يعني أنّ العنصر الرئيسي الذي يتضمّن عناصر Compose سيتمكّن من تلقّي دلتا التمرير المتداخل من طريقة عرض التمرير المتداخل. (If7949، b/174348612)
  • SemanticsProperty testTagsAsResourceId الجديدة، والتي يمكن استخدامها لجعل Compose متوافقًا مع اختبارات UIAutomator المصمَّمة لنظام View (I39c20)
  • عرض جميع الأوزان المتاحة لخطوط النظام على Android عند استخدام FontFamily.SansSerif سيتم استخدام أسماء الخطوط الاحتياطية، مثل sans-serif-medium، داخليًا على الإصدارات من 21 إلى 28 من واجهة برمجة التطبيقات. هذا تغيير في السلوك، لأنّه في السابق كان يتم توفير الأوزان 400 و700 فقط على الإصدارات من 21 إلى 28 من واجهة برمجة التطبيقات. (I380fe، b/156048036، b/226441992)
  • أعاد المدرّبون "فقرة" و"فقرات متعدّدة" ترتيب الوسيطات الموضعية لتكون قبل الوسيطات الاختيارية. (Idafaa)
  • تتلقّى السمة AndroidFont الآن typefaceLoader كمَعلمة منشئ. (I2c971)

الإصدار 1.2.0-alpha07

‫6 أبريل 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha07. يتضمّن الإصدار 1.2.0-alpha07 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة الدالة الجديدة Snapshot.withoutReadObservation { ... }. يسمح هذا الإجراء للمستخدمين بتنفيذ lambda الذي تم تمريره بدون الاشتراك في تغييرات قيم الحالة التي تمت قراءتها أثناء هذا الحظر. قد يكون هذا الخيار مفيدًا في حالات الاستخدام التي تريد فيها الاستفادة من عمليات الكتابة والقراءة الآمنة في سلاسل المحادثات المستندة إلى اللقطات، ولكنك تريد أن تتمكّن من قراءة القيمة بدون التسبّب في إعادة إنشاء أو إعادة قياس غير ضرورية. (I9f365، b/214054486)
  • تتيح السمة consumeWindowInsets للإضافة في ComposeView للمطوّرين إيقاف استخدام WindowInsets على Android. يسمح ذلك بتطبيق WindowInsets بشكل منفصل على كل ComposeViews في التسلسل الهرمي بدون أن يتداخل بعضها مع بعض. (I0ef08، b/220943142)
  • تمت إضافة KeyboardType.Decimal كبديل لـ Keyboard.Number لتضمين الفاصل العشري تحديدًا في محرر أسلوب الإدخال (IME). (Iec4c8، b/209835363)
  • أصبحت واجهتا برمجة التطبيقات PointerEventType.Scroll وPointerEvent.scrollDelta ثابتتَين الآن (I574c5، b/225669674)
  • تفعيل إمكانية التشغيل التفاعلي للتمرير المتداخل بين View وCompose لفئات View المتوافقة وهذا يعني أنّ Compose يمكنه الآن إرسال دلتا التمرير إلى عنصر رئيسي (متعاون) في View. (I5d1ac، b/174348612)
  • تم تعديل FontFamily.Resolver لدمج إعداد تسهيل استخدام ميزة "تغميق النص" على مستوى النظام (I6c1e7)
  • تم إيقاف Font(AssetManager, String, ...) نهائيًا واستبداله بـ Font(String, AssetManager, ...). هذه واجهة برمجة تطبيقات تجريبية. (I1c7a4)
  • أضِف واصف خط جديدًا Font(DeviceFontFamilyName) للبحث اختياريًا عن الخطوط المثبَّتة على النظام أثناء سلاسل الخطوط الاحتياطية. (I30468، b/219754572)
  • تمت إضافة إعدادات توافق مؤقتة لـ includeFontPadding في TextStyle/ParagraphStyle. يمكن تغيير includeFontPadding من خلال TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false)). هذا خيار إعداد مؤقت لتفعيل عملية نقل البيانات، وسيتم إزالته. (If47be، b/171394808)
  • أضِف إضافة GoogleFont.Provider.isAvailableOnDevice للحصول على المساعدة في تصحيح الأخطاء. (I64e31)
  • إضافة أداة إنشاء GoogleFont.Provider لاستخدامها مع @ArrayRes (Ic5ee1، b/225984280)
  • تمت إعادة تسمية Compose GoogleFont إلى Font(GoogleFont)، وستظل واجهة برمجة التطبيقات ثابتة في ما عدا ذلك. (I125f2)

إصلاح الأخطاء

  • تمت إضافة عملية فحص lint إلى material/Scaffold للتأكّد من استخدام المساحة المتروكة الداخلية (Ifb111)

الإصدار ‎1.2.0-alpha06

‫23 مارس 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha06. يتضمّن الإصدار 1.2.0-alpha06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة إجراء RequestFocus الدلالي لطلب التركيز على العنصر المستهدف القابل للتركيز. (I17b71)
  • تم تعديل عملية تحليل الرسومات المتجهة القابلة للرسم لتتيح عكس المحتوى تلقائيًا في VectorPainter إذا كان اتجاه التنسيق الحالي من اليمين إلى اليسار. (I79cd9، b/185760237)
  • تم تعديل ألوان الظل/الإضاءة المحيطة لتصبح مَعلمات لاحقة للرمز Modifier.graphicsLayer من أجل التوافق مع واجهة برمجة التطبيقات (I3f864، b/160665122)

  • تمت إضافة عمليات تنفيذ تلقائية للون الظل/الخلفية في GraphicsLayerScope لضمان عدم حدوث تغييرات غير متوافقة في واجهة برمجة التطبيقات.

  • تمت إضافة وقت الحدث إلى أحداث RSB‏ (Ief8ae)

  • تم الآن دمج "FocusOrder" في "FocusProperties"، وأصبحت "focusProperties()" تتضمّن الآن جميع إمكانات "focusOrder()". تم إيقاف FocusOrder وfocusOrder() نهائيًا. يجب استبدال focusOrder() الذي يقبل focusRequester بمعدِّل focusRequester() مع focusProperties(). يتيح ذلك للمعدّلات فصل الاهتمامات بشكل أفضل. (I601b7)

  • ستؤدي ترقية كلّ من RecyclerView وCompose الآن إلى تحسين أداء التمرير في RecyclerViews التي تتضمّن طرق عرض Compose كعناصر فرعية.

  • إضافة ViewCompositionStrategy.Default كوسيلة لاسترداد الاستراتيجية التلقائية المضمّنة

  • أضِف ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer، وهي الاستراتيجية التلقائية الجديدة التي تتعامل بشكل صحيح مع حاويات التجميع، مثل RecyclerView. (If7282)

  • تمت إضافة إمكانية إضافة تعليقات توضيحية إلى فئات التعليقات التوضيحية باستخدام ‎ @Preview كخطوة أولى لإضافة ميزة "المعاينة المتعددة". يمكن استخدام هذه التعليقات التوضيحية لإضافة تعليقات توضيحية إلى طرق Composable أو فئات التعليقات التوضيحية الأخرى، والتي يمكن اعتبارها بعد ذلك كتعليقات توضيحية غير مباشرة باستخدام @Preview المحدّدة. (I12eff)

  • تمت إضافة أجهزة مرجعية إلى قائمة الأجهزة في @Preview (I071c9)

إصلاح الأخطاء

  • تم تعديل واجهات برمجة تطبيقات الرسومات المتجهة لاستخدام التعليق التوضيحي القابل للإنشاء المناسب ‎ @VectorComposable بدلاً من ‎ @UiComposable (I942bc)
  • إزالة crossinline من AnnotatedString.Builder.withStyle (If84d5)

المساهمة الخارجية

  • compose-ui: إضافة السمتَين ambientShadowColor وspotShadowColor إلى GraphicsLayerScope (I1ba1a، b/160665122)
  • أصبحت الموارد بصيغة الجمع متاحة الآن من خلال دوال pluralStringResource. (Ib2f23، b/191375123)

الإصدار ‎1.2.0-alpha05

‫9 مارس 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha05. يتضمّن الإصدار 1.2.0-alpha05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تتلقّى TextToolbar الآن وسيطات lambda بدلاً من ActionCallback. (Ib2eb9، b/197950089)
  • تم تعديل إمكانية القيم الخالية في حزمتَي core وappcompat لتتوافق مع الإصدار التجريبي الثاني من Tiramisu (I0cbb7)
  • تعرض الواجهة التي تم قياسها الآن السمة parentData (I3313f)
  • أصبحت اللغة Modifier.onPlaced وواجهة OnPlacedModifier ثابتتَين الآن. (Ib5482)
  • خبر سار! يتيح إنشاء الصور المتحركة الآن استخدام إعداد "مقياس مدة الرسوم المتحركة" من "خيارات المطوّرين". (I5a4fc، b/161675988)
  • تمت إضافة معدِّل BeyondBoundsLayout محلي (If8b51، b/184670295)
  • النص: تم الآن إيقاف السمة includeFontPadding تلقائيًا. تم حلّ مشاكل الاقتصاص الناتجة عن includeFontPadding=false، ولن يحدث أي اقتصاص للنصوص البرمجية الطويلة. (I31c84، b/171394808)

إصلاح الأخطاء

  • سيؤدي الآن استدعاء ComposeContentTestRule.setContent إلى طرح IllegalStateException إذا حاولت ضبط المحتوى عندما يكون هناك محتوى حالي. (I888a5، b/199631334)
  • تم إصلاح عُطل ناتج عن محتوى الحافظة أثناء القراءة من الحافظة على جهاز Android. (I06020، b/197769306)
  • تحسين عيّنات التمرير في "الملخّصات من Google" (I6a596)

المساهمة الخارجية

  • تم تعديلها لاستخدام الإصدار 1.6.0 من أنماط "كوروتين" في Kotlinx (I3366d)

الإصدار ‎1.2.0-alpha04

‫23 فبراير 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha04. يتضمّن الإصدار 1.2.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة ComposableTarget وComposableTargetMarker وComposableOpenTarget التي تتيح إعداد تقارير في وقت التجميع عن الحالات التي يتم فيها استدعاء دالة مركّبة تستهدف واجهة تطبيقية (applier) لم يتم تصميمها لاستخدامها.

    في معظم الحالات، يمكن استنتاج التعليقات التوضيحية من خلال المكوّن الإضافي لبرنامج التجميع الخاص بـ Compose، لذا يجب أن يكون استخدام هذه التعليقات التوضيحية مباشرةً أمرًا نادرًا . تشمل الحالات التي لا يمكن استنتاجها إنشاء واستخدام واجهة تطبيقية (applier) مخصّصة، أو دوال مركّبة مجرّدة (مثل طرق الواجهة)، أو حقول أو متغيرات عمومية تكون تعبيرات لامدا قابلة للإنشاء (يتم استنتاج المتغيرات والمعلمات المحلية)، أو عند استخدام ComposeNode أو دوال مركّبة ذات صلة.

    بالنسبة إلى أدوات التطبيق المخصّصة، يجب أن تضيف الدوال القابلة للإنشاء التي تستدعي ComposeNode أو ReusableComposeNode تعليقًا توضيحيًا ComposableTarget للدالة وأي أنواع مَعلمات lambda قابلة للإنشاء. ومع ذلك، يُنصح بإنشاء تعليق توضيحي يتضمّن ComposableTargetMarker، ثم استخدام التعليق التوضيحي الذي تم وضع علامة عليه بدلاً من ComposableTarget مباشرةً. تكون التعليقات التوضيحية القابلة للإنشاء المميّزة بـ ComposableTargetMarker مكافئة لـ ComposbleTarget مع الاسم المؤهَّل بالكامل لفئة السمة كمعلَمة مطبِّقة. للاطّلاع على مثال حول استخدام ComposableTargetMarker، يُرجى الرجوع إلى anroidx.compose.ui.UiComposable. (I38f11)

  • تتلقّى السمة Font(resId, ...) الآن loadingStrategy على واجهة برمجة التطبيقات الثابتة. (Ief3d2)

  • أصبحت واجهة برمجة التطبيقات FontLoadingStrategy الآن واجهة برمجة تطبيقات ثابتة. (I1ee35، b/174162090)

  • إتاحة تحميل الخطوط بشكل غير متزامن في "النص" (I77057، b/214587005)

  • إضافة واجهة برمجة تطبيقات وسيطة لتحويل Font.ResourceLoader المخصّص إلى FontFamily.Resolver (Ia0060)

إصلاح الأخطاء

  • يتم تمرير FontFamily.Resolver إلى التركيبات الفرعية، مثل Popup.
  • يتم تمرير Font.ResourceLoader إلى التركيبات الفرعية، مثل Popup. (I48fa5)

الإصدار ‎1.2.0-alpha03

‫9 فبراير 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha03. يتضمّن الإصدار 1.2.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف طُرق notifyFocusedRect نهائيًا في TextInputSession وTextInputService، ولن يتم استدعاؤها. يُرجى استخدام BringIntoViewRequester بدلاً من ذلك. (Ia4302، b/192043120، b/216842427، b/178211874)
  • تمت إضافة طريقة destroyDisplayListData إلى فئة RenderNode الصورية (I1e659، b/216660268)
  • تمت إضافة واجهة برمجة تطبيقات جديدة تتيح قياس حجم العناصر الفرعية التي تم إنشاؤها مسبقًا في SubcomposeLayout. (I857ea)
  • تمت إضافة movableContentOf التي تحوّل دالة lambda قابلة للإنشاء إلى دالة lambda تنقل حالتها والعُقد المقابلة إلى أي موقع جديد يتم استدعاؤها فيه. عندما تنتهي المكالمة السابقة من التركيب، يتم الاحتفاظ بالحالة مؤقتًا، وإذا انضمت مكالمة جديدة إلى التركيب، يتم نقل الحالة والعُقد المرتبطة بها إلى موقع المكالمة الجديدة. إذا لم تتم إضافة أي مكالمة جديدة، ستتم إزالة الحالة نهائيًا وسيتم إعلام المراقبين المسجّلين.

    إذا تم استدعاء دالة movableContentOf lambda عدة مرات في التركيبة نفسها، يتم إنشاء حالة وعُقد جديدة لكل عملية استدعاء، وعندما تغادر عمليات الاستدعاء التركيبة وتدخل عمليات استدعاء جديدة، يتم نقل الحالة من عمليات الاستدعاء الأولى التي تغادر إلى عمليات الاستدعاء التي تدخل بالترتيب الذي يتم استدعاؤها به. تتم إزالة جميع الحالات التي لم تتم المطالبة بها من خلال المكالمات الجديدة بشكل دائم. (Ib4850)

  • أصبحت "FontFamilyResolver" متاحة الآن من خلال LocalFontFamilyResolver.current

  • تمت إضافة createFontFamilyResolver(context) وcreateFontFamilyResolver(context, coroutineScope) لإنشاء أدوات تحليل جديدة خاصة بـ FontFamily خارج نطاق استخدام Compose.

  • تتلقّى الفقرة وMultiParagraph الآن FontFamily.Resolver

  • يحتوي TextLayoutResult.layoutInput.fontFamilyResolver الآن على برنامج التعيين المستخدَم في هذا التنسيق، وتم إيقاف TextLayoutResult.layoutInput.resourceLoader نهائيًا لأنّه لم يعُد مستخدَمًا. (Id5a45، b/174162090)

  • إتاحة تحميل الخطوط بشكل غير متزامن واختياري، مع سلوك احتياطي يتم استخدام هذا المسار من خلال Text وTextField، ويتم عرضه من خلال FontFamilyResolver.

  • إتاحة التحميل المُسبَق للخطوط من خلال FontFamilyResolver.preload

  • تسمح السمة FontFamilyResolver.setAsyncLoadContext بضبط سياق الروتين الفرعي العام المستخدَم لتحميل الخطوط غير المتزامنة. (I87fe8، b/174162090)

  • تمت إضافة AndroidFont، وهي واجهة برمجة تطبيقات جديدة منخفضة المستوى لتوفير أنواع جديدة من واصفات موارد الخطوط على Android. على سبيل المثال، تحميل الخطوط من خادم خلفي خاص بالتطبيق، أو تحديد موقع الخطوط المثبَّتة مسبقًا على الجهاز فقط بشكل اختياري، أو تحميل خط من مصدر غير متوفّر من خلال مصانع الخطوط الحالية.

  • تمت إضافة ميزات إلى واجهة برمجة التطبيقات Font.ResourceLoaded لإتاحة تحميل الخطوط بشكل اختياري وغير متزامن. ولا يُنصح مطوّري التطبيقات باستخدام واجهة برمجة التطبيقات هذه مباشرةً. لإضافة أنواع جديدة من الخطوط، اطّلِع على AndroidFont.

  • تسمح دالة الإضافة Font.AndroidResourceLoader بإنشاء Font.ResourceLoader خارج التركيب.

  • تمت إضافة المَعلمة loadingStrategy إلى الخطوط المستندة إلى الموارد، وذلك للسماح بالتحميل غير المتزامن عندما يشير مرجع خط المورد إلى ملف XML للخطوط القابلة للتنزيل. (Ie5aea، b/174162090)

  • تم إيقاف المنشئ Typeface(FontFamily) نهائيًا. كانت هذه السمة تُستخدَم سابقًا لتحميل الخطوط مسبقًا، وقد يستغرق ذلك مدة تصل إلى 10 ثوانٍ للخطوط القابلة للتنزيل. باستخدام الخطوط القابلة للتنزيل، قد يتم حظر هذا الطلب لمدة 10 ثوانٍ. استخدِم FontFamilyResolver.preload بدلاً من ذلك.

  • تم إيقاف fontResource(FontFamily): Typeface نهائيًا. كانت هذه السمة تُستخدَم سابقًا لتحميل الخطوط مسبقًا، وقد يستغرق ذلك مدة تصل إلى 10 ثوانٍ للخطوط القابلة للتنزيل. بدلاً من ذلك، استخدِم FontFamilyResolver.preload (If8e7c، b/174162090).

  • تم إيقاف الدالة الإنشائية SubcomposeLayoutState التي تقبل maxSlotsToRetainForReuse نهائيًا. بدلاً من ذلك، هناك أداة إنشاء جديدة تقبل SubcomposeSlotReusePolicy، وهي واجهة جديدة تتيح تحكّمًا أكثر دقة في الفتحات التي يجب الاحتفاظ بها لإعادة استخدامها في المستقبل. (I52c4d)

  • تعرض هذه السمة دالتَي HSV وHSL في Color كواجهة برمجة تطبيقات غير تجريبية. أصبحت مساحة الألوان Oklab واجهة برمجة تطبيقات عامة. (I08fb6، b/180731008)

  • تم إيقاف AndroidComposeTestRule.AndroidComposeStatement نهائيًا، وهي لم تكن مخصّصة لواجهة برمجة التطبيقات العامة ولم تقدّم لك أي فائدة على أي حال. (Ibc46b)

  • إعادة تسمية فئة kt التي تم إنشاؤها داخليًا (Ia0b9e، b/174162090)

  • تمت إزالة FontLoadingStrategy.values (I42a9d، b/174162090)

  • أصبح اسم أداة تحميل الخطوط العامة الآن FontFamilyResolver. (I4f773، b/174162090)

  • استخدام نظام جديد لتحميل الخطوط على أجهزة الكمبيوتر (I9ce5c، b/174162090)

  • FontFamily.Resolver.resolve returns State<Any> (I4406c, b/174162090)

إصلاح الأخطاء

  • سيتم الآن إبقاء حقول TextField فوق لوحة المفاتيح عند التركيز عليها وعند عرض لوحة المفاتيح، وذلك عندما يكون وضع الإدخال السلس ADJUST_PAN. (I8eaeb، b/190539358، b/192043120)
  • يستخدم الكمبيوتر المكتبي التركيبة المحلية لـ FontFamily.Resolver
  • تم إيقاف ميزة "FontLoader" نهائيًا على أجهزة الكمبيوتر
  • مصنع createFontFamilyResolver الجديد على الكمبيوتر المكتبي (I6bbbb، b/174162090)
  • لم يعُد نوع إدخال لوحة المفاتيح الافتراضية يومض عند تغيير التركيز بين حقول النص. (I1bf50، b/187746439)

الإصدار 1.2.0-alpha02

‫26 يناير 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha02. يتضمّن الإصدار 1.2.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة Modifier.onRotaryScrollEvent() وModifier.onPreRotaryScrollEvent() لأجهزة Wear التي تحتوي على زر جانبي دوّار (I18bf5، b/210748686)
  • إضافة إضافة تجريبية View.createLifecycleAwareRecomposer (I0cde6)

المساهمة الخارجية

  • تم الآن عكس قيمة PointerEvent.scrollDelta.y على أجهزة Android (تعرض الآن القيمة 1 بدلاً من -1 إذا أملنا عجلة الماوس إلى اليمين) (Ia9811)

الإصدار 1.2.0-alpha01

‫12 يناير 2022

تم طرح androidx.compose.ui:ui-*:1.2.0-alpha01. يتضمّن الإصدار 1.2.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف FontFamily.canLoadSynchronously نهائيًا. لا تحمل هذه السمة أي معنى دلالي. (Ica5ef)
  • تمت إضافة حقل المعرّف إلى CompositionData لإنشاء معرّفات ثابتة في "أداة فحص التنسيق". (Ic116e)
  • تمت إضافة أرقام تعريف أجهزة Wear OS إلى قائمة أجهزة الإصدارات التجريبية (I93232)

تحديثات الاعتماديات

  • يعتمد الآن على Kotlin 1.6.10.

الإصدار 1.1

الإصدار 1.1.1

‫23 فبراير 2022

تم طرح androidx.compose.ui:ui-*:1.1.1. يتضمّن الإصدار 1.1.1 هذه التعديلات.

إصلاح الأخطاء

  • إصلاح NullPointerException في androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList (aosp/1947059 وb/206677462)
  • تم إصلاح عُطل ناتج عن محتوى الحافظة أثناء القراءة من الحافظة على جهاز Android. (I06020، b/197769306)
  • تم إصلاح مشكلة عرض النص من اليمين إلى اليسار في LazyVerticalGrid (aosp/1931080 وb/207510535)

الإصدار 1.1.0

‫9 فبراير 2022

تم طرح androidx.compose.ui:ui-*:1.1.0. يتضمّن الإصدار 1.1.0 هذه التعديلات.

التغييرات المهمة منذ الإصدار 1.0.0

  • إتاحة تأثير تجاوز حد التمرير في Android 12 بشكل ثابت
  • تحسينات على حجم مساحة اللمس
    • يُرجى العِلم أنّه في ما يتعلّق بالإصدار 1.0 من Compose، ستوسّع مكوّنات Material مساحة التنسيق لتلبية إرشادات تسهيل الاستخدام في Material بشأن حجم مساحة اللمس. على سبيل المثال، سيتم توسيع مساحة اللمس الخاصة بالزر إلى حد أدنى يبلغ 48×48 بكسل مستقل الكثافة، حتى إذا ضبطت حجم الزر على قيمة أصغر. يؤدي ذلك إلى توافق Compose Material مع السلوك نفسه الذي تتّبعه "مكوّنات التصميم المتعدد الأبعاد"، ما يوفّر سلوكًا متسقًا في حال استخدام كلّ من Views وCompose. يضمن هذا التغيير أيضًا استيفاء الحد الأدنى من متطلبات إمكانية الوصول إلى مساحة اللمس عند إنشاء واجهة المستخدم باستخدام مكوّنات Compose Material.
  • إتاحة شريط التنقّل بشكل ثابت
  • نقل عدد من واجهات برمجة التطبيقات التجريبية السابقة إلى الإصدار الثابت
  • التوافق مع الإصدارات الأحدث من Kotlin

الإصدار ‎1.1.0-rc03

‫26 يناير 2022

تم طرح androidx.compose.ui:ui-*:1.1.0-rc03. يتضمّن الإصدار 1.1.0-rc03 هذه التعديلات.

إصلاح الأخطاء

  • تم التحديث لإتاحة استخدام الإصدار 1.1.0-rc03 من Compose Material

الإصدار 1.1.0-rc01

15 كانون الأول (ديسمبر) 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-rc01. يتضمّن الإصدار 1.1.0-rc01 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح خطأ تسبّب في عدم توفّر إجراءات التمرير الخاصة بتسهيل الاستخدام (I7cbfb)
  • ستعمل SemanticsNodeInteraction.captureToImage() أيضًا إذا كانت قيمة HardwareRenderer.isDrawingEnabled() هي false، وذلك من خلال تفعيلها لمدة المكالمة (Idf3d0).

الإصدار ‎1.1.0-beta04

‫1 ديسمبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-beta04. يتضمّن الإصدار 1.1.0-beta04 هذه التعديلات.

الميزات الجديدة

  • تم تعديلها لتكون متوافقة مع الإصدار 1.6.0 من Kotlin

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة القيم الفارغة في androidx.core.view (I7078a، b/204917439)
  • تمت إضافة واجهات برمجة تطبيقات تجريبية تتيح للمستخدمين استخدام PointerInputchange ككل أو التحقّق مما إذا تم استخدامه أم لا. (I2e59d)
  • تضيف هذه السمة إمكانية التعامل مع أحداث عجلة التمرير في الماوس في طبقة واجهة المستخدم. (Ia14eb، b/198214718)
  • أضِف عمليات تحميل زائدة تجريبية Modifier.composed تقبل المفاتيح للمقارنة من أجل المساواة والتأهّل لتخطّي عمليات التحسين. (Ice799، b/205851704)
  • أصبح نطاق ComposeNotIdleException يمتد من Exception بدلاً من Throwable مباشرةً. يُرجى العِلم أنّ هذا يعني أنّ عبارات الالتقاط التي كانت تلتقط Exception قد تلتقط الآن ComposeNotIdleException، في حين لم يكن ذلك ممكنًا في السابق. (I9c217)

إصلاح الأخطاء

  • إصلاح مشكلة عدم تحرُّك مقابض النص عند تغيُّر مستوى ظهور محرر أسلوب الإدخال (IME) (I25f2e)

الإصدار ‎1.1.0-beta03

17 تشرين الثاني (نوفمبر) 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-beta03. يتضمّن الإصدار 1.1.0-beta03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة معدِّل جديد Modifier.onPlaced للسماح بمراقبة تغيير موضع العنصر. وبالتالي، يمكن إجراء تغييرات إضافية على إزاحة المعدِّل الفرعي استنادًا إلى التغيير الملحوظ في موضع الإعلان. (I558fd)
  • تمت إزالة InjectionScope.flush() وInjectionScope.dispose(). يتم الآن إفراغ جميع الأحداث وإلغاء النطاق في نهاية طريقة perform*Input() التي تم استدعاؤها، كما كان يحدث من قبل. (I2bed8)
  • تمت إزالة MultiModalInjectionScope.Touch وMultiModalInjectionScope.Mouse. لإدخال أحداث اللمس والماوس لإيماءات متعدّدة الأوضاع، يمكنك الآن استخدام MultiModalInjectionScope.touch() وMultiModalInjectionScope.mouse()، وكلاهما يقبلان تعبير lambda يتضمّن نطاق المستلِم لهذا الوضع. (Idde18)

إصلاح الأخطاء

  • يتم الآن احتساب القيمة التلقائية لـ durationMillis في TouchInjectionScope.swipeWithVelocity بطريقة تتيح إمكانية التمرير السريع. (I19deb)

الإصدار ‎1.1.0-beta02

‫3 نوفمبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-beta02. يتضمّن الإصدار 1.1.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة التطبيقات التجريبية BringIntoView التي تتيح لك إرسال طلب إلى العناصر الرئيسية لكي يتم التمرير لعرض عنصر (Ib918d، b/195353459)
  • واجهات برمجة تطبيقات جديدة للصور المتحركة لدعم الأدوات على وجه التحديد، تتيح هذه السمة للأدوات فحص الصور المتحركة وإعداداتها في Transitions. (I4116e)

المساهمة الخارجية

  • تمت إضافة Modifier.pointerHoverIcon (I95f01)

الإصدار 1.1.0-beta01

‫27 أكتوبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-beta01. يتضمّن الإصدار 1.1.0-beta01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة التطبيقات التجريبية BringIntoView التي تتيح لك إرسال طلب إلى الأهل ليتمكّنوا من التمرير لعرض عنصر معيّن (Ib918d، b/195353459)
  • واجهات برمجة تطبيقات جديدة للصور المتحركة لدعم الأدوات على وجه التحديد، تتيح هذه السمة للأدوات فحص الصور المتحركة وإعداداتها في Transitions. (I4116e)

الإصدار ‎1.1.0-alpha06

‫13 أكتوبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-alpha06. يتضمّن الإصدار 1.1.0-alpha06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إزالة ExperimentalComposeUiApi من ViewRootForInspector وLayoutInfo.ownerViewId (I5c2e3)
  • تمت إضافة حمل زائد بدون عنصر فرعي إلى Layout، مع تحسين الكفاءة (Ib0d9a)
  • تمت إزالة InternalCompilerApi من دوال Composer التي يجب استدعاؤها على مستوى الوحدات (I1aa0b)
  • تعرض الدالة SemanticsNodeInteraction.performSemanticsAction الآن SemanticsNodeInteraction الذي تم استدعاء الدالة عليه. (I9e5db)
  • تمت إضافة LocalInputModeManager CompositionLocal لرصد TouchMode/NonTouchMode. (I6a83c، b/175899786)
  • تمت إضافة viewConfiguration: ViewConfiguration إلى LayoutInfo للسماح للمستهلكين بالحصول على القيمة الصحيحة لأشياء مثل مهلة الضغط مع الاستمرار. (I76ca6)
    • تمت إضافة viewConfiguration: ViewConfiguration إلى InjectionScope للسماح للاختبارات بتعديل عملية إدخال البيانات استنادًا إلى عوامل مثل مهلة الضغط مع الاستمرار أو مسافة اللمس.
    • تم تغيير المدة التلقائية للنقر مع الاستمرار والنقر مرّتين لكل من الإدخال باللمس والماوس لتستند إلى القيم الواردة في InjectionScope.viewConfiguration.
  • تنفيذ ExposedDropdownMenu استنادًا إلى ExposedDropdownMenuBox مع TextField وDropdownMenu في الداخل (If60b2)
  • تمت إضافة dismissOnOutsideClick إلى PopupProperties، ما أدّى إلى استبدال dismissOnClickOutside التي لم تعُد متاحة. يتلقّى العنصر الجديد موضع النقرة وحدود العنصر الثابت، ما يتيح تحكّمًا أفضل في ما إذا كان يجب استدعاء onDismissRequest أم لا. على سبيل المثال، يمكن أن يكون ذلك مفيدًا لمنع إغلاق العنصر الثابت عند النقر عليه.
    • تمت إضافة updateAndroidWindowManagerFlags إلى PopupProperties، ما يتيح التحكّم على مستوى منخفض في العلامات التي يمرّرها العنصر المنبثق إلى Android WindowManager. ستكون مَعلمة دالة lambda هي العلامات المحسوبة من قيم PopupProperties التي تؤدي إلى علامات WindowManager، مثل focusable. ستكون نتيجة الدالة lambda هي العلامات النهائية التي سيتم تمريرها إلى WindowManager في Android. سيؤدي استدعاء updateAndroidWindowManagerFlags تلقائيًا إلى عدم تغيير العلامات المحسوبة من المَعلمات. يجب استخدام واجهة برمجة التطبيقات هذه بحذر، وفقط في الحالات التي تتطلّب فيها النافذة المنبثقة سلوكًا محدّدًا جدًا. (I6e9f9)
  • تم إيقاف Recomposer.state نهائيًا واستبداله بـ Recomposer.currentState لتغيير نوعه إلى StateFlow (Ic2ab3، b/197773820)
  • تمّت إضافة flush() وdispose() إلى InjectionScope. استخدِمها عندما تريد إفراغ جميع الأحداث التي تمّت إضافتها إلى قائمة الانتظار على الفور وعندما تريد التخلّص من النطاق، على التوالي. (Ifb73a)
  • تمت إضافة performScrollToNode(matcher: SemanticsMatcher) التي تنقل الحاوية القابلة للتمرير إلى المحتوى الذي يتطابق مع أداة المطابقة المحدّدة. (Ic1cb8)
  • تتيح InjectionScope الآن استخدام Density، ما يتيح لك التحويل بسهولة بين وحدتَي البكسل (px) والبكسل المستقل عن الكثافة (dp) في performTouchInput وغيرها. (I8fe1f)

إصلاح الأخطاء

  • تعمل السمة AndroidView الآن على نشر LocalLifecycleOwner وLocalSavedStateRegistryOwner إلى العرض الخاص بها من خلال ViewTreeLifecycleOwner وViewTreeSavedStateRegistryOwner. (I38f96، b/179708470)
  • إصلاح مشكلة عدم معالجة WearOS SwipeToDismissBox أحيانًا لعمليات التمرير السريع (I9387e)
  • تم تغيير الوقت التلقائي بين أحداث الإدخال التي تم إدخالها من 10 ملي ثانية إلى 16 ملي ثانية. قد يؤدي ذلك إلى تغيير نتيجة الاختبارات التي تنفّذ إيماءات إدخال، مثل التمرير السريع بشكل محدّد. (I829fd)

الإصدار ‎1.1.0-alpha05

‫29 سبتمبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-alpha05. يتضمّن الإصدار 1.1.0-alpha05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة إمكانية التواصل بين المعدِّلات (Id5467، b/198826874)
  • تمت إضافة مؤشرات تجريبية سابقة إلى PointerEventChange. (Ic1fd8 وb/197553056 وb/199921305)
  • تمّت إضافة density: Density وlayoutDirection: LayoutDirection إلى LayoutInfo. يتيح ذلك لمستهلكي LayoutInfo تفسير الأبعاد والموضع المعروضَين في LayoutInfo بشكل صحيح. (I002f1)
  • تمت إضافة دعم تجريبي لإدخال أحداث الماوس. استخدِم performMouseInput لبدء إرسال أحداث الماوس، أو أرسِل أحداث الماوس من خلال السمة Mouse الخاصة بالعنصر MultiModalInjectionScope أثناء إيماءة إدخال متعددة الوسائط باستخدام performMultiModalInput. يمكنك الاطّلاع على MouseInjectionScope للحصول على مستندات حول واجهة برمجة التطبيقات المتاحة. (Iaa4a8، b/190493367)

إصلاح الأخطاء

  • تم إصلاح مشكلة إمكانية الوصول إلى العناصر القابلة للتمرير (التي يتم تحميلها عند الحاجة وغير القابلة للتمرير) عند التمرير (I6cdb0)
  • تم تحسين TouchInjectionScope.swipeWithVelocity. أصبح بإمكانها الآن قبول مجموعة أكبر من متغيّرات الإدخال، وستقترح تغييرات على الإدخال إذا تعذّر إنشاء تمرير سريع (I40fbe، b/182477143).

الإصدار ‎1.1.0-alpha04

‫15 سبتمبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-alpha04. يتضمّن الإصدار 1.1.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • يتضمّن PointerEvent الآن PointerEventType لإتاحة أحداث التمرير فوق العناصر. (I091fa)
  • السماح للأطفال بقبول إدخال المؤشر خارج حدود إدخال المؤشر الخاص بالعنصر الرئيسي يمكن للوالدَين اعتراض هذه الطلبات باستخدام السمة PointerInputScope.alwaysInterceptChildEvents (I9eae3، b/192479655).
  • تم إيقاف performGesture وGestureScope نهائيًا واستبدالهما بـ performTouchInput وTouchInjectionScope. (Ia5f3f، b/190493367)
  • تمت إضافة touchBoundsInRoot إلى SemanticsNode التي تتضمّن الحد الأدنى لحجم مساحة اللمس، وذلك ليتأكّد المطوّرون من أنّ مساحات اللمس تستوفي الحد الأدنى من متطلبات تسهيل الاستخدام. (I2e14b، b/197751214)
  • إعادة تنفيذ ميزة "قابلة للفحص" (I927bc، b/191017532)
  • تم تغيير اسم مَعلمة العنصر القابل للفحص ليتطابق مع العنصر الذي تم إنشاؤه (I3a482، b/191017532)
  • تم تقديم performTouchInput وTouchInjectionScope كبديلَين لـ performTouchInput وTouchInjectionScope، ما يمهّد الطريق لاستخدام طرق إدخال أخرى (مثل الماوس).

    تتضمّن TouchInjectionScope الطرق نفسها التي تتضمّنها GestureScope، باستثناء movePointerTo وmovePointerBy اللتين تمت إعادة تسميتهما إلى updatePointerTo وupdatePointerBy. وجميع الطرق الأخرى هي نفسها.

    يتشابه سلوك TouchInjectionScope مع سلوك GestureScope بشكل كبير، مع اختلاف بسيطَين:

    1. عند إرسال حدث down أثناء تحريك المؤشرات بدون إرسال حدث move (بمعنى آخر، تم استخدام updatePointerTo()، ولكن ليس move()، ثم تم استدعاء down())، كان التنفيذ السابق يقدّم وقت الحدث ويرسل حدث move قبل إرسال حدث down. سيظل التنفيذ الجديد يرسل حدث move، ولكنّه لن يقدّم وقت الحدث في هذه الحالة المحدّدة.
    2. عند إرسال حدث "رفع" أثناء تحريك المؤشرات بدون إرسال حدث "تحريك" (كما هو موضح أعلاه)، كان التنفيذ السابق يقدّم وقت الحدث ويرسل حدث "تحريك" قبل إرسال حدث "رفع". لا تنفّذ عملية التنفيذ الجديدة أيًا مما سبق، ولن تظهر المواضع الجديدة للمؤشرات إلا من خلال حدث "الأعلى".

    أخيرًا، تقدّم TouchInjectionScope طريقة جديدة currentPosition(pointerId: Int) للحصول على الموضع الحالي للمؤشر المحدّد. (If1191، b/190493367)

إصلاح الأخطاء

  • السماح بتوسيع حدود مساحة اللمس إلى ما بعد منطقة القص لأغراض الحد الأدنى لمساحة اللمس (I43e10، b/171509422)
  • تمت إضافة دعم تجاوز حد التمرير على أجهزة Android 12. (Iccf3c، b/171682480)

الإصدار ‎1.1.0-alpha03

‫1 سبتمبر 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-alpha03. يتضمّن الإصدار 1.1.0-alpha03 هذه التعديلات.

الميزات الجديدة

  • تم تعديل Compose 1.1.0-alpha03 ليعتمد على Kotlin 1.5.30. (I74545)

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة Modifier.inspectable لتضمين معدِّلات أخرى. (I1909b، b/191017532)
  • تمت إضافة واجهة برمجة التطبيقات BlurredEdgeTreatment لتسهيل حالات استخدام التمويه إلى مجموعات أكثر شيوعًا من علامات المقاطع وTileModes. تتضمّن معظم حالات الاستخدام إما السماح بعرض المحتوى المموّه خارج حدود المحتوى الأصلية وتطبيق التمويه على المناطق خارج هذه الحدود باستخدام اللون الأسود الشفاف، أو قص المحتوى إلى حدود المحتوى مع أخذ عيّنات من الحافة الأقرب لنواة التمويه التي تتجاوز حدود المحتوى. (I6b4b7، b/166927547)
  • تمت إضافة إمكانية استخدام RenderEffect في Compose Desktop. تمت إضافة OffsetEffect بالإضافة إلى أداة تعديل التمويه كطريقة بسيطة لإضافة مؤثرات بصرية مموّهة إلى جزء من التسلسل الهرمي للتركيبة. (I0f6aa، b/166927547)
  • تم تقديم واجهة برمجة التطبيقات RenderEffect التي يمكن ضبطها اختياريًا على Modifier.graphicsLayer لتغيير محتوى الطبقة نفسها. يمكن استخدامها لتمويه محتويات دالة مركّبة ودوال مركّبة تابعة ضمن تسلسل هرمي للتكوين. (I47c4d، b/166927547)
  • يتضمّن AwaitPointerEventScope الآن الدالتَين withTimeout()‎ وwithTimeoutOrNull()‎ (I507f0 وb/179239764 وb/182397793)
  • تمت إضافة الحد الأدنى لحجم مساحة اللمس إلى ViewConfiguration لاستخدامه في الدلالات وإدخال المؤشر لضمان إمكانية الوصول. (Ie861c)
  • إضافة إمكانية استخدام TileMode.Decal التي تفيد في تحديد سلوك الحواف بالنسبة إلى RenderEffects المستندة إلى التمويه (I7e8ed، b/166927547)
  • أصبحت performScrollToIndex وperformScrollToKey وhasScrollToIndexAction وhasScrollToKeyAction واجهات برمجة تطبيقات ثابتة الآن (I142ae، b/178483889)
  • تمت إضافة طريقة اختبار للحصول على الحدود المقتصة. (I6b28e)

إصلاح الأخطاء

  • تمت إزالة طريقة isBounded من BlurredEdgeTreatment واستبدالها بالتحقّق بشكل صريح مما إذا كانت المَعلمة shape فارغة. (I85d68)

الإصدار ‎1.1.0-alpha02

‫18 أغسطس 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-alpha02. يتضمّن الإصدار 1.1.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تتيح PointerEvent الآن قراءة حالة زر الماوس وحالة مفتاح التعديل في لوحة المفاتيح. (I6310c، b/180075467)
  • تستخدم الإيماءات التي يتم إدخالها الآن وقت MainTestClock كمصدر موثوق للوقت. سيتم ضبط الوقت الحالي للأحداث التي تم إدخالها في performGesture على الوقت الحالي لـ MainTestClock. (Ifb364، b/192064452)
  • تمت إضافة أداة إنشاء DpRect(DpOffset, DpSize) (I2cf16، b/194219828)
  • تمت إضافة فئة DpSize (I7abb1، b/194219828)

إصلاح الأخطاء

  • تم تعديل تحليل XML لرسومات المتجهات من أجل إتاحة استخدام ColorStateLists كخصائص تلوين جذرية في VectorDrawables. (I86915، b/195668138)

الإصدار ‎1.1.0-alpha01

‫4 أغسطس 2021

تم طرح androidx.compose.ui:ui-*:1.1.0-alpha01. يتضمّن الإصدار 1.1.0-alpha01 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تقبل السمة RelocationRequester.bringIntoView الآن مستطيلاً كمعلَمة تتيح لنا عرض جزء من دالة مركّبة (Ice2c5، b/194330245)
  • أصبحت السمة AnimatedImageVector وواجهات برمجة التطبيقات ذات الصلة مضمّنة الآن في وحدة androidx.compose.animation:animation-graphics الجديدة. (I60873)
  • تمت إضافة أداة تعديل تجريبية للتعامل مع طلبات النقل. (I65a97، b/178211874)
  • تم تقديم واجهة برمجة التطبيقات BrushPainter لإتاحة رسم أي Brush ضمن Painter، على غرار ColorPainter

    تم تعديل Brush API لتضمين مَعلمة حجم أساسي يتم طلبها ضمن BrushPainter (Ia2752، b/189466433)

  • تم تعديل طريقة DrawScope#drawImage التي تستهلك مستطيلات المصدر والوجهة لاستهلاك مَعلمة FilterQuality اختيارية. ويفيد ذلك في فن البكسل الذي يهدف إلى أن يكون منقطًا عند تكبيره لإنشاء فن يعتمد على البكسل. تم تعديل BitmapPainter وImage composable ليستهلكا أيضًا مَعلمة FilterQuality اختيارية (Ie4fb0، b/180311607)

  • تمت إضافة طريقة GestureScope.advanceEventTime لمنح المستخدمين تحكّمًا أكبر في توقيت الأحداث في الإيماءة (Ibf3e2)

إصلاح الأخطاء

  • لتحسين إمكانية ربط معدِّلات العرض، تأكَّد من أنّ عملية تنفيذ Modifier.paint تستدعي drawsContent. في السابق، كان من المتوقّع أن يكون Modifier.paint عقدة فرعية في سلسلة المعدِّلات، ولكنّ ذلك يمنع ضبطها على حاوية قابلة للإنشاء (مثل مربّع) أو إضافة عناصر تزيين إضافية في الأعلى، مثل Modifier.paint().border(). من خلال استدعاء Modifier.paint للدالة drawContent بعد رسم محتويات الرسام المحدّد، نحصل على اتساق أفضل في السلوك مع نمط المعدِّل. (Ibb2a7، b/178201337، b/186213275)
  • تتّبع مربّعات الحوار الآن سلوك تغيير الحجم الخاص بالمنصّة. اضبط قيمة usePlatformDefaultWidth على false لإلغاء هذا السلوك. (Iffaed، b/192682388)
  • نقل InfiniteAnimationPolicy إلى :compose:ui (I5eb09، b/160602714)
  • أصبحت عملية التمرير من خلال الإجراءات الدلالية للقوائم الكسولة ومكوّنات التمرير العادية متحركة الآن (Id9066، b/190742024)

الإصدار 1.0

الإصدار 1.0.5

‫3 نوفمبر 2021

تم طرح androidx.compose.ui:ui-*:1.0.5. يتضمّن الإصدار 1.0.5 هذه التعديلات.

إصلاح الأخطاء

  • تم إصلاح مشكلة تتبُّع الأعطال في مثيلات derivedStateOf. (aosp/1792247)

الإصدار 1.0.4

‫13 أكتوبر 2021

تم طرح androidx.compose.ui:ui-*:1.0.4. يتضمّن الإصدار 1.0.4 هذه التعديلات.

تحديثات الاعتماديات

  • تم تعديلها لتعتمد على الإصدار 1.5.31 من Kotlin

الإصدار 1.0.3

‫29 سبتمبر 2021

تم طرح androidx.compose.ui:ui-*:1.0.3. يتضمّن الإصدار 1.0.3 هذه التعديلات.

تحديثات الاعتماديات

  • تم تعديلها لتعتمد على الإصدار 1.5.30 من Kotlin

الإصدار 1.0.2

‫1 سبتمبر 2021

تم طرح androidx.compose.ui:ui-*:1.0.2. يتضمّن الإصدار 1.0.2 هذه التعديلات.

تم تعديلها لتتوافق مع الإصدار 1.0.2 من Compose. لا يزال الإصدار 1.0.2 من Compose متوافقًا مع الإصدار 1.5.21 من Kotlin.

الإصدار 1.0.1

‫4 أغسطس 2021

تم طرح androidx.compose.ui:ui-*:1.0.1. يتضمّن الإصدار 1.0.1 هذه التعديلات.

تحديثات الاعتماديات

  • تم تعديلها لتعتمد على الإصدار 1.5.21 من Kotlin.

الإصدار 1.0.0

‫28 يوليو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0. يتضمّن الإصدار 1.0.0 هذه التعديلات.

الميزات الرئيسية في الإصدار 1.0.0

هذا هو الإصدار الثابت الأول من Compose. يُرجى الاطّلاع على مدوّنة إصدار Compose الرسمية لمزيد من التفاصيل.

المشاكل المعروفة

  • إذا كنت تستخدم الإصدار 4 من استوديو Android Bumblebee Canary أو الإصدار 7.1.0-alpha04/7.1.0-alpha05 من &quot;المكوّن الإضافي لنظام Gradle المتوافق مع Android&quot;، قد تواجه التعطّل التالي:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    لحلّ هذه المشكلة، عليك زيادة minSdkVersion مؤقتًا إلى 24 أو أكثر في ملف build.gradle. سيتم حلّ هذه المشكلة في الإصدار التالي من Android Studio Bumblebee و7.1. (b/194289155)

الإصدار ‎1.0.0-rc02

‫14 يوليو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-rc02. يتضمّن الإصدار 1.0.0-rc02 هذه التعديلات.

إصلاح الأخطاء

  • تتّبع مربّعات الحوار الآن سلوك تغيير الحجم الخاص بالمنصّة. اضبط قيمة usePlatformDefaultWidth على false لإلغاء هذا السلوك. (Iffaed، b/192682388)

الإصدار ‎1.0.0-rc01

‫1 يوليو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-rc01. يتضمّن الإصدار 1.0.0-rc01 هذه التعديلات.

الميزات الجديدة

  • تقسيم وحدة ui-tooling إلى ui-tooling وui-tooling-preview (Iefa28، b/190649014)

تغييرات واجهة برمجة التطبيقات

  • إزالة الميزتَين التجريبيتَين القديمتَين FocusManager#moveFocusIn وFocusManager#moveFocusOut (I227d7 وb/170154986 وb/186567354 وb/168510304)
  • تتيح Canvas الآن استخدام المَعلمة contentDescription لتسهيل الاستخدام. (Ib547c)
  • تم تغيير اسم "useDefaultMaxWidth" في PopupProperties إلى "usePlatformDefaultWidth". (I05710)
  • يمكن الآن استخدام عرض الشاشة بالكامل في مربّعات الحوار. (I83929، b/190810877)
  • تمت إضافة دعم تجريبي لتمثيلات ألوان HSV وHSL. (Id7cf8، b/180731008)

التغييرات في السلوك

  • توفّر أداة Compose @Preview الآن LocalActivityResultRegistryOwner تتيح لك معاينة العناصر القابلة للإنشاء التي تستخدم واجهات برمجة تطبيقات مثل rememberLauncherForActivityResult() التي تعتمد على توفّر هذا المالك. (Ib13d1، b/185693006)
  • توفّر Compose @Preview الآن LocalOnBackPressedDispatcherOwner تتيح لك معاينة العناصر القابلة للإنشاء التي تستخدم واجهات برمجة تطبيقات مثل BackHandler التي تعتمد على توفّر هذا المالك. (Ia1c05، b/185693006)

إصلاح الأخطاء

  • تم نقل InfiniteAnimationPolicy إلى androidx.compose.ui:ui (I5eb09، b/160602714)
  • تمت إزالة AnimatedImageVector مؤقتًا من أجل تغيير بنية الوحدة. (I41906، b/160602714)

الإصدار ‎1.0.0-beta09

‫16 يونيو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta09. يتضمّن الإصدار 1.0.0-beta09 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تغيير تعداد Role وLiveRegionMode إلى فئات مضمّنة مع دالة إنشاء خاصة (Id1890)
  • يتم تحويل KeyboardCapitalization إلى فئة مضمّنة. (Id5a1c)
  • غيِّر HapticFeedbackType إلى فئة مضمّنة. (I255ec)
  • ‫Modifier.pointerInteropFilter هو ‎ @ExperimentalComposeUiApi. (Iede6c)
  • أصبحت TextAlign وFontSynthesis وTextDirection الآن فئات مضمّنة. (I212fe)
  • تم تغيير TextOverflow إلى فئة مضمّنة. (I433af)
  • أصبح FontStyle الآن فئة مضمّنة. (I9e48b)

إصلاح الأخطاء

  • الثوابت الرئيسية هي ‎ @ExperimentalComposeUiApi في الوقت الحالي. يمكن أن يعرّف رمز الاستخدام الثوابت الخاصة قبل الاستقرار. (Ia5d48)
  • يمكن الآن إجراء اختبارات Compose على Robolectric. تم رصد القيود التالية حتى الآن:
    • لا تتوفّر خريطة بتات أصلية، لذا يؤدي ImageBitmap() إلى NullPointerException.
    • لا يوجد رسم، لذا ستنتظر captureToImage() إلى أجل غير مسمى عملية الرسم التالية (أي سيحدث توقّف تام).
    • لم يتم تحميل أي خط، لذا سيتم قياس أي نص بشكل غير صحيح. يبلغ الارتفاع الثابت لكل الأحرف حوالي 20 بكسل والعرض 1 بكسل.
    • لا تنفّذ ComposeTestRule.waitUntil {} سلسلة التعليمات الرئيسية أثناء انتظارها، ما يجعلها مماثلة تمامًا ComposeTestRule.mainClock.advanceTimeUntil {} من المتوقّع تحديد المزيد من القيود في المستقبل. (I284fa)

قواعد الملفات الشخصية المُضافة

يضيف هذا الإصدار قواعد الملف الشخصي إلى وحدات الإنشاء التالية (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

ما هي قواعد الملف الشخصي؟

  • يتم تحديد قواعد الملف الشخصي لمكتبة في ملف نصي baseline-prof.txt موجود في الدليل src/main أو دليل مكافئ. يحدّد الملف قاعدة لكل سطر، حيث تكون القاعدة في هذه الحالة عبارة عن نمط للمطابقة مع الطرق أو الفئات في المكتبة. بنية هذه القواعد هي مجموعة فرعية من تنسيق ملف ART الشخصي القابل للقراءة الذي يتم استخدامه عند استخدام adb shell profman --dump-classes-and-methods .... تتّخذ هذه القواعد أحد الشكلَين التاليَين لاستهداف الطرق أو الفئات.

  • ستتّبع قاعدة الطريقة النمط التالي:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • وستتّبع قاعدة الفئة النمط التالي:

    <CLASS_DESCRIPTOR>
    
  • هنا، <FLAGS> هو واحد أو أكثر من الأحرف H وS وP للإشارة إلى ما إذا كان يجب تصنيف هذه الطريقة على أنّها "نشطة" أو "بدء التشغيل" أو "بعد بدء التشغيل".

  • <CLASS_DESCRIPTOR> هو واصف الفئة التي ينتمي إليها الأسلوب المستهدَف. على سبيل المثال، سيكون للفئة androidx.compose.runtime.SlotTable واصف Landroidx/compose/runtime/SlotTable;.

  • ‫<METHOD_SIGNATURE> هي توقيع الطريقة، وتشمل الاسم وأنواع المَعلمات وأنواع الإرجاع الخاصة بالطريقة. على سبيل المثال، يتضمّن الإجراء fun isPlaced(): Boolean في LayoutNode التوقيع isPlaced()Z.

  • يمكن أن تتضمّن هذه الأنماط أحرف بدل (** و* و?) لكي تشمل قاعدة واحدة طرقًا أو فئات متعدّدة.

ما هي وظيفة القواعد؟

  • تشير الطريقة التي تتضمّن العلامة H إلى أنّ هذه الطريقة هي طريقة "نشطة"، ويجب تجميعها مسبقًا.

  • تشير الطريقة التي تحمل العلامة S إلى أنّها طريقة يتم استدعاؤها عند بدء التشغيل، ويجب تجميعها مسبقًا لتجنُّب تكلفة التجميع وتفسير الطريقة عند بدء التشغيل.

  • تشير الطريقة التي تحتوي على العلامة P إلى أنّها طريقة يتم استدعاؤها بعد بدء التشغيل.

  • يشير أحد الصفوف المتوفّرة في هذا الملف إلى أنّه يتم استخدامه أثناء بدء التشغيل ويجب تخصيصه مسبقًا في الذاكرة المؤقتة لتجنُّب تكلفة تحميل الصف.

آلية العمل

  • يمكن للمكتبات تحديد هذه القواعد التي سيتم تضمينها في عناصر AAR. عند إنشاء تطبيق يتضمّن هذه العناصر، يتم دمج هذه القواعد معًا واستخدام القواعد المدمجة لإنشاء ملف ثنائي مضغوط خاص بالتطبيق في ART. ويمكن أن يستفيد ART من هذا الملف عند تثبيت التطبيق على الأجهزة من أجل تجميع مجموعة فرعية محدّدة من التطبيق مسبقًا لتحسين أداء التطبيق، وخاصةً عند تشغيله للمرة الأولى. يُرجى العِلم أنّ هذا الإجراء لن يؤثر في التطبيقات التي يمكن تصحيح أخطائها.

الإصدار ‎1.0.0-beta08

‫2 يونيو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta08. يتضمّن الإصدار 1.0.0-beta08 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم استبدال تعداد NestedScrollSource بفئة مضمّنة. (Ie321b، b/187055290)
  • تمت إعادة تسمية "FocusManager.clearFocus(forcedClear = true)" إلى "FocusManager.clearFocus(force = true)" (Ia0c41)
  • تمت إعادة تصميم استخدامات التعداد لتصبح فئات مضمّنة لتجنُّب المشاكل المتعلّقة بعبارات when الشاملة عند إضافة قيم تعداد جديدة. (I2b5eb)
  • ستتم إزالة @ExperimentalComposeUiApi من PopupProperties. (I01fa6)
  • تم تغيير PointerType من تعداد إلى فئة مضمّنة (If5058)
  • لم تعُد خصائص ContentDescription وText الدلالية قيمًا فردية، بل أصبحت قوائم. يتيح ذلك دمجها كما هي بدلاً من تسلسلها. تم أيضًا توفير واجهات برمجة تطبيقات أفضل للاختبار من أجل الاستفادة من هذه التغييرات (Ica6bf وb/184825850).
  • تم إيقاف Modifier.focusModifier() نهائيًا واستبداله بـ Modifier.focusTarget() (I6c860)
  • لم يعُد يتم تضمين الدالتَين Modifier.onSizeChanged() وModifier.onGloballyPositioned() في التعليمات البرمجية (I727f6، b/186109675)
  • تم استبدال تعداد KeyboardType بفئة مضمّنة. (I73045، b/187055290)
  • تم استبدال تعداد FocusState بواجهة FocusState (Iccc1a، b/187055290)
  • تم استبدال تعداد ImeAction بفئة مضمّنة. (I18be5، b/187055290)
  • يتم تحويل PlaceholderVerticalAlign إلى فئة مضمّنة. (If6290)
  • أصبح TextUnitType الآن فئة مضمّنة. (I4cba9)
  • أصبحت دوال AnnotatedString.withAnnotation تابعة لواجهة برمجة التطبيقات ExperimentalTextApi بدلاً من ExperimentalComposeApi. (I0cd0a)
    • أصبح منشئ TextUnit الذي يتضمّن TextUnitType هو ExperimentalTextApi بدلاً من ExperimentalComposeApi.

إصلاح الأخطاء

  • تم إصلاح الخطأ الذي تم تقديمه في الإصدار التجريبي 07 والذي كان يتسبّب في عرض عناصر LazyColumn/Row بشكل جزئي بعد التمرير (I8c9ac، b/188566058)
  • ستستهلك الآن detectDragGesures وdetectVerticalGestures وdetectHorizontalGestures تغيير الموضع تلقائيًا، ولن تحتاج إلى استدعاء change.consumePositionChange في عمليات إعادة الاستدعاء onDrag (I42fc4 وb/185096350 وb/187320697).
  • تم إصلاح LayoutModifiers التي توفّر خطوط المحاذاة. تم إصلاح خطأ كان يتسبّب في عدم إعادة قياس العنصر الرئيسي عند تغيير خطوط محاذاة العناصر الفرعية. (I4401f، b/174315652)
  • تم تغيير Modifier.onGloballyPositioned() للإبلاغ عن إحداثيات أداة التعديل هذه في سلسلة أدوات التعديل، وليس إحداثيات التصميم بعد تطبيق جميع أدوات التعديل. وهذا يعني أنّ ترتيب المعدِّلات يؤثّر الآن في الإحداثيات التي سيتم تسجيلها. (Ieb67d، b/177926591)

الإصدار ‎1.0.0-beta07

‫18 مايو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta07. يتضمّن الإصدار 1.0.0-beta07 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة ViewRootForInspector لاستخدامها في "أداة الفحص" (Ib70df)
  • يتيح SubcomposeLayoutState الآن ضبط عدد الخانات القابلة لإعادة الاستخدام. سيحافظ التصميم على عدد الخانات النشطة هذا بدلاً من التخلص منها لإعادة استخدام الخانة في المرة التالية التي نحتاج فيها إلى خانة جديدة (Ieb981).
  • تم استبدال تعداد KeyEventType بفئة مضمّنة. (Id670a، b/187055290)
  • تم استبدال تعداد FocusDirection بفئة مضمّنة. (Ib6d03، b/187055290، b/184086802)
  • تتيح هذه الميزة إمكانية نقل حالة SubcomposeLayout، ما يسمح لك بتجهيز المحتوى مسبقًا في slotId مطلوب، ما يؤدي إلى تسريع عملية القياس التالية، لأنّه عند محاولة إنشاء تركيبة فرعية باستخدام slotId المحدّد في المرة التالية، لن تكون هناك حاجة إلى إنشاء تركيبة. (I42580، b/184940225)
  • إضافة مقبض اختيار المقطع (Iff80d، b/183408447)
  • تمت إزالة واجهات برمجة التطبيقات غير المستخدَمة ذات الصلة بتوافق LayoutInspector. (I2ac78)

إصلاح الأخطاء

  • ستحتفظ السمة LazyColumn/Row الآن بما يصل إلى عنصرَين مرئيَين سابقًا نشطَين (لم يتم التخلص منهما) حتى عند إيقاف التمرير. يتيح ذلك للمكوّن إعادة استخدام التركيبات الفرعية النشطة عندما نحتاج إلى إنشاء عنصر جديد، ما يحسّن أداء التمرير. (Ie5555)
  • سيتم تطبيق TextGeomerticTransform وTextDecoration على AnnotatedString على النحو المحدّد. (I61900، b/184760917)

الإصدار ‎1.0.0-beta06

‫5 مايو 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta06. يتضمّن الإصدار 1.0.0-beta06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • حلّ التعارض مع إيماءة التنقّل (I1145e)
  • لم يعُد @ComposeCompilerApi @RequiresOptIn (Iab690)
  • تمت إضافة واجهات برمجة تطبيقات تسهيل الاستخدام CollectionInfo وCollectionItemInfo التي تتيح وضع علامة على المجموعة وعناصرها لخدمات تسهيل الاستخدام (Id54ef وb/180479017).
  • تمت إضافة SemanticsActions.ScrollToIndex لتمرير قائمة تتضمّن عناصر مفهرسة إلى العنصر الذي يتضمّن فهرسًا معيّنًا، وSemanticsProperties.IndexForKey للحصول على فهرس عنصر في قائمة تتضمّن عناصر مفتاحية. يتم تنفيذ كلا الإجرائين من خلال LazyList.
    • تمت إضافة SemanticsNodeInteraction.performScrollToIndex التي تنقل قائمة إلى الفهرس المحدّد، وSemanticsNodeInteraction.performScrollToKey التي تنقل قائمة إلى العنصر الذي يتضمّن المفتاح المحدّد. (I4fe63، b/178483889، b/161584524)
  • تمت إضافة ownerViewId إلى GraphicLayerInfo (I19f62)
  • تمت إضافة عمليات تحميل زائدة إلى Font() لتحميل الخطوط من مواد العرض والملفات وFileDescriptor (I5d382)
  • تمت إضافة واجهة برمجة تطبيقات تسهيل الاستخدام error التي تتيح وضع علامة على عقدة تحتوي على إدخال غير صالح (I12997، b/180584804، b/182142737)
  • تمت إضافة Font() حمولات زائدة لتحميل الخطوط من مواد العرض والملفات وFileDescriptor (I43007)
  • إتاحة حفظ AnnotatedString في TextFieldValue.Saver تمّت إضافة الدالتَين addTtsAnnotation وwithAnnotation إلى AnnotatedString.Builder (I8cbdc، b/178446304)
  • تمت إضافة دالة إنشاء TextUnit TextUnit(value: Float, type: TextUnitType) (I7ecce، b/178446304)

الإصدار ‎1.0.0-beta05

‫21 أبريل 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta05. يتضمّن الإصدار 1.0.0-beta05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إضافة FocusManager.moveFocus(In) وFocusManager.moveFocus(Out) التجريبيتين (Ic5534، b/183746743)
  • تمت إضافة واجهة برمجة التطبيقات التجريبية performTextInputSelection (I2dcbb، b/178510628)
  • تم إيقاف واجهة InputEventCallback نهائيًا. لم يكن من الممكن استخدام الواجهة في أي واجهة برمجة تطبيقات عامة، ولم يتم استخدامها في الرمز البرمجي. (I34a02، b/184003208)
  • تم إيقاف الدالة TextLayoutResult/createTextLayoutResult نهائيًا. وهي دالة عامة غير مستخدَمة تمت إضافتها لأغراض الاختبار. لا تنفّذ الدالة أي إجراء قابل للاستخدام مع واجهات برمجة التطبيقات النصية في Compose. تم إيقاف هذه الوظيفة نهائيًا وستتم إزالتها لاحقًا. (I80413)

إصلاح الأخطاء

  • تم إصلاح إجراءات التمرير الخاصة بتسهيل الاستخدام في ACTION_SCROLL_FORWARD وACTION_SCROLL_BACKWARD وaccessibilityActionScrollLeft وaccessibilityActionScrollUp وaccessibilityActionScrollRight وaccessibilityActionScrollDown. بدلاً من التمرير إلى نهاية المحتوى القابل للتمرير، سيتم الآن التمرير بمقدار شاشة واحدة في الاتجاه المحدّد. (Ieccb0)
  • أصبحت ملفات AndroidManifest من ui-test-manifest وui-tooling-data متوافقة الآن مع Android 12 (I6f9de وb/184718994).

الإصدار ‎1.0.0-beta04

‫7 أبريل 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta04. يتضمّن الإصدار 1.0.0-beta04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أعِد تسمية hideSoftwareKeyboard وshowSoftwareKeyboard في SoftwareKeyboardController إلى hide() وshow() على التوالي.
    • توفير واجهة CompositionLocal الكاملة لـ LocalSoftwareKeyboardController، ما يسمح بضبطها (مفيد بشكل خاص في الاختبارات) (I579a6)
  • تمت إضافة واجهة برمجة التطبيقات LiveRegion التي تتيح استخدام أدوات تسهيل الاستخدام. إذا تم وضع علامة على العقدة كمحتوى ديناميكي متغيّر، ستُعلم خدمات تسهيل الاستخدام المستخدم تلقائيًا بالتغييرات التي تطرأ عليها (Idcf6f، b/172590946).
  • تم تقديم TextOverflow.Visible. (Ic8f89)

إصلاح الأخطاء

  • تم إصلاح المشكلة التي كانت تؤدي إلى تحديد موضع عناصر LazyColumn/LazyRow الموجودة على الحواف بشكل غير صحيح بعد إجراء عملية نقل سريع (Ie4d13، b/183877420)
  • تزيل AndroidViewBinding الآن بشكل صحيح الأجزاء التي تم تضخيمها من خلال FragmentContainerView عند إزالة AndroidViewBinding من التسلسل الهرمي لـ Compose. (Ib0248، b/179915946)
  • يمكن الآن تضمين AndroidViewBinding بشكل صحيح في الأجزاء التي يتم تضخيمها من خلال FragmentContainerView عندما يكون ComposeView ضمن Fragment، ما يحلّ المشاكل المتعلّقة بحفظ حالة هذه الأجزاء واستعادتها. (I70eb0، b/179915946)
  • تعتمد Compose ViewBinding الآن على Fragment 1.3.2 وتعرض الآن باستمرار الأجزاء التي تم تضخيمها من خلال FragmentContainerView بعد تغييرات الإعدادات. (I0743d، b/179915946)

الإصدار ‎1.0.0-beta03

‫24 مارس 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta03. يتضمّن الإصدار 1.0.0-beta03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • التحقّق المؤجّل من التبعيات في ViewTree الخاصة بـ ComposeView (I8dbbf، b/182466548)
  • تمت إضافة المَعلمتَين الاختياريتَين startX/endX وstartY/endY إلى الدوال swipeUp/swipeDown/swipeLeft/swipeRight في GestureScope. (I49e2d، b/182063305)

الإصدار ‎1.0.0-beta02

10 آذار (مارس) 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta02. يتضمّن الإصدار 1.0.0-beta02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمّت إضافة واجهة برمجة تطبيقات جديدة LocalSoftwareKeyboardController محلية للتركيب بدلاً من واجهة SoftwareKeyboardController السابقة في TextField. (I5951e، b/168778053)
  • تمّت إضافة واجهة برمجة تطبيقات جديدة LocalSoftwareKeyboardController محلية للتركيب بدلاً من واجهة SoftwareKeyboardController السابقة في TextField. (I84472، b/168778053)
  • تمت إزالة SemanticsMatchers التالية:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • ‫hasBottomPosition(bottom, tolerance) (If16bd)
  • تم وضع علامة SemanticsMatchers على ما يلي @ExperimentalTestApi:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (Ia600c)
  • تمت إضافة SemanticsMatchers التالية:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • ‫hasBottomPosition(bottom, tolerance) (I2f502)

إصلاح الأخطاء

  • فرض قيود على الاستخدام العام لواجهات برمجة التطبيقات التجريبية (I6aa29 وb/174531520)
  • لم يعُد androidx.compose.ui:ui يعتمد على AppCompat أو Fragment. إذا كنت تستخدم ComposeView في تطبيقك، وكنت تستخدم Fragment و/أو AppCompat، تأكَّد من استخدام AppCompat 1.3+‎ أو Fragment 1.3+‎، فهذه الإصدارات مطلوبة لضبط مالكي مراحل النشاط والحالة المحفوظة اللازمين لـ ComposeView بشكلٍ صحيح. (I1d6fa، b/161814404)
  • إصلاح المشكلة في rememberSaveable { mutableStateOf(0) } عند استخدامه داخل وجهة في Navigation-compose (I1312b، b/180042685، b/180701630)
  • تمّت إضافة واجهة برمجة تطبيقات جديدة LocalSoftwareKeyboardController محلية للتركيب بدلاً من واجهة SoftwareKeyboardController السابقة في TextField. (I658b6، b/168778053)
  • تم إصلاح خطأ NoSuchElementException النادر في ComposeRootRegistry's tearDownRegistry() (Iddce1)

الإصدار 1.0.0-beta01

‫24 فبراير 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-beta01. يتضمّن الإصدار 1.0.0-beta01 هذه التعديلات.

هذا هو الإصدار الأول من الإصدار التجريبي 1.0.0 من Compose.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة عملية الاستدعاء onStart إلى detectDragGestures (I67269، b/179995594)
  • لم تعُد المعدّلات الخاصة بتحديد الحجم وفقًا للخصائص التجريبية. (I15744)
  • تمت إعادة تسمية MeasureBlocks إلى MeasurePolicy، وأصبحت واجهة ممتعة. تم تعديل / تبسيط واجهات برمجة التطبيقات الخاصة بالتصميم لاستخدام MeasurePolicy. (Icab48، b/167662468، b/156751158)
  • تم استبدال "InteractionState" بـ "[Mutable]InteractionSource"
    • تكون الواجهات مسؤولة عن إصدار أحداث التفاعل وجمعها.
    • بدلاً من تمرير interactionState = remember { InteractionState() } إلى مكوّنات مثل Button وModifier.clickable()، استخدِم interactionSource = remember { MutableInteractionSource() }.
    • بدلاً من: Interaction.Pressed in interactionState، يجب استخدام دوال الإضافة في InteractionSource، مثل InteractionSource.collectIsPressedAsState().
    • بالنسبة إلى حالات الاستخدام المعقّدة، يمكنك استخدام InteractionSource.interactions لمراقبة سلسلة التفاعلات. اطّلِع على مستندات InteractionSource وأمثلتها للحصول على مزيد من المعلومات.
    • (I85965، b/152525426، b/171913923، b/171710801، b/174852378)
  • إضافة واجهة AccessibilityMananger وLocalAccessibilityMananger في CompositionLocals (I53520)
  • تمت إزالة طرق LayoutCoordinates المتوقّفة نهائيًا، واستخدام الدالة بدلاً من السمة لكل من positionInParent وboundsInParent (I580ed وb/169874631 وb/175142755)
  • تم استبدال أسماء الأنواع المستعارة بالأنواع الأساسية:
    • ‫"ColorStop" أصبح الآن "Pair<Float, Color>"
    • أصبحت SpanStyleRange الآن `AnnotatedString.Range
    • ‫"ParagraphStyleRange" أصبح الآن "AnnotatedString.Range<ParagraphStyle>"
    • ‫"StringAnnotation" أصبح الآن "AnnotatedString.Range<String>"
    • (I8dd1a)
  • تم إنشاء TextInputSession جديد لجلسات الإدخال من مكوّنات النص ذات المستوى المنخفض، مثل CoreTextField. (I8817f، b/177662148)
  • تعرض السمة Placeable الآن السمة measuredSize، التي تمثّل الحجم الذي تم قياس تنسيق العنصر الفرعي به فعليًا. قد لا يلتزم هذا الحجم بقيود القياس. (Ib2729، b/172560206، b/172338608)
  • إضافة معدِّل selectionGroup الذي يتيح وضع علامة على مجموعة من علامات التبويب أو أزرار الاختيار لأغراض تسهيل الاستخدام (Ie5c29)
  • أصبح من الضروري الآن إدخال defaultFactory الخاص بـ compositionLocalOf وstaticCompositionLocalOf بدلاً من أن يكون اختياريًا.

    يزيل هذا التغيير خطأ محتملاً في النوع للأنواع غير القابلة للتصنيف حيث لم يتم توفير إعدادات المصنع التلقائية. في السابق، كان هذا الإجراء يؤدي إلى توفير مرجع فارغ لنوع غير قابل للقيم الفارغة.

    بالنسبة إلى الأنواع القابلة للتصغير، ننصحك بتوفير { null } كإعداد تلقائي للمصنع.

    لا ننصح باستخدام متغيرات محلية مع أنواع غير قابلة للتصغير إلا إذا كان من الممكن توفير قيمة تلقائية معقولة. إذا لم تتوفّر قيمة تلقائية منطقية، يجب أن تعرض الدالة defaultFactory lambda استثناءً. ومع ذلك، فإنّ طرح استثناء يعني أنّ مستهلكي اللغة المحلية سيكون لديهم تبعية ضمنية على توفيرها، وهي تبعية لا يفرضها نظام الأنواع. (Ifbd2a)

  • تمت إزالة الطرق المتوقّفة نهائيًا من وحدات واجهة المستخدم (I646f6)

  • تمت إعادة تسمية عناصر تعديل الحجم. تمت إعادة تسمية Modifier.width/height/size إلى requiredWidth/requiredHeight/requiredSize. تمت إعادة تسمية Modifier.preferredWidth/preferredHeight/preferredSize إلى width/height/size. (I5b414)

  • تمّت إزالة Modifier.tapGestureFilter. يمكنك استخدام Modifier.pointerInput { detectTapGestures(...) } كبديل. (I266ed، b/175294473)

  • تمت إزالة الاستهلاك الجزئي من نظام إدخال المؤشر. الطريقة المقترَحة لتنسيق الاستهلاك الجزئي هي Modifier.nestedScroll. (Ie9c9b)

  • تم نقل الاتجاه إلى حزمة الأساس. تم نقل VelocirtTracker من ui.gesture إلى ui.input.pointer. (Iff4a8، b/175294473)

  • أصبحت imageResource وvectorResource الآن دالتَين إضافيتَين في ImageBitmap وImageVector على التوالي. تم حذف load{Image,Vector,Font}Resource دالة. (I89130)

  • تمت إزالة AnimationClockObservable والفئات الفرعية. تمت إزالة AnimatedFloat. (Icde52، b/177457083)

  • تمت إعادة تسمية Providers إلى CompositionLocalProvider

    • لم يعُد منشئ Composition يقبل مَعلمة مفتاح، وتم إيقافه نهائيًا.
    • تم تحويل currentCompositeKeyHash إلى سمة مركّبة ذات مستوى أعلى بدلاً من دالة مركّبة ذات مستوى أعلى.
    • تم نقل CompositionData وCompositionGroup إلى مساحة الاسم androidx.compose.runtime.tooling
    • تم تحويل ComposableLambda إلى واجهة بدلاً من فئة ملموسة، ولم يعُد يتضمّن مَعلمات أنواع.
    • تم تحويل ComposableLambdaN إلى واجهة بدلاً من فئة ملموسة، ولم يعُد يتضمّن مَعلمات أنواع.
    • تم نقل الدالة snapshotFlow إلى مساحة الاسم androidx.compose.runtime
    • لم يعُد دمج طريقة SnapshotMutationPolicy تجريبيًا
    • تمت إزالة الدالة clearRoots ذات المستوى الأعلى @TestOnly. لم يعُد ذلك ضروريًا.
    • تمت إزالة الدالتَين keySourceInfoOf وresetSourceInfo. لم تعُد ضرورية.
    • تمت إزالة Composer.collectKeySourceInformation. لم يعُد ذلك ضروريًا.
    • تمت إزالة الطرق isJoinedKey وjoinedKeyLeft وjoinedKeyRight. لم تعُد ضرورية.
    • تم نقل العديد من واجهات برمجة التطبيقات ذات المستوى الأعلى وإعادة تنظيمها في ملفات مختلفة. بسبب دلالات فئة الملف في Kotlin، سيؤدي ذلك إلى إيقاف التوافق الثنائي بدون إيقاف التوافق مع المصدر، لذا لن يسبّب ذلك مشكلة لمعظم المستخدمين.
    • (I99b7d، b/177245490)
  • تمت إزالة ComponentActivity.setContent() من compose:ui. استخدِم الرمز من androidx.activity:activity-compose:1.3.0-alpha01. تمت إزالة viewModel() وLocalViewModelStoreOwner من compose:ui. استخدِم تلك الواردة في androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 (I6f36b).

  • تمت إعادة تصميم Modifier.scrollable. يستخدم الآن واجهة Scrollable بدلاً من فئة ScrollableController (I4f5a5 وb/174485541 وb/175294473).

  • تمت إزالة إمكانية استخدام CustomEvens من PointerInputModifier (I02707، b/175294473)

  • لم يعُد SnapshotStateObserver تجريبيًا (Id2e6a)

  • تم حذف بعض واجهات برمجة التطبيقات التي تم إيقافها نهائيًا سابقًا (Ice5da وb/178633932)

  • تمت إزالة longPressGestureFilter وdoubleClickGestureFilter. استخدِم Modifier.pointerInput مع دوال مساعدة، مثل detectTapGestures (I2fedf، b/175294473).

  • تمت إزالة واجهة برمجة التطبيقات String.format، وتمت إعادة تصميم الاستخدامات في طرق toString المختلفة لعدم الاستفادة من String.format داخليًا. (Id1290)

  • إزالة تأكيدات dp (I798d2)

  • إزالة androidx.compose.runtime:runtime-dispatch (I55feb)

  • تتحقّق الإجراءات التي يمكن تنفيذها على النص الآن من التركيز تلقائيًا (I13777، b/179648629)

  • تمت الإزالة runBlockingWithManualClock (I15cdc، b/179664814)

  • يتم الآن تمثيل موضع التمرير في Modifier.verticalScroll()/horizontalScroll() باستخدام أعداد صحيحة (I81298)

  • تمت إعادة تسمية FlingConfig إلى FlingBehavior، وهي تتيح الآن تخصيص الصورة المتحركة الخاصة بالتعليق بدلاً من عمليات التلاشي المحدّدة مسبقًا. (I02b86، b/175294473)

  • تمّت إضافة دالة مساعدة مفيدة لضبط الإجراء نفسه لجميع عمليات ردّ الاتصال ImeAction (I63447، b/179226323)

  • تمت إزالة معاودة الاتصال SoftwareKeyboardController من جميع حقول النص، وسيتم استبدالها بواجهة برمجة تطبيقات جديدة قريبًا. (Iae869، b/168778053)

  • لم يعُد يتم استخدام FontSpan وFontWeigthStyleSpan وتمت إزالتهما. (Ie5b56، b/177423444)

  • تم إجراء التغييرات التالية على Material API:

    • تمت إضافة المَعلمة contentPadding إلى Top/BottomAppBar للسماح بتخصيص المساحة المتروكة التلقائية.
    • تمت إعادة ترتيب المَعلمات في BackdropScaffold لتتوافق مع إرشادات واجهة برمجة التطبيقات بشأن المَعلمات المطلوبة التي تسبق المَعلمات الاختيارية.
    • تم نقل المَعلمة icon في BottomNavigationItem لتصبح بعد selected وonClick.
    • تمت إعادة تسمية المَعلمة alwaysShowLabels في BottomNavigationItem إلى alwaysShowLabel.
    • تمت إعادة تسمية المَعلمات bodyContent في بعض المكوّنات إلى content فقط.
    • إعادة ترتيب المَعلمات في ButtonDefaults.buttonColors() يُرجى العِلم أنّه بما أنّ نوع المَعلمات لم يتغيّر، لن يتسبّب ذلك في حدوث خطأ في الرمز البرمجي. يُرجى التأكّد من استخدام المَعلمات المسماة أو تعديل الترتيب يدويًا، وإلا لن يعمل الرمز البرمجي بالطريقة نفسها كما كان في السابق.
    • تمّت إضافة المَعلمة secondaryVariant إلى darkColors(). يكون هذا اللون عادةً هو نفسه secondary في "المظهر الداكن"، ولكن تتم إضافته لتحقيق التناسق والمزيد من التخصيص.
    • تمت إزالة ElevationDefaults وanimateElevation() من مساحة واجهة برمجة التطبيقات العامة لأنّهما لم يكونا شائعَي الاستخدام أو مفيدَين.
    • تمت إعادة تسمية onValueChangeEnd في Slider إلى onValueChangeFinished وتم السماح بقيمة فارغة.
    • تمت إعادة تسمية المَعلمة text في Snackbar إلى content لضمان الاتساق.
    • تمت إضافة المَعلمة contentPadding إلى DropdownMenuItem للسماح بتخصيص المساحة المتروكة التلقائية، وتمّت إضافة content كإضافة إلى RowScope.
    • تمت إعادة تسمية "ModalDrawerLayout" إلى "ModalDrawer".
    • تمت إعادة تسمية "BottomDrawerLayout" إلى "BottomDrawer".
    • (I1cc66)

إصلاح الأخطاء

  • تمت إضافة واجهة برمجة تطبيقات لاستخدام موارد AnimatedVectorDrawable في Compose. استخدِم animatedVectorResource لتحميل ملف <animated-vector> XML كـ AnimatedImageVector وتحريكه باستخدام painterFor (I8ea91).
  • تمت إضافة واجهة برمجة تطبيقات جديدة LocalSoftwareKeyboardController محلية للتركيب لاستبدال واجهة SoftwareKeyboardController السابقة في TextField. (I658b6، b/168778053)

الإصدار ‎1.0.0-alpha12

‫10 فبراير 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha12. يتضمّن الإصدار 1.0.0-alpha12 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة إمكانية استخدام ViewGroups من UiApplier. تمت إزالة الدوال البرمجية القابلة للإنشاء emitView المتوقّفة نهائيًا. (Ifb214)
  • يتطلّب Modifier.pointerInput الآن مفاتيح remember للإشارة إلى الوقت الذي يجب فيه إعادة تشغيل روتين coroutine لرصد إدخال المؤشر من أجل التبعيات الجديدة. (I849cd)
  • تمت إعادة تسمية CompositionReference إلى CompositionContext (I53fcb)
  • تم تغيير اسم "الحدود" إلى DpRect (I4b32a)
  • تعديل على الاختبار: ستتحقّق الدالة hasText() من نصوص الإدخال والتسمية/التلميح/العنصر النائب في حقل النص (Iab803).
  • تم نقل الدالة البرمجية القابلة للإنشاء viewModel() وLocalViewModelStoreOwner إلى androidx.lifecycle.viewmodel.compose. عليك الآن إضافة تبعية منفصلة androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 لاستخدامها. (I7a374)
  • السماح بإجراء قابل للتصغير في AccessibilityAction، وتغيير تصنيف الإجراء في AccessibilityAction وCustomAccessibilityAction من CharSequence إلى String (I0dc82)
  • من أجل مطابقة اصطلاحات التسمية بشكل أفضل مع ImageBitmap وImageVector، تم تغيير اسم ImagePainter إلى BitmapPainter ليكون مشابهًا لـ VectorPainter. (Iba381، b/174565889)
  • واجهات برمجة تطبيقات أفضل لاختبار السلسلة الفرعية مع السلسلة الفرعية الآن كمعلَمة (Icbe78)
  • تمت إضافة Modifier.focusOrder() يقبل FocusRequester بدون تحديد ترتيب تركيز مخصّص أو تعبير lambda. يكون ذلك مفيدًا عندما نحتاج فقط إلى تحديد مرجع وليس ترتيب تركيز مخصّصًا لعنصر قابل للإنشاء (I4f52a، b/179180978).
  • تم نقل ComponentActivity.setContent إلى androidx.activity.compose.setContent في الوحدة androidx.activity:activity-compose. (Icf416)
  • تمت إزالة طريقتَي التفكيك وcopy() من عدة فئات لم يتم استخدامهما فيها إلا نادرًا. (I26702، b/178659281)
  • تم نقل النافذة المنبثقة لتكون خاصة بالنظام الأساسي. تمت إعادة تسمية AndroidPopupProperties إلى PopupProperties، وتم نقل isFocusable إلى المَعلمة focusable في PopupProperties (Ieeea5)
  • تم نقل مربّع الحوار ليكون خاصًا بالنظام الأساسي. تمت إعادة تسمية AndroidDialogProperties إلى DialogProperties. (I4ef69، b/179138130)
  • جعل LayoutNode داخليًا (I8a7b1، b/175103944)
  • تم استبدال Constraints.enforce بـ Constraints.constrain. (I8b8ea)
  • تم إيقاف loadFontResource نهائيًا. استخدِم fontResource بدلاً من ذلك، لأنّ imageResource وloadImageResource وvectorResource وloadVectorResource أصبحت غير متوافقة. استخدِم painterResource بدلاً من ذلك. (I6b809)
  • لأسباب تتعلّق بالأداء، أصبحت دلالات ScrollAxisRange تقبل الآن تعبيرات lambda تعرض قيمًا من النوع Float بدلاً من قيم Float مباشرةً. (If4a35، b/178657186)
  • تمت إضافة دلالات EditableText لوضع علامة على نص الإدخال القابل للتعديل في الحقل النصي لتسهيل الاستخدام وطرق الاختبار المقابلة للتحقّق من الدلالات (I8e07a)
  • تم جعل OwnerLayer/OwnerScope/OwnerSnapshotObserver داخليًا (I4ffaf، b/175103944)
  • تمت إعادة تسمية الدالة toIntPx() إلى roundToPx(). (I9b7e4، b/173502290)
  • تمت إعادة تسمية IntBounds إلى IntRect وتم تحسين واجهة برمجة التطبيقات. (I1f6ff)
  • تم تعديل Snapshot API لتكون أكثر اتساقًا مع إرشادات واجهة برمجة التطبيقات، بالإضافة إلى إخفاء فئات التنفيذ الداخلية من واجهة برمجة التطبيقات المتاحة للجميع. (Id9e32)
  • تمت إضافة إجراءات دلالية للتوسيع والتصغير. إضافة expand وhalfExpand في ModalBottomSheetState (Ib5064)
  • تم إيقاف Modifier.dragGestureFilter نهائيًا. يمكن استخدام Modifier.pointerInput { detectDragGestures (...)} كبديل. بدلاً من ذلك، استخدِم Modifier.draggable لعمليات السحب على محور واحد (I0ba93، b/175294473).
  • تمت إعادة تسمية Ambients لتتطابق مع إعادة تسمية Ambient -> CompositionLocal. كانت أسماء Ambients في السابق AmbientFoo، أما الآن فأسماء CompositionLocals هي LocalFoo. (I2d55d)
  • تمت الآن إزالة BaseTextField التي تم إيقافها نهائيًا. استخدِم BasicTextField بدلاً من ذلك. (I71368)
  • تم نقل الجزء المحدّد إلى الطبقة الأساسية. (I7892b)
  • على غرار الطريقة التي أزلنا بها سابقًا الدالة القابلة للإنشاء state { 0 } ونشجّع الآن على استخدام دوال مثل remember { mutableStateOf(0) }، سنزيل الدالة القابلة للإنشاء savedInstanceState { 0 }. عليك استخدام rememberSaveable { mutableStateOf(0) } بدلاً من ذلك، وسيتم حفظ الحالة واستعادتها تلقائيًا إذا كان يمكن تخزين النوع المستخدَم داخل MutableState في الحزمة. إذا كنت قد مرّرت سابقًا عنصر حفظ مخصّصًا، عليك الآن استخدام تحميل زائد جديد للدالة rememberSaveable يحتوي على المَعلمة stateSaver. سيكون الاستخدام على النحو التالي: val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) } (Ib4c26، b/177338004)
  • إضافة دلالات كلمات المرور لتسهيل الاستخدام (I231ce)
  • تمت إضافة ProgressBarRangeInfo.Indeterminate لوضع علامة على أشرطة التقدم غير المحددة لتسهيل الاستخدام (I6fe05)
  • تم إيقاف الأداة المساعدة emptyContent() والأداة المساعدة (@Composable () -> Unit).orEmpty() نهائيًا لأنّه لم يعُد لهما أي تأثير إيجابي في الأداء أو القيمة (I0484d)
  • لم يعُد snapshotFlow وwithMutableSnapshot تجريبيَين (I6a45f)
  • يمكن الآن إغلاق أدوات إعادة التجميع. ستستمر عمليات إعادة التركيب المغلقة إلى أن تكتمل الكوروتينات الفرعية للتركيب. تمت إعادة تسمية Recomposer.shutDown إلى cancel للتمييز بينها وبين close. (Ib6d76)
  • تمت إعادة تسمية UiSavedStateRegistry إلى SaveableStateRegistry، وإعادة تسمية AmbientUiSavedStateRegistry إلى AmbientSaveableStateRegistry، وتم نقل كليهما إلى حزمة androidx.compose.runtime.saveable. (I30224)
  • تمت إعادة تسمية العنصر androidx:compose:runtime:runtime-saved-instance-state إلى androidx:compose:runtime:runtime-saveable (I6dcac)
  • تم حذف العديد من واجهات برمجة التطبيقات التي تم إيقافها نهائيًا منذ فترة طويلة في حزمة ui. (I2f2dc)
  • تم إيقاف العنصر compose:runtime-dispatch نهائيًا. يمكن الآن العثور على MonotonicFrameClock في compose:runtime، ويمكن العثور على AndroidUiDispatcher في compose:ui. (Ib5c36)
  • لم تعُد فئات Outline.* فئات بيانات (I4879e، b/178001427)
  • تمت إزالة view.captureToImage() بدون أي بديل. (I7fcd2)
  • تم تقديم واجهة برمجة التطبيقات ColorMatrix المستخدَمة لتعديل قيم rgb للمحتوى المصدر تمت إعادة تصميم واجهة برمجة التطبيقات ColorFilter لتصبح واجهة وتتطابق مع التنفيذ في PathEffect. (Ica1e8)
  • إضافة المَعلمة layoutDirection إلى createOutline في Shape يتيح ذلك إنشاء أشكال تراعي اتجاه التنسيق. (I57c20، b/152756983)
  • تم إيقاف onImeActionPerformed نهائيًا. استخدِم KeyboardActions بدلاً من ذلك (If0bbd، b/179071523)
  • تم تقديم عنصر سياق روتين فرعي InfiniteAnimationPolicy سيتم تطبيقه في الصور المتحركة التي لا تنتهي. لا يتم تثبيت أي سياسة تلقائيًا، إلا عند إجراء اختبارات باستخدام ComposeTestRule. (I50ec4، b/151940543)
  • تمت إزالة canDrag من Modifier.scrollable. (Id66e7، b/175294473)
  • تمت إعادة تسمية LayoutCoordinates.parentCoordinates إلى LayoutCoordinates.parentLayoutCoordinates للسماح بإنشاء السمة parentCoordinates الجديدة. تقدّم السمة parentCoordinates الآن LayoutCoordintes الخاصة بعنصر التعديل الرئيسي. سيؤدي ذلك إلى توفير حالات استخدام أكثر اكتمالاً للدالتَين onSizeChanged() وonGloballyPositioned() (Idfbfd وb/177926591).
  • تم إيقاف tapGestureFilter وdoubleTapGestureFilter وlongPressGestureFilter وpressIndicaitonGestureFilter نهائيًا. استخدِم Modifier.clickable أو Modifier.pointerInput مع الدالة detectTapGestures بدلاً من ذلك. (I6baf9، b/175294473)
  • تمت إزالة unregisterProvider من SaveableStateRegistry. بدلاً من ذلك، تعرض الدالة registerProvider() الآن العنصر SaveableStateRegistry.Entry الذي يمكنك استخدامه لإلغاء التسجيل (Ic4274، b/178583739).
  • تمت إعادة تسمية rememberSavedInstanceState() إلى rememberSaveable() ونقلها إلى حزمة androidx.compose.runtime.saveable. (I1366e، b/177338004)
  • تمت إزالة CoreText وCoreTextField من واجهة برمجة التطبيقات العامة
    • إزالة التحميل الزائد المتوقّف نهائيًا لـ SelectionContainer
    • (I99c19)
  • أصبحت الاختبارات التي يتم فيها استخدام Compose في التسلسلات الهرمية التي تتم إضافتها/إزالتها مباشرةً من WindowManager أكثر استقرارًا. (Ie81ed، b/175765614)
  • تمت إزالة Recomposer.current(). [Abstract]ComposeView الآن يتم إنشاؤه تلقائيًا بشكل مؤجّل، ويتم تشغيل Recomposers بنطاق النافذة من خلال ViewTreeLifecycleOwner للنافذة. يتم إيقاف إعادة التركيب وعلامات الصورة المتحركة المستندة إلى withFrameNanos مؤقتًا أثناء إيقاف Lifecycle المضيف. (I38e11)
  • توفّر Recomposer.runningRecomposers الآن StateFlow العالمي الخاص بـ RecomposerInfo للقراءة فقط، وذلك لمراقبة حالة التركيب الجارية في العملية. ننصحك باستخدام واجهة برمجة التطبيقات هذه بدلاً من Recomposer.current()‎، التي تم إيقافها نهائيًا. (If8ebe)
  • تم نقل Saver وlistSaver() وmapSaver() وautoSaver من androidx.compose.runtime.savedinstancestate إلى androidx.compose.runtime.saveable (I77fe6)
  • تقبل EditCommands السلسلة AnnotatedString. ومع ذلك، هذا التغيير متاح فقط في واجهة برمجة التطبيقات، ولم يتم بعد تنفيذ ميزة تعديل النصوص المتعددة الأنماط. (I4c3ea)
  • تمت إزالة وقت التشغيل والمدة. (Ib9bf4، b/177420019)
  • تم نقل CompositionData.asTree() وواجهات برمجة التطبيقات ذات الصلة إلى وحدة ui-tooling-data منفصلة وتم تصنيفها على أنّها تجريبية (Ic95b8)
  • تمت إعادة تسمية المَعلمات في RounderCornerShape وCutCornerShape وCornerBasedShape من يسار/يمين إلى بداية/نهاية من أجل إتاحة ميزة الانعكاس التلقائي للشكل في اتجاه الكتابة من اليمين إلى اليسار. تم تقديم AbsoluteRounderCornerShape وAbsoluteCutCornerShape للحالات التي لا يُراد فيها الانعكاس التلقائي. (I61040، b/152756983)
  • تمت إعادة تصميم واجهة برمجة التطبيقات التي يستهدفها المكوّن الإضافي لمترجم Compose لاستخدام واجهة بدلاً من فئة مجردة. لم تعُد الواجهة تستخدم مَعلمة نوع.

    هذا تغيير داخلي لا يؤثّر في توافق الرمز المصدري، ولكنّه تغيير يؤدي إلى عدم توافق الرمز الثنائي. (I3b922، b/169406779)

  • إزالة الدالة StringBuilder.deleteAt العامة عن غير قصد (Id6ed9)

إصلاح الأخطاء

  • تستضيف الآن ComposeViews الموضوعة في تسلسلات هرمية للعرض والتي تكون عناصر فرعية لتصميم آخر، تصاميم فرعية للعناصر الأصلية (I92883)
  • تم تعديل واجهة برمجة التطبيقات imageFromResource في Compose لإعادة استخدام ذاكرة التخزين المؤقت للرسومات القابلة للرسم من الموارد عند تحميل عناصر ImageBitmap. (If3627، b/178751994)

الإصدار ‎1.0.0-alpha11

‫28 يناير 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha11. يتضمّن الإصدار 1.0.0-alpha11 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إعادة تصميم WithConstraints ليصبح BoxWithConstraints وتم نقله إلى foundation.layout. (I9420b، b/173387208)
  • تم إيقاف Key.DPadUp نهائيًا. استخدِم Key.DirectionUp بدلاً من ذلك. (Iab335، b/177954892)
  • ستكون واجهة المالك داخلية من الآن فصاعدًا. (If8e35)
  • تمت إضافة واجهة برمجة التطبيقات FocusManager.moveFocus() لنقل التركيز آليًا. (I045cb، b/177681839)
  • تغيير PopupPositionProvider لاستخدام إحداثيات نسبية للنافذة، وليس إحداثيات عامة إعادة تسمية parentGlobalBounds إلى anchorBounds، وتغيير windowGlobalBounds إلى windowSize: IntSize (I2994a)
  • سيتم استبدال المدة ووقت التشغيل بالملّي ثانية الطويلة، وستؤدي هذه الخطوة إلى إزالة الاعتمادية الخاصة بإدخال المؤشر في تلك الفئات. (Ia33b2، b/175142755، b/177420019)
  • تمت إضافة AmbientSavedStateRegistryOwner بشكل مشابه لـ AmbientLifecycleOwner وAmbientViewModelStoreOwner الحاليَين (I9a3e8 وb/176756365)
  • تم تعديل واجهة برمجة التطبيقات للرسومات المتجهة لتتيح تحليل التلوين المطبَّق على جذر الرسومات المتجهة. (Id9d53، b/177210509)
  • تمت إضافة toolType إلى PointerInputChange للتمييز بين الأجهزة (Iac787، b/175142755)
  • تمت إعادة تسمية AmbientWindowManager إلى AmbientWindowInfo (I2686a وb/177084714 وb/177084983).
  • تم إيقاف طرق الإحداثيات العامة نهائيًا واستبدالها بطرق إحداثيات جديدة مستندة إلى النوافذ. (Iee284)
  • تمت إضافة Modifier.toolingGraphicsLayer الذي يضيف معدِّل طبقة الرسومات عند تفعيل وضع الفحص. (I315df)
  • تم تصنيف FocusRequester.createRefs على أنّه تجريبي لأنّه قد يتغيّر. (I2d898، b/177000821)
  • تمت إعادة تسمية SemanticsPropertyReceiver.hidden إلى invisibleToUser وتم وضع علامة ‎ @ExperimentalComposeUiApi عليها. تمت إعادة تسمية AccessibilityRangeInfo إلى ProgressBarRangeInfo. تمت إعادة تسمية stateDescriptionRange إلى progressBarRangeInfo. تمت إعادة تسمية AccessibilityScrollState إلى ScrollAxisRange، وhorizontalAccessibilityScrollState إلى horizontalScrollAxisRange، وverticalAccessibilityScrollState إلى verticalScrollAxisRange. (Id3148)
  • تمت إزالة PointerInputData وتعديل PointerInputChange لتضمين جميع حقول PointerInputData. تم جعل PointerInputEvent وPointerInputEventData داخليتَين لأنّهما لا تُستخدَمان في أي واجهة برمجة تطبيقات عامة. (Ifff97، b/175142755)
  • تم تعديل تنفيذ GraphicsLayerScope density لإتاحة تحويل وحدات dp إلى وحدات بكسل أولية. (Ied528، b/176819695)
  • تم تعديل واجهة برمجة التطبيقات الخاصة بالمصفوفة لتتّبع الترتيب الرئيسي للصفوف وتوفير ثوابت الفهرس للمساعدة في عمليات التحويل بين تمثيلات المصفوفات المختلفة لتتطابق مع منطق التحويل في إطار العمل بين SkMatrix وMatrix4 داخليًا. (I432e6)
  • تمت إزالة طرق monotonicFrameAnimationClockOf التجريبية (Ib753f وb/170708374)
  • نقل الدالتَين String.fintPrecedingBreak وString.fingFollowingBreak إلى InternalTextApi (I657c4)
  • تمت إزالة androidx.compose.ui.util.isSurrogatePair من واجهة برمجة التطبيقات العامة. (Ia9494)
  • تمت إعادة تسمية TransformedText.transformedText إلى TransformedText.text
    • لم يعُد TransformedText فئة بيانات (Ie672a)
  • تمت إزالة data class من الصفوف التالية:
    • InlineTextContent
    • LocaleList (I605c7)
  • لم تعُد الفئات التالية فئات بيانات:
    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • تغيير VisualTransformation إلى واجهة وظيفية (I3bba4)
  • تمت إضافة نوع مَعلمة مرجعية للدالة (I5e1bd)
  • إضافة حدود محوَّلة إلى InspectorNode (Ice42f)

إصلاح الأخطاء

  • تم إيقاف onCommit وonDispose وonActive نهائيًا لصالح واجهتَي برمجة التطبيقات SideEffect وDisposableEffect (If760e)
  • تغييرات على دوال المصنع الخاصة بـ Font/FontFamily/Typeface

    • تمت إضافة دوال مصنع تبدأ بحرف لاتيني كبير
    • إيقاف دوال المصنع السابقة التي تبدأ بحرف صغير
    • تعرض دوال المصنع الجديدة FontFamily بدلاً من الفئات الفرعية
    • إخفاء منشئات الفئات الفرعية، حتى لا يمكن إنشاؤها إلا من خلال دوال المصنع
    • تمت إعادة تسمية Font.asFontFamily إلى Font.toFontFamily (I42aa7)
  • تم تقديم ComposeContentTestRule، الذي يوسّع نطاق ComposeTestRule ويحدّد setContent، والذي تمت إزالته من ComposeTestRule. تمت إضافة طريقة مصنع createEmptyComposeRule() تعرض ComposeTestRule ولا تشغّل نشاطًا لك. استخدِم هذه الطريقة عندما تريد تشغيل نشاطك أثناء الاختبار، مثل استخدام ActivityScenario.launch (I9d782، b/174472899)

  • أصبح اسم animateAsState الآن animateFooAsState، حيث Foo هو نوع المتغيّر الذي يتم تحريكه، مثل Float وDp وOffset وما إلى ذلك (Ie7e25).

  • تمت إضافة مَعلمة وصف المحتوى إلى "الصورة" و"الرمز". يُستخدَم لتوفير وصف للخدمات المخصّصة لتسهيل الاستخدام (I2ac4c)

  • أزِل displaySize لأنّه يجب تجنُّبه. من الأفضل عادةً استخدام حجم onRoot() أو حجم النافذة على الأقل. (I62db4)

  • كانت الدالة OnSizeChanged تعرض حجم محتوى التصميم. ويعرض الآن الحجم في موضعه ضمن سلسلة المعدِّلات. (I36b78، b/177562900)

  • تم إيقاف واجهة برمجة التطبيقات emit() وجميع عمليات التحميل الزائد نهائيًا، وتمت إعادة تسميتها إلى ComposeNode. واجهات برمجة التطبيقات متطابقة، ولكن الاسم مختلف من أجل اتّباع اصطلاحات التسمية في Compose (I4137b)

  • يقبل TextFieldValue السلسلة AnnotatedString. ومع ذلك، هذا التغيير متاح فقط في واجهة برمجة التطبيقات، ولم يتم بعد تنفيذ ميزة تعديل النصوص المتعددة الأنماط.

    • تمّت إزالة initial من مَعلمات الدالة الإنشائية EditingBuffer. (I326d5)
  • تم الآن إيقاف invalidate وcompositionReference() نهائيًا واستبدالهما بـ currentRecomposeScope وrememberCompositionReference على التوالي. (I583a8)

  • تم تغيير AnnotatedString ليتم توسيعه من kotlin.CharSequence. لذلك، أصبحت الدالتان length وsubSequence دالتين مثيلتين، وتمت إزالة دوال الإضافة. (Iaf429)

  • يحلّ RememberObserver محل CompositionLifecycleObserver، وأصبح CompositionLifecycleObserver نهائيًا الآن.

    ‫RememberObserver هو بديل عن CompositionLifecycleObserver مع دلالات معدَّلة وطرق تمت إعادة تسميتها. يمكن إجراء التغيير إلى واجهة برمجة التطبيقات الجديدة بشكل آلي للكائنات التي يتم تذكّرها مرة واحدة فقط، وهو ما يظل الممارسة المُوصى بها. ومع ذلك، إذا تم تذكُّر مرجع أكثر من مرة في تركيبة، يتم استدعاء onRemembered لكل مرجع، بينما يتم استدعاء onEnter مرة واحدة فقط. تم استدعاء onEnter عدة مرات إذا تم استخدام العنصر في تركيبات فرعية، مثل WithConstraints وScaffold، ما جعل عملية استدعاء onEnter مرة واحدة غير موثوقة، وتمت إزالتها في RememberObserver.

    تضيف RememberObserver الدالة onAbandoned التي يتم استدعاؤها إذا تم عرض مثيل RememberObserver من معاودة الاتصال التي تم تمريرها إلى remember ولكن لم يتم تذكّره في حالة التركيب، وبالتالي لن يتم استدعاء onRemembered أبدًا. يمكن أن يحدث ذلك إذا أنهى استثناء عملية الإنشاء قبل اكتمالها أو إذا تم تجاهل عملية الإنشاء لأنّ الحالة التي كانت تنتج عملية الإنشاء لم تعُد حالية أو لم تعُد مطلوبة. إذا كان مثيل RememberObserver الذي يلي اقتراح المرجع الفردي أعلاه يتتبّع مرجعًا خارجيًا، يشير كل من onForgotten وonAbandoned إلى أنّه لم يعُد هناك حاجة إلى المرجع. إذا كان العنصر يتتبّع العمل الذي تم البدء به أو الموارد التي تم تخصيصها في onRemembered، يمكن تجاهل onAbandoned لأنّه لن يتم استدعاؤه إذا تم استدعاء onRemembered. (I02c36)

  • تم إيقاف العمليات الحسابية نهائيًا بين وحدتَين نصيتَين أو أكثر. تم إيقاف الدالتَين TextUnit.Sp وTextUnit.Em نهائيًا، ويُفضَّل استخدام دوال الإضافة، مثل Int.sp وInt.em. (I48369)

  • أصبحت الموارد في المكتبات التي لا تتضمّن موارد عامة معرَّفة بوضوح (مثل public.xml) خاصة بشكل تلقائي. (Ia1dcc، b/170882230)

  • تم إيقاف ScrollableColumn/Row نهائيًا. يكون استخدام ScrollableColumn أقل كفاءة مقارنةً بـ LazyColumn عندما يكون لديك محتوى كبير قابل للتمرير، لأنّه باستخدام LazyColumn يمكننا فقط إنشاء/قياس/رسم العناصر المرئية. لمنع المستخدمين من اتّباع الطريقة غير الفعّالة، قرّرنا إيقاف ScrollableColumn وScrollableRow نهائيًا وتشجيع استخدام LazyColumn وLazyRow بدلاً منهما. سيظل بإمكان المستخدمين اختيار عدم استخدام السلوك الكسول واستخدام المعدِّلات مباشرةً على النحو التالي: Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b، b/170468083)

  • طريقة إنشاء items(count: Int) جديدة لنطاق LazyColumn/LazyRow/LazyVerticalGrid أصبحت items(items: List) وitemsIndexed(items: List) الآن دالتَين إضافيتَين، لذا عليك استيرادهما يدويًا عند استخدامهما. عمليات تحميل زائدة جديدة للإضافات في المصفوفات: items(items: Array) وitemsIndexed(Array) (I803fc وb/175562574)

  • يُرجى استخدام ImeAction.None بدلاً من ImeAction.NoAction

    • يُرجى استخدام ImeAction.Default بدلاً من ImeAction.Unspecified (Ie1bcc)
  • استخدام TestCoroutineDispatcher في الاختبار (I532b6)

  • تمت إعادة تسمية TextInputService.onStateUpdated إلى updateState (Id4853)

  • تم إيقاف عملية الانتقال المستندة إلى TransitionDefinition نهائيًا (I0ac57)

  • تمت إزالة TextUnitType.Inherit. يُرجى استخدام TextUnitType.Unspecified بدلاً من ذلك. (I9ff64)

الإصدار ‎1.0.0-alpha10

‫13 يناير 2021

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha10. يتضمّن الإصدار 1.0.0-alpha10 هذه التعديلات.

تغيير قد يؤدي إلى أعطال

  • تتيح إعادة هيكلة واجهة برمجة التطبيقات الداخلية للمترجم تجميع التغييرات في العُقد التي تم إنشاؤها نتيجة التركيب في مرحلة "تطبيق التغييرات" من عملية التركيب، وذلك بعد اكتمال جميع دوال @Composable.

    هذا تغيير غير متوافق في السلوك قد يؤثر في الرمز البرمجي للتطبيق، لأنّه لن تعود العُقد متاحة من واجهات برمجة التطبيقات الداخلية والتجريبية إلا بعد تطبيق التغييرات. يمكن عادةً حلّ هذه المشكلة من خلال إحاطة الرمز البرمجي الذي يتضمّن هذه التبعيات بعنصر SideEffect قابل للإنشاء لتأجيل تنفيذ الرمز البرمجي إلى ما بعد إنشاء العُقد وتهيئتها. (I018da)

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة Modifier.focusOrder() التي يمكن استخدامها لتحديد ترتيب مخصّص للتنقّل بين العناصر باستخدام لوحة المفاتيح (I90cf5، b/175899543، b/170155556، b/170155429)
  • تمت إزالة استخدام focusObserver المتوقّف نهائيًا، واستخدام onFocusChanged أو onFocusEvent بدلاً من ذلك (I3ecb9، b/175156387)
  • تغييرات على EditOperations API
    • تمت إعادة تسمية EditOperation إلى EditCommand
    • تمت إضافة لاحقة الأمر إلى عمليات التنفيذ المحدّدة لـ EditOperation
    • لم تعُد EditCommand فئات بيانات
    • تمت إعادة تسمية الدالة EditOperation.process إلى applyTo
    • تمت إعادة تسمية InputEventListener إلى InputEventCallback
    • (I0a366)
  • تمت إزالة PxSquared وPxCubed وPxInverse غير المستخدَمة. تم تغيير Size.center() ليصبح سمة. (I973f7)
  • سيصبح بإمكان وحدة ui-test الآن ضبط إنشاء Recomposers لواجهات المستخدم قيد الاختبار (Ibebd8)
  • تم تعديل السرعة لتشمل أجزاء مكوّنة وعمليات رياضية. (Ib0447)
  • تمت إعادة تسمية @ExperimentalTesting إلى @ExperimentalTestApi لتكون متوافقة مع التعليقات التوضيحية المشابهة لواجهات برمجة التطبيقات التجريبية (Ia4502 وb/171464963)
  • تمت إعادة تسمية Color.useOrElse() إلى Color.takeOrElse() (Ifdcf5)
  • تمت إزالة الفئات غير المستخدَمة DpInverse وDpSquared وDpCubed. (I4d62b)
  • تمت إعادة تسمية Constraints#satisfiedBy إلى isSatisfiedBy. (I9cf5c)
  • أضِف دالة ردّ الاتصال لإرسال إشعار إلى المالك عند تغيير حدود layoutnode. (I72fd1)
  • تمت إضافة isSpecified وisUnspecified وuseOrElse إلى الفئات المضمّنة التي تتضمّن الثابت Unspecified. (I93f7b، b/174310811)
  • توسيع نطاق واجهات برمجة التطبيقات [Abstract]ComposeView للسماح بإعادة استخدام طرق العرض المستندة إلى Compose، والتخلّص من تركيبها لإعادة إنشائها مرة أخرى لاحقًا إضافة واجهات برمجة تطبيقات لتثبيت Recomposers ذات النطاق المحدود واكتشافها وCompositionReferences لإنشاء تركيبات فرعية

    إضافة ViewCompositionStrategy لضبط استراتيجية التخلص من التركيبة في [Abstract]ComposeViews، ويكون السلوك التلقائي هو التخلص عند فصل النافذة (I860ab)

  • تمت إزالة واجهة برمجة التطبيقات العامة Any.identityHashCode() (I025d7)

  • تمت إزالة واجهة برمجة التطبيقات toStringAsFixed واستخدام String.format بدلاً منها مباشرةً. (Iaba6b)

  • إضافة مفتاح تبديل إلى ملف foundation Strings.kt (I4a5b7 وb/172366489)

  • نقلتُ nativeClass إلى وحدة ui وجعلتُها داخلية. تم تعديل استخدامات nativeClass في عمليات تنفيذ equals لاستخدام &quot;is MyClass&quot; بدلاً من ذلك. (I4f734)

  • تم إيقاف Modifier.focus()‎ وModifier.focusRequester()‎ نهائيًا. استخدِم Modifier.focusModifier()‎ وModifier.focusReference()‎ بدلاً من ذلك. (I75a48، b/175160751، b/175160532، b/175077829)

  • تم تقديم SelectionRegistrar.notifySelectableChange لإرسال إشعارات بتعديلات Selectable إلى SelectionManager. (I6ff30، b/173215242)

  • تمت إضافة السمة Outline.bounds للحصول على مستطيل الإحاطة لعمليات تنفيذ المخطّط التفصيلي المختلفة. (I16e74، b/175093504)

  • تم إيقاف TestUiDispatcher نهائيًا. استخدِم Dispatchers.Main بدلاً من ذلك (Ic171f، b/175385255)

  • لم يعُد ImeOptions وKeyboardOptions فئة بيانات (I3c898، b/168684531)

  • التغييرات في VisualTransformation API

    • تمت إعادة تسمية OffsetMap إلى OffsetMapping
    • تمت إعادة تسمية OffsetMapping.identityOffsetMap إلى OffsetMapping.Identity
    • لم يعُد PasswordTransformation فئة بيانات
    • نقل OffsetMapping إلى ملف خاص
    • (I0bdf3)
  • تمت إعادة تسمية Position إلى DpOffset وإزالة getDistance() (Ib2dfd)

  • تم تغيير الدالة fun Dp.isFinite() إلى القيمة val Dp.isFinite (I50e00)

إصلاح الأخطاء

  • تعرض Recomposer الآن تدفّقًا لحالتها الحالية، ما يتيح رصد نشاطها ونشاط التأثيرات المرتبطة بها. (Ifb2b9)
  • يمكن الآن الوصول إلى keyEvent الأصلي من خلال keyEvent.nativeKeyEvent (I87c57، b/173086397).
  • تم الآن استبدال animate() بـ animateAsState()، الذي يعرض State<T> بدلاً من T. ويتيح ذلك تحسين الأداء، إذ يمكن تضييق نطاق الإبطال إلى المكان الذي تتم فيه قراءة قيمة الحالة. (Ib179e)
  • إضافة واجهة برمجة التطبيقات الخاصة بدور Semantics وإضافة الدور كمَعلمة إلى SemanticsModifier القابل للنقر والاختيار والتبديل تم تغيير Modifier.progressSemantics ليتمكّن شريط التمرير أيضًا من استخدامه. (I216cd)
  • واجهة برمجة تطبيقات جديدة تستند إلى إجراءات روتينية مشتركة Animatable تضمن الاستبعاد المتبادل بين الرسوم المتحركة.
    • ‫DecayAnimationSpec جديد لإتاحة الصورة المتحركة متعددة الأبعاد
    • (I820f2، b/168014930)

الإصدار ‎1.0.0-alpha09

‫16 ديسمبر 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha09. يتضمّن الإصدار 1.0.0-alpha09 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت الآن إزالة KeyEvent.Alt المتوقّف نهائيًا. استخدِم KeyEvent.isAltPressed بدلاً من ذلك. (Idd695)
  • تم إيقاف Modifier.keyInputFilter وModifier.previewKeyInputFilter نهائيًا، ويجب استخدام Modifier.onKeyEvent وModifier.onPreviewKeyEvent بدلاً منهما (Idbf1b، b/175156384).
  • تم إيقاف Modifier.focusObserver نهائيًا. استخدِم Modifier.onFocusChanged أو Modifier.onFocusEvent بدلاً من ذلك (I30f17 وb/168511863 وb/168511484).
  • تمت إعادة تسمية واجهات برمجة التطبيقات الخاصة بتعليق إدخال المؤشر، HandlePointerInputScope إلى AwaitPointerEventScope و handlePointerInput() إلى awaitPointerEventScope(). (Idf0a1، b/175142755)
  • أصبحت واجهة برمجة التطبيقات الخاصة بميزة "الملء التلقائي" تجريبية وتتطلّب الموافقة على استخدامها (I0a1ec)
  • إضافة عبارات تفكيك لإنشاء مثيلات FocuSRequester (I35d84 وb/174817008)
  • تمت إعادة تسمية accessibilityLabel إلى contentDescription، وتمت إعادة تسمية accessibilityValue إلى stateDescription. (I250f2)
  • تمت إزالة الأحداث المخصّصة من واجهة برمجة التطبيقات لتعليق إدخال المؤشر (Ia54d5، b/175142755)
  • تم تقديم عدة وظائف جديدة في SelectionRegistrar، كما تمّت إعادة تسمية onPositionChange إلى notifyPositionChange. (Ifbaf7)
  • المزيد من أعضاء LayoutNode الذين وضعنا علامة عليهم كأعضاء داخليين (I443c6)
  • تم تقديم LayoutInfo لاستخدامه في الأدوات والاختبار (I9b190)
  • AndroidOwner made internal (Ibcad0, b/170296980)
  • إزالة التعليق التوضيحي ExperimentalPointerInput (Ia7a24)
  • تمت إضافة نظام التمرير المتداخل. راجِع Modifier.nestedScroll لمزيد من التفاصيل (I36e15 وb/162408885).
  • تمت إتاحة استخدام subcomposeInto(LayoutNode) داخليًا فقط (Id724a)
  • تغيّرت واجهة Applier لتسهيل إنشاء بنى تصاعدية بدلاً من التنازلية.

    تمت إعادة تسمية الطريقة insert() لتصبح insertTopDown().

    تمت إضافة طريقة جديدة، وهي insertBottomUp().

    يُدرج التطبيق إما عُقدًا في الشجرة التي يعدّلها باستخدام insertTopDown() أو insertBottomUp()، وذلك حسب الأداء الأفضل.

    بعض البنى، مثل LayoutNode وView، تكون أكثر فعالية عند إنشائها من الأسفل إلى الأعلى مقارنةً بإنشائها من الأعلى إلى الأسفل. قبل هذا التغيير، كان يجب توفير مجموعة من عمليات الإدراج لتنفيذ عملية الإنشاء من الأسفل إلى الأعلى، وكان يجب نسخها إلى كل أداة تطبيق تحتاج إلى عملية الإنشاء من الأسفل إلى الأعلى لتحسين الأداء. من خلال هذا التغيير، يتم استخدام Applier لإلغاء insertBottomUp() من أجل إنشاء شجرة من الأسفل إلى الأعلى، ويتم استخدام insertTopDown() لإنشاء الشجرة من الأعلى إلى الأسفل. (Icbdc2)

  • تمت إضافة السمتَين dismissOnBackPress وdismissOnClickOutside إلى AndroidDialogProperties. تسمح هذه الإعدادات بضبط وقت استدعاء تعبير lambda الخاص بالدالة onDismissRequest في مربّع الحوار. (If5e17)

  • تمت إضافة واجهة برمجة التطبيقات painterResource للتعامل مع تحميل عناصر Painter بشكل غير شفاف من تنسيقات مواد العرض النقطية (مثل ملفات PNG) أو VectorDrawables. لم يعُد على المستهلكين تحديد نوع مادة العرض مسبقًا، ويمكنهم طلب هذه الطريقة للحصول على عنصر Painter لاستخدامه في عناصر Image القابلة للإنشاء أو معدِّلات Painter. (I2c703، b/173818471)

  • تمت إضافة Modifier.clearAndSetSemantics لمحو دلالات العناصر الفرعية وتعيين دلالات جديدة. (I277ca)

  • نقلتُ ContentDrawScope إلى وحدة ui-graphics لتكون مع DrawScope. (Iee043، b/173832789)

  • تم تقديم واجهة برمجة تطبيقات الرسومات PathEffect لتوفير أنماط مختلفة للأشكال التي تم رسم خطوطها. تم إيقاف استخدام NativePathEffect نهائيًا، ويُنصح باستخدام التنفيذ المتوقّع/الفعلي لـ PathEffect. (I5e976، b/171072166)

  • تمت إضافة واجهات IdlingResource إلى Compose، وذلك كإصدار متوافق مع Compose من مصادر عدم النشاط في Espresso. يمكن تسجيلها وإلغاء تسجيلها من خلال ComposeTestRule (I433f3).

  • إزالة عملية التسجيل (أو إلغاء التسجيل) العمومية لـ ComposeIdlingResource وعملية التسجيل (أو إلغاء التسجيل) العمومية للساعات في ComposeIdlingResource (I32660)

إصلاح الأخطاء

  • تعرض دوال Lambda في أدوات تعديل الإزاحة الآن IntOffset بدلاً من Float. (Ic9ee5 وb/174137212 وb/174146755)
  • تمت إزالة SlotTable وSlotReader وSlotWriter من واجهة برمجة التطبيقات العامة. وكانت هذه الأخطاء مصنّفة سابقًا على أنّها InternalComposeAPI. وهي الآن مضمّنة في وحدة Compose.

    تمت إضافة CompositionData وCompositionGroup كبديل لواجهة برمجة التطبيقات ui-tooling لاستخدامها في استخراج معلومات التركيب. هذه الحقول عامة ولكنها غير مخصّصة للاستخدام خارج واجهة برمجة التطبيقات ui-tooling لأنّها توفّر المعلومات الأولية التي تفسّرها واجهة برمجة التطبيقات ui-tooling (I31a9c).

  • تمت إعادة تصميم ShaderBrush لإنشاء مثيل shader بشكل غير مباشر عند توفّر معلومات تحديد الحجم لبيئة الرسم. ويكون ذلك مفيدًا لتحديد تدرّجات لونية تشغل حدود الرسم الكاملة لدالة مركّبة في وقت التكوين، بدون الحاجة إلى تنفيذ عمليات مخصّصة في DrawModifier.

    تم إيقاف واجهات برمجة التطبيقات الخاصة بإنشاء دوال التدرّج اللوني واستبدالها بطُرق المصنع في عنصر Gradient. (I511fc، b/173066799)

  • إيقاف LazyColumnFor وLazyRowFor وLazyColumnForIndexed وLazyRowForIndexed نهائيًا استخدام LazyColumn وLazyRow بدلاً من ذلك (I5b48c)

  • Deprecated BuildCompat.isAtLeastR (Idb37e)

  • تمت إضافة دالة المصنع buildAnnotatedString لإنشاء AnnotatedString. تم إيقاف الدالة الإنشائية annotatedString نهائيًا. (Idfe0b)

  • تمت إزالة طرق الإضافة في Float وDouble لتحويل القيم إلى وحدات راديان. تم نقلها لتصبح دالة خاصة ضمن عملية التنفيذ PathParser التي كانت المكان الوحيد الذي تم استخدامها فيه (I25f52)

الإصدار ‎1.0.0-alpha08

‫2 ديسمبر 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha08. يتضمّن الإصدار 1.0.0-alpha08 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إضافة إجراء المعاني رفض (I2b706)
  • تم نقل واجهات برمجة التطبيقات DrawModifier من الحزمة androidx.compose.ui إلى الحزمة androidx.compose.ui.draw. تم إنشاء ملف DrawModifierDeprecated.kt لتضمين أسماء الأنواع المستعارة وطُرق المساعدة لتسهيل عملية نقل البيانات من واجهات برمجة التطبيقات المتوقفة نهائيًا إلى واجهات برمجة التطبيقات الحالية. (Id6044، b/173834241)
  • تمت إعادة تسمية Modifier.drawLayer إلى Modifier.graphicsLayer وتم أيضًا تعديل الفئات ذات الصلة إلى GraphicsLayer وفقًا للملاحظات الواردة بشأن واجهة برمجة التطبيقات. (I0bd29، b/173834241)
  • تمت إضافة الطريقتَين الجديدتَين placeable.placeWithLayer() وplaceable.placeRelativeWithLayer() اللتَين تسمحان بتصميمات مخصّصة ومعدِّلات للتصميمات من أجل وضع عنصر فرعي مع تقديم طبقة رسومات للرسم. بفضل ذلك، يمكننا أولاً تحسين عمليات إعادة الرسم، وبالتالي عندما نحتاج إلى نقل عنصر فرعي، لن نضطر إلى إعادة رسم محتواه. ثانيًا، يمكننا تطبيق عمليات تحويل الرسم على عنصر فرعي (Ibd8f6 وb/170296989 وb/171493718 وb/173030831).
  • تمت إزالة <T> من تعريف SubcomposeLayout. يمكنك استخدامها بدون تحديد نوع الآن. (Ib60c8)
  • تمت إضافة واجهات برمجة التطبيقات Modifier.scale/rotate لتسهيل عملية drawLayer.
    • تمت إعادة تسمية "Modifier.drawOpacity" إلى "Modifier.alpha"
    • تمت إعادة تسمية Modifier.drawShadow إلى Modifier.shadow (I264ca، b/173208140)
  • تم جعل الحقلَين uptime وposition في PointerInputData غير قابلَين للتصغير. (Id468a)
  • تضبط السمة MaterialTheme الآن الألوان الصحيحة لمقابض التحديد وخلفية التحديد. يمكن للتطبيقات غير المستندة إلى Material استخدام AmbientTextSelectionColors يدويًا لتخصيص الألوان المستخدَمة في التحديد. (I1e6f4، b/139320372، b/139320907)
  • تمت إضافة WindowManager.isWindowFocused للتحقّق ممّا إذا كانت نافذة المضيف محل التركيز، وWindowFocusObserver الذي يوفّر معاودة الاتصال onWindowFocusChanged. (I53b2a، b/170932874)
  • تم تعديل TransformOrigin API ليتضمّن بنية تفكيك لعرض pivotFractionX وpivotFractionY كـ component1 وcomponent2 (If43c4، b/173586560)
  • تمت إضافة فحص lint لتسمية مَعلمات lambda القابلة للإنشاء وموضعها، وذلك للتحقّق من التوافق مع إرشادات Compose. تم أيضًا نقل بعض واجهات برمجة التطبيقات التي تستخدم children كاسم لدالة lambda اللاحقة إلى content، وذلك وفقًا لفحص lint والإرشادات. (Iec48e)
  • تمت إضافة واجهة برمجة تطبيقات للتحقّق مما إذا تم الضغط على مفاتيح التعديل Alt أو Ctrl أو Meta أو Shift عند إرسال keyevent. (I50ed9)
  • تمت إضافة Modifier.drawLayer() تحميل زائد جديد. تتلقّى هذه الدالة كتلة lambda في GraphicsLayerScope جديدة تحدّد فيها مَعلمات الطبقة بطريقة تتيح تخطّي إعادة التركيب وإعادة التنسيق عند حدوث تغيير في الحالة. أصبحت السمة DrawLayerModifier داخلية الآن استعدادًا لنقل منطقها إلى طريقة placeable.placeWithLayer() في LayoutModifier (I15e9f، b/173030831)
  • تم إيقاف ميزة Ambients التي تحمل الاسم Ambient كلاحقة، واستبدالها بسمات جديدة مسبوقة بـ Ambient، وذلك وفقًا لإرشادات Ambients وCompose API الأخرى. (I33440)
  • تم نقل "androidx.compose.ui.text.Typeface" إلى androidx.compose.ui.text.font.Typeface (Ic2b81)
  • تمت إعادة تسمية وسيطة الدلالات mergeAllDescendants إلى mergeDescendants. (Ib6250)
  • أداة رصد جديدة لإيماءات السحب تعلّق واجهة برمجة التطبيقات الخاصة بإدخال المؤشر، بما في ذلك قفل الاتجاه. (Icef25)
  • تمت إعادة تسمية VectorAsset إلى ImageVector تم نقل VectorAsset وإعادة تسميته إلى Builder ليكون فئة داخلية من ImageVector وفقًا لإرشادات واجهة برمجة التطبيقات. تمت إضافة نوع الاسم المستعار VectorAssetBuilder للربط بـ ImageVector.Builder من أجل التوافق. (Icfdc8)
  • تمت إعادة تسمية ImageAsset والإجراءات ذات الصلة إلى ImageBitmap. (Ia2d99)
  • إضافة المَعلمة zIndex إلى الدالة place() في PlacementScope، ما يتيح استخدام Modifier.zIndex() الآن كـ LayoutModifier ويمكن لأي تخطيط مخصّص ضبط zIndexes للعناصر التابعة مباشرةً في كتلة موضع الإعلان (I711f7، b/171493718)
  • نقل خصائص دلالات الأساس إلى واجهة المستخدم (I6f05c)
  • إيقاف الدالة place(Offset) والدالة placeRelative(Offset) نهائيًا استخدِم عمليات التحميل الزائد مع إزاحات الأعداد الصحيحة بدلاً من ذلك (I4c5e7).
  • تمت إزالة واجهات برمجة التطبيقات التي تم إيقافها نهائيًا سابقًا: تمت إزالة Modifier.onPositioned، يُرجى استخدام Modifier.onGloballyPositioned. تمت إزالة Modifier.onDraw، استخدِم Modifier.onDrawBehind. تمت إزالة Modifier.plus، استخدِم Modifier.then. تمت إزالة Color.Unset، يُرجى استخدام Color.Unspecified. تمت إزالة فئة PxBounds، يُرجى استخدام Rect بدلاً منها. (Ie9d02، b/172562222)
  • تم تعديل واجهة "المحاذاة" وإتاحتها للاستخدام. (I46a07، b/172311734)
  • تمت إضافة أداة رصد الإيماءات للنقر والنقر مرّتين والضغط مع الاستمرار وعرض مؤشر الضغط باستخدام ميزة إدخال المؤشر الجديد المعلق. تمت إضافة بعض الأدوات المساعدة أيضًا، ما يسهّل على المطوّرين كتابة أدوات رصد الإيماءات الخاصة بهم. (I00807)
  • تم تغيير اسم "id" إلى "layoutId" في LayoutIdParentData. تم تغيير اسم "Measurable.id" إلى "Measurable.layoutId". (Iadbcb، b/172449643)
  • أداة رصد جديدة للإيماءات المتعددة اللمس، بما في ذلك أدوات مساعدة لرصد التدوير والتكبير والتصغير والتحريك (Ic459d)
  • تم تقديم واجهات برمجة التطبيقات SweepGradientShader وSweepGradientBrush. (Ia22c1)
  • أصبح التحكّم في الوقت في الاختبارات (TestAnimationClock واستخداماته) تجريبيًا الآن (I6ef86، b/171378521)
  • إضافة واجهات برمجة تطبيقات تستند إلى إجراءات روتينية مشتركة للتمرير:

    تضيف هذه الحزمة LazyListState.snapToItem وLazyListState.smoothScrollBy، بالإضافة إلى واجهات برمجة تطبيقات منخفضة المستوى للتحكّم في التمرير. توفّر واجهات برمجة التطبيقات هذه واجهة تعليق للتحكّم في التمرير الذي ينتظر إلى أن ينتهي التمرير قبل العودة. (Ie5642)

  • تمت إضافة Modifier.focusable في foundation. يُستخدَم هذا الخيار لإضافة سلوك قابل للتركيز إلى أحد المكوّنات، مع توفير دلالات وإمكانية وصول صحيحة. (I41eb9، b/152525426، b/162865824)

  • توفير عمليات تنفيذ تلقائية للطُرق والسمات في AnimationClockTestRule التي يمكن تفويضها إلى clock (I7ea3d، b/173399709)

  • يمكن الآن أن تقبل AndroidComposeTestRule مشغّلات الأنشطة المخصّصة (Ib8288 وb/153623653 وb/154135019)

  • تم إيقاف TextLayoutResult.getLineVisibleEnd نهائيًا. كبديل، تتضمّن الدالة TextLayoutResult.getLineEnd الآن مَعلمة جديدة هي visibleEnd. (I73282)

  • تعديل على واجهة برمجة التطبيقات TextFieldValue

    • جعل TextFieldValue.composition للقراءة فقط
    • تمت إزالة الاستثناء الذي تم طرحه لنطاق التحديد غير الصالح (I4a675، b/172239032)
  • إتاحة TtsAnnotation لمحرّك تحويل النص إلى كلام (I54cc6)

  • واجهات برمجة تطبيقات جديدة لتشغيل الرسوم المتحركة في إجراءات روتينية (Ied662)

إصلاح الأخطاء

  • تمت إعادة تسمية مَعلمة المحاذاة الخاصة بـ Box إلى contentAlignment. (I2c957)
  • تمت إعادة تسمية معدِّلات offsetPx إلى offset. تتلقّى هذه الدوال الآن مَعلمات lambda بدلاً من State. (Ic3021، b/173594846)
  • تمت إضافة المَعلمة resetInput إلى TextInputService#onStateUpdated (I3e8f5 وb/172239032 وb/171860947)
  • تمت إضافة عملية فحص lint لمعلَمات Modifier في الدوال القابلة للإنشاء. يتحقّق فحص lint هذا من التسمية ونوع الإرجاع والقيمة التلقائية وترتيب المَعلمات للتأكّد من اتّساقها مع إرشادات Compose. (If493b)
  • تمت إضافة خيار مؤقت للسماح بتشغيل TestAnimationClock من خلال MonotonicFrameClock (I1403b، b/173402197)
  • تمت إضافة أداة تضمين Android Typeface. يمكنك تحميل Android Typeface من خلال الدالة typeface، أي typeface(Typeface.DEFAULT). تمت أيضًا إعادة تسمية typefaceFromFontFamily() إلى typeface() (I52ab7)
  • تمت إضافة عملية فحص lint للتأكّد من أنّ دوال إنشاء عنصر التعديل معرَّفة كإضافات على عنصر التعديل، حتى يمكن ربطها معًا بسلاسة. (I07981)
  • إزالة وحدة ui-test القديمة ورموزها (I3a7cb)
  • لم يعُد Recomposer يقبل EmbeddingContext، ويتم الحصول على تبعيات الجدولة المطلوبة من effectCoroutineContext. تم إيقاف FrameManager نهائيًا، ويجب أن تبدأ عمليات الدمج مع المنصات في معالجة اللقطات العامة الخاصة بها. (I02369)
  • تمرير معلومات النمط إلى عقدة تسهيل الاستخدام (If5e8d)
  • تمت إعادة تسمية TextUnit.Inherit إلى TextUnit.Unspecified لضمان الاتساق مع الوحدات الأخرى. (Ifce19)

الإصدار ‎1.0.0-alpha07 من Compose UI

11 تشرين الثاني (نوفمبر)، 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha07. يتضمّن الإصدار 1.0.0-alpha07 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم تقديم فئة ScaleFactor المضمّنة لتمثيل عوامل القياس للمحورَين الأفقي والعمودي بشكل مستقل عن بعضهما البعض من أجل إتاحة حالات استخدام القياس غير المنتظم.
    • تمت إضافة طريقة computeScaleFactor إلى ContentScale
    • تمت إضافة ContentScale.FillBounds لتنفيذ تغيير الحجم غير المنتظم من أجل توسيع حدود src لتشغل الوجهة بالكامل.
    • تمت إضافة طرق عامل التشغيل لاحتساب معلَمات ScaleFactor باستخدام معلَمات Size.
    • (Ic96a6، b/172291582)
  • تمت إضافة مصنعَي BiasAlignment وBiasAbsoluteAlignment لإنشاء عمليات محاذاة. (Iac836، b/169406772)
  • السماح للمطوّر بإزالة التركيز بالقوة (I90372)
  • تم إصلاح خطأ كان يتسبّب في عدم رسم الارتفاع للعناصر داخل Compose. (If7782)
  • تم إنشاء واجهة برمجة التطبيقات onDrawBehind ضمن ContentDrawScope لتتوافق مع اصطلاح التسمية في Modifier.drawBehind. (I4fc3a، b/171955269)
  • إضافة إمكانية استخدام مسافة الكاميرا لاستكمال عمليات التحويل ثلاثية الأبعاد rotationX/rotationY في واجهات برمجة التطبيقات الخاصة بالطبقات (I40213، b/171492100)
  • تمت إضافة SelectionContainer بدون دالة معاودة الاتصال (Ibfadb)
  • تمت إزالة التعليق التوضيحي ExperimentalSubcomposeLayoutApi. يمكن الآن استخدام SubcomposeLayout بدون إضافة ‎ @OptIn (I708ad)
  • تم نقل FirstBaseline وLastBaseline إلى حزمة androidx.compose.ui.layout (Ied2e7)
  • تمت إزالة مستوى التعتيم من المعدِّل drawShadow() لأنّه كان يسبّب التباسًا. (I82c62، b/171624638)
  • تم نقل MeasureResult خارج MeasureScope. (Ibf96d، b/171184002)
  • تم نقل العديد من الرموز ذات الصلة بالتصميم من androidx.compose.ui إلى androidx.compose.layout.ui. (I0fa98، b/170475424)
  • إزالة FocusState2 المتوقّف نهائيًا (I686cb، b/168686446)
  • أصبحت السمة ZIndexModifier داخلية (I1808b، b/171493718)
  • تم تعديل نوع القيمة التي تم إرجاعها لطريقة lerp في مَعلمات Size لعرض قيمة Size غير فارغة لتجنُّب التغليف غير الضروري. (Ib0044)
  • تمت إضافة TestMonotonicFrameClock لاختبار الرمز البرمجي الذي يعتمد على MonotonicFrameClock في Compose لانتظار أحداث إطار الإنشاء باستخدام runBlockingTest من kotlinx-coroutines-test (I4402f)
  • إزالة GestureScope.localToGlobal (I15299، b/171462785)
  • تمت إضافة أداة البحث onAllNodesWithSubstring (I81dd7، b/171462889)
  • تم إيقاف الوحدة androidx.ui.test نهائيًا. يُرجى نقل البيانات إلى androidx.compose.ui.test وandroidx.compose.ui.test.junit4 (I452e8)

إصلاح الأخطاء

  • تم نقل captureToBitmap إلى captureToImage. (I86385)
  • تم إيقاف foundation.Text نهائيًا واستبداله بـ material.Text. للحصول على واجهة برمجة تطبيقات نصية أساسية وغير مشروطة لا تستهلك قيمًا من سمة، اطّلِع على androidx.compose.foundation.BasicText. (If64cb)
  • تعديل حقول النص لقبول KeyboardOptions (Ida7f3)
  • إعادة تسمية KeyboardOptions إلى ImeOptions (I82f36)
  • نقل KeyboardType وImeAction إلى KeyboardOptions (I910ce)
  • تمت إضافة provideDefault كبديل لتوفير البيانات المحيطة، ويمكن استخدامه لتحديد قيم البيانات المحيطة التي سيتم ضبطها فقط عندما لا تكون هناك قيمة بيانات محيطة متوفّرة. (Id6635، b/171024925)
  • تم إيقاف BaseTextField نهائيًا. استخدِم BasicTextField بدلاً من ذلك. (I896eb)
  • إضافة الوحدة ui-test-junit4 (Ib91f8)
  • تم تغيير اسم "relativePaddingFrom" إلى "paddingFrom". تمت إضافة المعدِّل paddingFromBaseline لتسهيل تحديد المسافات من حدود التصميم إلى خطوط الأساس للنص. (I0440a، b/170633813)
  • تمت إعادة تسمية LaunchedTask إلى LaunchedEffect لضمان الاتساق مع واجهتَي برمجة التطبيقات SideEffect وDisposableEffect. لا يُسمح باستخدام LaunchedEffect بدون مَعلمات الموضوع لتشجيع أفضل الممارسات. (Ifd3d4)
  • تم تقديم عنصر Resources القابل للإنشاء الذي يعيد إنشاء نفسه عند تعديل الإعدادات. (I6387c، b/167352819)
  • يتطلّب Recomposer الآن CoroutineContext عند الإنشاء (Ic4610)
  • اجمع قيم zIndex عند تطبيق Modifier.zIndex() متعددة. في السابق، كان الفائز هو أول من يرسل الرد. (Ic514c، b/170623936)
  • تغييرات على التنفيذ الداخلي لـ SlotTable، والتي من المفترض ألا تؤثّر في واجهة برمجة التطبيقات العامة (If9828)
  • تمت إضافة خيار "التصحيح التلقائي للوحة المفاتيح" في "محرّك أسلوب الإدخال" (I57b8d)
  • تم نقل androidx.ui.test إلى androidx.compose.ui.test (I9ffdb)
  • تمت إزالة KeyboardOptions.toImeOptions من واجهة برمجة التطبيقات العامة. (Ic2e45)

المساهمة الخارجية

  • تم إيقاف نشر العنصر الداخلي androidx.compose.ui:ui-text-android (Ib93fa)

الإصدار ‎1.0.0-alpha06

‫28 أكتوبر 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha06. يتضمّن الإصدار 1.0.0-alpha06 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • أصبحت Recomposer الآن CompositionReference ووالدًا صالحًا للتكوين. أصبح استخدام Explicit Recomposer مطلوبًا في أماكن أقل. (I4036f)
  • إيقاف VectorPainter نهائيًا واستخدام rememberVectorPainter بدلاً منه لتوضيح أنّ واجهة برمجة التطبيقات القابلة للإنشاء تستخدم داخليًا الدالة remember للاحتفاظ بالبيانات على مستوى عمليات الإنشاء. (Ifda43)
  • تم تعديل واجهة برمجة التطبيقات Modifier.drawWithCache لإتاحة ContentDrawScope كنطاق مستقبِل بدلاً من DrawScope من أجل منح عمليات التنفيذ القدرة على إعادة ترتيب أوامر الرسم. ويكون ذلك مفيدًا في حالات استخدام المزج/التلوين التي يجب فيها عرض وحدات البكسل الخاصة بالمحتوى أولاً لكي يتم تطبيق خوارزمية وضع المزج المقابل بشكل صحيح. (Ie7ec8)
  • نقل SimpleContainer إلى ملف PopupTestUtils.kt (I78c57)
  • لم يعُد ConsumedData فئة بيانات. لمزيد من التفاصيل، يُرجى الاطّلاع على https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219 (I1737f).
  • إصلاح موضع مقبض الكتابة من اليمين إلى اليسار (I6e1e0)
  • تمت إعادة تصميم DrawScope وContentDrawScope ليصبحا واجهتَين بدلاً من فئتَين مجرّدتَين
    • Created CanvasDrawScope implementation of DrawScope
    • إعادة تصميم عمليات تنفيذ DrawScope لاستخدام CanvasScope بدلاً منها
    • تم إنشاء DrawContext لتضمين التبعيات في DrawScope
    • تمت إزالة الطرق المتوقّفة نهائيًا في DrawScope (I56f5e)
  • تغيير غير متوافق: تمت إزالة قيمة العرض من PointerInputFilter.onPointerEvent(...) لأنّ القيمة الوحيدة التي يجب أن يكون من الممكن تغييرها في أحداث المؤشر هي بيانات الاستخدام. بدلاً من عرض البيانات من PointerInputFilter.onPointerEvent(...)، يمكنك الآن تغيير بيانات الاستخدام الخاصة بأحداث PointerEvents التي تم تمريرها. (I6acd0)
  • تم تحويل MeasureScope وIntrinsicMeasureScope إلى واجهات. (I1a087، b/170461665)
  • تم إخفاء دالة الدمج الخاصة بـ AlignmentLine. (I9da1a، b/170612900، b/170611568)
  • إضافة إمكانية تحديد معلومات أداة الفحص في المعدِّل المركّب (Idee08، b/163494569)
  • تمت إضافة الخيار "اختيار الكل" إلى قائمة التحديد (Ief02b)
  • تم تعديل DrawTransform.rotate لتضمين معلَمة محورية تلقائية في المنتصف لتتطابق مع المستندات.
    • تم تعديل DrawScope.rotateRad لاستخدام إزاحة لنقطة الارتكاز لتتطابق مع طرق التحويل الأخرى.
    • تم إيقاف التحميل الزائد DrawScope.rotateRad نهائيًا والذي كان يستهلك أرقامًا عائمة لإحداثيات x وy لنقطة الارتكاز.
    • (Iffcbb، b/170434992)

إصلاح الأخطاء

  • تم تفعيل فحص API lint للخطأ MissingGetterMatchingBuilder في androidx (I4bbea وb/138602561)
  • أضِف اختبارًا. (I6b8ae)
  • تفعيل عمليات الانتقال في ComposeTestRule وإزالة خيار تفعيل مؤشر الكتابة الوامض من ComposeTestRule (If0de3)
  • تمت إضافة خيار KeyboardCapitalization IME‏ (I8ac38)
  • تمت إضافة خيار لوحة المفاتيح ذات السطر الواحد إلى CoreTextField (I72e6d)
  • نقل SimpleContainer إلى ملف PopupTestUtils.kt (I65c3e)
  • تمت إعادة تسمية واجهة برمجة التطبيقات Radius إلى CornerRadius للتعبير بشكل أفضل عن طريقة استخدامها في جميع أنحاء Compose. عدّلنا المستندات للإشارة إلى أنّ نصف قطر الزاوية السالبة يتم ضبطه على صفر. (I130c7، b/168762961)
  • تحسين التوافق مع Android من خلال مواصلة إرسال MotionEvents إلى "عناصر العرض" الفرعية في Android التي تعرض القيمة "خطأ" في onTouchEvent لجميع الإجراءات باستثناء ACTION_DOWN (I94c5a، b/170320973)
  • تم تحويل المربع إلى دالة مضمّنة. (Ibce0c، b/155056091)

المساهمة الخارجية

  • إتاحة لغات مختلفة لكل من AnnotatedString.capitalize وAnnotatedString.decapitalize (I4aa7f)

الإصدار ‎1.0.0-alpha05

‫14 أكتوبر 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha05. يتضمّن الإصدار 1.0.0-alpha05 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إضافة لغة خاصة بالمجال لتحديد معلومات المدقّق (Ic9a22)
  • نقل LongPress إلى Text (Iff2bc)
  • Experimental Modifier.pointerInput تعليق معدِّل الإدخال (Ia77d2)
  • تمت إضافة إجراءات تسهيل الاستخدام "نسخ" و"لصق" و"قص" (I6db4f)
  • تمت إزالة أداة الإنشاء العامة لفئة AndroidOwner (Iacaef)
  • تكتسب النوافذ المنبثقة ومربّعات الحوار الآن علامة FLAG_SECURE من النافذة الرئيسية. تمت أيضًا إضافة خيار لضبط ذلك بشكل صريح (I64966، b/143778148، b/143778149)
  • أصبحت بيانات الاستهلاك قابلة للتغيير الآن. بالإضافة إلى ذلك، لم تعُد طلبات الدوال الإضافية التي تنفّذ عملية الاستهلاك تعرض PointerInputChange جديدًا، بل تعدّل PointerInputChange المقدَّم.

    هذه هي الخطوة الأولى في عملية من خطوتين تهدف إلى جعل بيانات PointerEvent قابلة للتغيير، وذلك لكي لا يتمكّن رمز المستخدم من تعديل بيانات المؤشر الأخرى. ستكون الخطوة الثانية هي إزالة نوع القيمة التي تم إرجاعها List<PointerInputChange> من PointerInputFilter.onPointerEvent(...). (Id067e)

  • إيقاف ميزة "تحديد النص" في العرض التوضيحي (Ie7e97)

  • تم تحويل Made onGloballyPositioned إلى دالة مضمّنة (I15830)

  • تمت إعادة تسمية OnPositionedModifier إلى OnGloballyPositionedModifier وإعادة تسمية onPositioned()‎ إلى onGloballyPositioned()‎. (I587e8، b/169083903)

  • تمت إضافة السمة hasPendingMeasureOrLayout إلى Owner، لتحديد ما إذا كان Owner لديه أي عمل تخطيط معلّق. (I3d9f8، b/169038599)

  • تمت إضافة واجهة برمجة تطبيقات لمحو التركيز آليًا (Ie1dc2، b/161487952)

  • تمت إزالة جهة الاتصال "PointerInputFilter.onPointerInput(...)". يجب استخدام PointerInputFilter.onPointerEvent(...) بدلاً من ذلك. (I6f04a)

  • التغييرات في الحجم

    • تمت إزالة Size.getFlipped
    • ‫Removed Size.rem
    • Removed Size.truncDiv (Ief44d, b/169790720)
  • في إطار توحيد قيم الحراسة لفئات مضمّنة، تمت إعادة تسمية Color.Unset إلى Color.Unspecified لتحقيق الاتساق مع الفئات المضمّنة الأخرى (I97611 وb/169797763).

  • تمت إضافة TextOverflow.None. عندما تكون قيمة overflow هي None، لن يتعامل عنصر Text مع المحتوى الزائد بعد الآن، وسيُبلغ LayoutNode عن حجمه الفعلي. (I175c9، b/158830170)

  • تمت إعادة تسمية المَعلمة "النطاق" ضِمن AnnotatedString.Builder.addStringAnnotation إلى "علامة" من أجل اتّساق واجهة برمجة التطبيقات. (I7c8cb)

إصلاح الأخطاء

  • تم تحسين أداء التمرير في LazyColumn/Row من خلال تقليل العمل في التركيب الفرعي عند كل تمرير. تمت إضافة طريقة hasInvalidations() الجديدة إلى فئة Composition. تمت إعادة تسمية طريقة hasPendingChanges() من Recomposer إلى hasInvalidations() (Ib2f32 وb/168293643 وb/167972292 وb/165028371)
  • تم تعديل معلَمات Size.Unspecified لتصبح Float.NaN بدلاً من Float.POSITIVE_INFINITY. تم تعديل عمليات تنفيذ Painter للتحقّق من Size.Unspecified بالإضافة إلى الأحجام غير المحدودة. (I95a7e)
  • يحدّد ترتيب طلبات place() في التنسيقات المخصّصة الآن ترتيب الرسم للعناصر الفرعية (Ibc9f6)
  • إتاحة تحويل AnnotatedString إلى SpannableString لتسهيل الاستخدام (Ief907)
  • تمت إضافة رموز أساسية لفئات Android المتوفّرة على المنصات القديمة لتجنُّب استخدام الانعكاس عند الإمكان. (Ia1790)
  • تم إصلاح الخلل التالي: إذا أدّى عرض لوحة المفاتيح الافتراضية إلى ترجمة التطبيق، ستصبح إحداثيات إدخال المؤشر غير صحيحة. (Ic4cec، b/163077821)

الإصدار ‎1.0.0-alpha04

‫1 أكتوبر 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha04. يتضمّن الإصدار 1.0.0-alpha04 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة OwnerScope للسماح بجمع نطاقات مراقبة التنسيق والرسم بعد أن تصبح غير صالحة. (Ic4cf8)
  • تمت إضافة OnRemeasuredModifier وonSizeChanged() لتلقّي ردّ عند إعادة قياس تنسيق المحتوى وتغيير الحجم، على التوالي. (I657cf، b/154108792)
  • إضافة إجراء دلالات النقر مع الاستمرار (I6281b، b/156468846)
  • تم جعل FocusManager خاصًا. (I7872f)
  • تم تعديل عملية التنفيذ لإنشاء عملية تنفيذ مخصّصة لـ DrawCacheModifier بدلاً من إضافة سمات اختيارية إلى DrawModifier.

    تعديل المستندات الخاصة بطُرق مختلفة (Ibd166)

  • اجعل TextRange مضمّنًا لتجنُّب إنشاء عنصر. (Id034b)

  • لم يعُد من الممكن قراءة PlacementScope#parentWidth وPlacementScope#parentLayoutDirection من موضع الإعلان في تصميم مخصّص. (Icc1ae، b/168295623)

  • إضافة AccessibilityScrollState إلى خصائص الدلالات (Ifeda9)

  • تمت إضافة Modifier.drawWithCache لإتاحة إنشاء عنصر رسم يعيد إنشاء التبعيات بشكل مشروط التي تعتمد على معلومات الحجم/الحالة (I376dc)

  • تمت إزالة ParagraphConstraints. يتم الآن تمرير العرض مباشرةً إلى الفقرة. (Ica712)

إصلاح الأخطاء

  • تعديل العديد من واجهات برمجة التطبيقات الخاصة بالرسومات
    • تم تعديل واجهات برمجة التطبيقات الخاصة بعمليات التحويل المتعلقة بالتوسيع والتدوير لتستهلك مَعلمة إزاحة واحدة تمثّل إحداثيات نقطة الارتكاز بدلاً من مَعلمات عائمة منفصلة لإحداثيات س/ص في DrawScope وDrawTransform
    • تمت إزالة الطريقتَين Rect.expandToInclude وRect.join
    • عدّلنا مستندات "النطاق الجغرافي" لتوضيح أنّ الشكل بيضوي بالإضافة إلى الشكل الإهليلجي
    • تمت إضافة مستندات للإشارة إلى أنّه يجب عدم استدعاء الدالة الإنشائية العامة لفئة Radius المضمّنة مباشرةً، بل يجب إنشاء مثيلات لعناصر Radius من خلال دوالها الإنشائية.
    • تمت إزالة واجهات برمجة تطبيقات RoundRect للاستعلام عن topRight وbottomRight وbottomCenter وما إلى ذلك.
    • إيقاف Rect.shift نهائيًا واستخدام Rect.translate بدلاً منه
    • إزالة واجهتَي برمجة التطبيقات RoundRect.grow وRect.shrink
    • تمت إعادة تسمية RoundRect.outerRect إلى Rect.boundingRect
    • تمت إزالة طُرق RoundRect.middleRect/tallMiddleRect/wideMiddleRect وRect.isStadium
    • تمت إعادة تسمية RoundRect.longestSide إلى RoundRect.maxDimension
    • تمت إعادة تسمية RoundRect.shortestSide إلى RoundRect.minDimension
    • تم تغيير RoundRect.center ليصبح سمة بدلاً من دالة
    • تم تعديل الدالة الإنشائية RoundRect لتستهلك خصائص Radius بدلاً من المَعلمات الفردية لقيم نصف القطر x/y
    • إزالة واجهات برمجة التطبيقات الخاصة بالحجم التي كانت تفترض أنّها مستطيل بنقطة أصل عند 0,0
    • تمت إضافة واجهة برمجة تطبيقات لإيقاف Radius
    • نقلنا العديد من دوال إضافة RoundRect لتصبح خصائص بدلاً من ذلك
    • (I8f5c7، b/168762961)
  • تم إيقاف foundation.Box نهائيًا. يُرجى استخدام foundation.layout.Box بدلاً من ذلك. (Ie5950، b/167680279)
  • تمت إعادة تسمية "الحزمة" إلى "المربع". سيتم إيقاف Box السابق نهائيًا واستخدام Box الجديد في compose.foundation.layout. سلوك المربّع الجديد هو ترتيب العناصر الفرعية بعضها فوق بعض عندما يحتوي على عناصر فرعية متعددة، وهذا يختلف عن المربّع السابق الذي كان يتصرف بشكل مشابه للعمود. (I94893، b/167680279)
  • تم إيقاف مَعلمات تزيين المربّعات نهائيًا. إذا كنت تريد إضافة زخارف أو مساحة فارغة إلى المربّع، استخدِم المعدِّلات بدلاً من ذلك (Modifier.background وModifier.border وModifier.padding) (Ibae92 وb/167680279).
  • تعديل العديد من واجهات برمجة التطبيقات الخاصة بالرسومات
    • تم تعديل واجهات برمجة التطبيقات DrawScope لتتضمّن طرق تحويل محدودة النطاق للإشارة إلى أنّ عملية التحويل يتم تطبيقها فقط ضمن دالّة رد الاتصال ويتم إزالتها بعد استدعاء دالّة رد الاتصال.
    • عدّلنا مستندات clipPath للإشارة إلى Path بدلاً من المستطيل الدائري
    • تم إصلاح التباعد في مستندات المَعلمة right في clipPath
    • تمت إعادة تسمية DrawScope.drawCanvas إلى drawIntoCanvas وإزالة مَعلمة الحجم
    • تمت إعادة تسمية المَعلمتَين dx/dy في طريقة inset إلى horizontal وvertical
    • تمت إضافة دالة تحميل زائدة للداخل توفّر قيمة الداخل نفسها لجميع الحدود الأربعة
    • تمت إزالة المستندات المتعلقة بطريقة الإدراج التي تشير إلى أنّه سيتم تطبيق الإدراج على جميع الجوانب الأربعة
    • عدّلنا مستندات فئة Rect
    • تم تعديل التعليقات على مَعلمات Rect لتتوافق مع نمط kdoc
    • إزالة Rect.join وRect.expandToInclude
    • تم إنشاء تحميل زائد للدالة Rect.translate(offset) وتم إيقاف الدالة Rect.shift نهائيًا
    • (If086a، b/167737376)
  • إضافة التعليقات التوضيحية إلى rootAnimationClockFactory وtransitionsEnabled وblinkingCursorEnabled وtextInputServiceFactory باستخدام @VisibleForTesting، وتحويلها إلى واجهة برمجة تطبيقات داخلية وإخفاء مستندات kdoc الخاصة بها (I554eb وb/168308412)
  • أزِل SelectionContainer من الأعلى لإيقاف التحديد التلقائي وتجنُّب السلوك غير المتوقّع. يمكن استخدام SelectionContainer تحديدًا لتضمين المحتوى الذي يجب أن يكون قابلاً للتحديد بدلاً من ذلك. (I8dfe0، b/158459594)

الإصدار ‎1.0.0-alpha03

16 أيلول (سبتمبر) 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha03. يتضمّن الإصدار 1.0.0-alpha03 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إزالة إجراءات دلالات التمرير للأمام/للخلف تمت إضافة خطوات في AccessibilityRangeInfo. (Ia47b0)
  • تمت إزالة onInvalidate() من Owner. يتولّى OwnedLayer عملية الإبطال. (Ica72b، b/162061312)
  • تمت إزالة طرق عامل التشغيل في واجهة برمجة التطبيقات Size<0x0A> التي تستخدم مَعلمات الإزاحة. نتيجة هذه العمليات غير واضحة، ونوع النتيجة غير متوقّع بالنسبة إليها. على سبيل المثال، هل يجب أن تعرض الدالة size - offset إزاحة أو نتيجة حجم مع الفرق؟

    تمت أيضًا إزالة الطرق المتوقّفة نهائيًا في فئة Size. (Iec902، b/166514214)

إصلاح الأخطاء

  • تم إصلاح مشكلة عدم عرض عناصر LazyColumn بشكل صحيح في بعض الأحيان، ما كان يؤدي أيضًا إلى حدوث أعطال في بعض الحالات. (Ibcf17، b/163066980، b/165921895)
  • تم إيقاف DpConstraints وواجهات برمجة التطبيقات التي تستخدمها نهائيًا. (I90cdb، b/167389835)
  • تم نقل createAndroidComposeRule وAndroidInputDispatcher من androidx.ui.test.android إلى androidx.ui.test (Idef08 وb/164060572)
  • تمت إعادة تسمية استخدامات الجاذبية بشكل متّسق لتصبح محاذاة أو محاذاة في واجهات برمجة تطبيقات التنسيق. (I2421a، b/164077038)
  • تمت إضافة onNode وطُرق أخرى عامة إلى ComposeTestRule لأنّ الطرق العامة الحالية سيتم إيقافها نهائيًا. (Ieae36)

الإصدار ‎1.0.0-alpha02

‫2 سبتمبر 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha02. يتضمّن الإصدار 1.0.0-alpha02 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • إزالة دالة معاودة الاتصال لإرسال إشعار إلى المالك عند تغيير حدود layoutnode. (If654e، b/166106882)
  • تمت إضافة إمكانية استخدام مَعلمات filltype في مسارات الرسومات المتجهة لإتاحة قص الأشكال وفقًا لقواعد تعبئة المسار evenOdd أو NonZero. (I43dd2)
  • أصبح كلّ من "وقت التشغيل" و"السرعة" الآن فئتَين مضمّنتَين (I48f4a)
  • أصبحت المدة الآن فئة مضمّنة (I565eb)
  • أضِف دالة ردّ الاتصال لإرسال إشعار إلى المالك عند تغيير حدود layoutnode. (Ic40b3)
  • تم إصلاح مشكلة كانت تؤدي إلى إنشاء الدالة الإنشائية Rect التي تتضمّن الإزاحة ونصف القطر للرمز Rect بالترتيب التالي: يسار، يمين، أعلى، أسفل، بدلاً من يسار، أعلى، يمين، أسفل.

    تمت إزالة الطرق المتوقّفة نهائيًا في Rect واستبدالها بمنشئات الدوال.

    تمت إضافة اختبارات للتحقّق من صحة الطرق في Rect.kt (I08460، b/165822356)

إصلاح الأخطاء

  • تمت إضافة MutableRect، وهو مستطيل يمكن تعديله. (I71bd2، b/160140398)
  • تم استبدال Matrix4 بـ Matrix. تمت إزالة جميع الأجزاء الأخرى من حزمة vectormath. (Ibd665، b/160140398)
  • تم تغيير اصطلاح الاستدعاء للدوال القابلة للإنشاء. هذا تغيير قد يؤدي إلى عطل في البرنامج الثنائي. يجب إعادة تجميع جميع المكتبات لتعمل مع هذا الإصدار من مكوّن Compose الإضافي للمترجم.

    لا يؤدي هذا التغيير إلى حدوث تغيير على مستوى المصدر، لأنّ واجهات برمجة التطبيقات الوحيدة التي تم تغييرها هي واجهات برمجة التطبيقات الخاصة بالمترجم والتي تتطلّب موافقة صريحة. (I7afd2، b/158123185)

  • تم إصلاح عُطل كان يمكن أن يحدث عندما يؤدي إرسال حدث إلى PointerInputFilter إلى إزالة PointerInputFilter بشكل متزامن. (I58f25)

الإصدار ‎1.0.0-alpha01

‫26 أغسطس 2020

تم طرح androidx.compose.ui:ui-*:1.0.0-alpha01. يتضمّن الإصدار 1.0.0-alpha01 هذه التعديلات.

الإصدار 0.1.0-dev

الإصدار 0.1.0-dev17

‫19 أغسطس 2020

تم طرح androidx.compose.ui:ui-*:0.1.0-dev17. يتضمّن الإصدار 0.1.0-dev17 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف emitView نهائيًا. استخدِم AndroidView بدلاً من ذلك إذا أمكن لعرض "طرق العرض" داخل Compose. يُرجى العِلم أنّه لن يكون متاحًا في المستقبل إنشاء Views وViewGroups مباشرةً إلا إذا كانت هذه العناصر عبارة عن أوراق في شجرة الإنشاء، وفي هذه الحالة يمكن تحقيق ذلك باستخدام AndroidView. (I29b1e، b/163871221)
  • تم إيقاف FocusState2 نهائيًا واستبداله بـ FocusState (Ia8b79، b/160822876، b/160923332)
  • تمت إزالة عمليات التحميل الزائد المتوقّفة نهائيًا في AndroidView. (I946b9، b/163802393)
  • يمكن الآن أن تحدّد عمليات الإرسال المخصّصة أنّه يمكن تخطّي دالة تحديد القيمة واحدة أو أكثر وإعادة التكوين بشكل مستقل عن عملية الإرسال. (Ibbd13)
  • تم تغيير فئات Vector لتصبح غير مرتبطة بالبيانات، لأنّه يتم استخدام مثيل الكائن نفسه في التركيب.

    تمت إضافة العلامة mutableStateOf إلى VectorPainter لإعادة الرسم بشكل مشروط في حال تغيّر محتوى المتّجه.

    تمت إعادة تصميم نسخة VectorComponent لتكون جزءًا من VectorPainter لأنّه يتم إعادة استخدامها في جميع التركيبات.

    تم تعديل GroupComponent وPathComponent ليصبح حقل الاسم قابلاً للتعديل (Ieae45، b/151378808)

  • تمت إزالة "onChildPositioned" و"OnChildPositionedModifier". على المطوّرين استخدام onPositioned وOnPositionedModifier في تصميم العناصر الفرعية بدلاً من ذلك. (I4522e، b/162109766)

  • أصبحت الإزاحة فئة مضمّنة (Iaec70)

  • تمت إضافة مَعلمة معدِّل إلى SelectionContainer (I4aada، b/161487952)

  • إزالة FocusModifier المتوقّف نهائيًا (I0b4ba وb/160922116 وb/160821157 وb/162441435 وb/160822875 وb/160921940)

  • تمت إضافة دالة lambda mergePolicy إلى SemanticsPropertyKey. يمكن استخدام ذلك لتحديد سياسة مخصّصة لدمج دلالات mergeAllDescendants. تتمثّل السياسة التلقائية في استخدام قيمة العنصر الأصل إذا كانت متوفّرة، وإلا يتم استخدام قيمة العنصر الفرعي. (Iaf6c4، b/161979921)

  • أصبحت Constraints الآن فئة مضمّنة (I88736)

  • تمت إضافة FocusManager الذي ينقل منطق التركيز الشائع خارج AndroidComposeView (I528ef، b/161487952، b/162206799)

  • تم تعديل أسماء PointerEventPass للإصدار الأوّلي. (Ifda6f)

  • أصبح IntOffset الآن فئة مضمّنة (Iac0bf)

  • أصبح IntSize الآن فئة مضمّنة (I2bf42)

  • تمت إعادة تسمية "PlacementScope.placeAbsolute()" إلى "PlacementScope.place()"، وتمت إعادة تسمية "PlacementScope.place()" السابقة إلى "PlacementScope.placeRelative()". نتيجةً لذلك، لن تعكس طريقة PlacementScope.place() الموضع تلقائيًا في سياقات الكتابة من اليمين إلى اليسار بعد الآن. إذا كنت تريد ذلك، استخدِم PlacementScope.placeRelative() بدلاً من ذلك. (I873ac، b/162916675)

  • يستخدم AlertDialog الآن FlowRow للأزرار (I00ec1 وb/161809319 وb/143682374)

  • تمت إزالة بعض أدوات الاختبار من النطاق العام لأنّها لا تنتمي إلى هذا النطاق. سيتم عرضها بشكل علني في المستقبل. (I32ab1)

  • إعادة تنظيم رمز إدخال المؤشر. (Ie3f45)

  • تم إيقاف PxBounds نهائيًا واستبداله بـ Rect. تم تعديل جميع استخدامات PxBounds لتشمل rect، وتمت إضافة تعليقات توضيحية مناسبة بشأن الإيقاف النهائي والاستبدال للمساعدة في عملية نقل البيانات. (I37038، b/162627058)

  • تمت إزالة KeyEvent2 المتوقّف نهائيًا. استخدِم KeyEvent بدلاً من ذلك. (Ied2d0، b/162097587)

  • يحتوي KeyEvent على سمة يونيكود يمكن استخدامها للحصول على رمز يونيكود الذي تم إنشاؤه من خلال مجموعة المفاتيح المحدّدة وحالة مفتاح الوصف (If3afc).

  • تم تحويل الحدث المخصّص DelayUp والفئات ذات الصلة إلى واجهة برمجة تطبيقات تتطلّب الموافقة، لأنّه من المرجّح جدًا أن يتم تغييرها. (I56d6f)

  • تمت إزالة PointerEventPasses 2 التي لم تعُد مطلوبة. (I3dd9d)

  • أضِف مَعلمات اللون والظل وTextDecoration إلى Paragraph.paint. هذه الدالة مفيدة لتجنُّب إعادة إنشاء الفقرة بدون داعٍ. (I81689)

إصلاح الأخطاء

  • تمت إزالة عمليات معاودة الاتصال onFocusChanged من TextField. استخدِم Modifier.focusObserver بدلاً من ذلك. (I51089، b/161297615)
  • تم إيقاف Modifier.drawBorder نهائيًا. استخدِم Modifier.border بدلاً من ذلك. تم استبدال فئة بيانات الحدود بـ BorderStroke (I4257d، b/158160576)
  • تمت إزالة طلبات FrameManager التي تم إيقافها نهائيًا.

    تم تغيير واجهات برمجة التطبيقات الداخلية الخاصة بـ Compose لتقليل مقدار الحمل الزائد اللازم لتتبُّع عناصر الحالة، مثل mutableStateof() (I80ba6).

  • تمت إزالة VerticalScroller وHorizontalScroller. استخدِم ScrollableColumn/Row بدلاً من ذلك. تمت إزالة Modifier.drawBackground. استخدام Modifier.background (I73b0d، b/163019183)

  • تم إصلاح مشكلة التعطُّل التي كانت تحدث عند استخدام عنصر يحفظ الحالة داخل حلقة for. أصبح من المسموح به الآن استخدام المفتاح نفسه في savedInstanceState()، وتم تعديل واجهة برمجة التطبيقات UiSavedStateRegistry لتتوافق مع هذا الشرط الجديد (I4ab76 وb/160042650 وb/156853976 وb/159026663 وb/154920561).

  • تم إيقاف الدالة المركّبة state { ... } نهائيًا، وأصبح من الأفضل استخدام استدعاءات صريحة إلى remember { mutableStateOf(...) } لمزيد من الوضوح. يقلّل ذلك من مساحة واجهة برمجة التطبيقات الإجمالية وعدد المفاهيم المتعلّقة بإدارة الحالة، ويتوافق مع نمط by mutableStateOf() لتفويض خصائص الفئة. (Ia5727)

  • تمت إعادة تسمية RRect إلى RoundRect لتتلاءم بشكل أفضل مع أنماط التسمية في Compose تم إنشاء دوال إنشاء مشابهة لدالة RRect وتم إيقاف دوال إنشاء RRect نهائيًا (I5d325)

الإصدار 0.1.0-dev16

‫5 أغسطس 2020

تم طرح androidx.compose.ui:ui-*:0.1.0-dev16. يتضمّن الإصدار 0.1.0-dev16 هذه التعديلات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف OnChildPositioned نهائيًا. استخدِم OnPositioned في العنصر الفرعي بدلاً من ذلك. (I87f95، b/162109766)
  • تم إيقاف setViewContent نهائيًا، ويجب استخدام setContent بدلاً منها. (I7e497، b/160335130)
  • تمت إضافة واجهة برمجة التطبيقات AndroidViewBinding لتضخيم موارد التنسيق وإنشائها، استنادًا إلى ViewBinding. (I081c6)
  • تم استبدال KeyEvent2 بـ KeyEvent (I2d770، b/162097585)
  • تمت إضافة دعم لمفتاح Alt الخارجي (I9036b)
  • تم إيقاف FocusManager نهائيًا. استخدِم Modifier.focus()‎ وModifier.focusObserver()‎ وModifier.focusRequester()‎ بدلاً من ذلك. (I74ae4، b/162211322)
  • تتيح السمة loadVectorResource استخدام سمات trimPath (I808fe)
  • نقل مربّع الحوار إلى واجهة المستخدم (I47fa6)
  • تمت إزالة PointerEventPasses 2 التي لم تعُد مطلوبة. (I33ca7)
  • تم تنفيذ PointerInteropModifier الذي يوفّر إمكانية تلقّي أحداث MotionEvent والتفاعل مع Compose كما لو كنت تستخدم تطبيق Android View. (Ieb08c)
  • تمت إزالة معدِّل العلامة المتوقّف نهائيًا. يُرجى استخدام layoutId بدلاً من ذلك. (Idaa05، b/162023919)
  • تم تعديل واجهات برمجة التطبيقات التي تتيح استخدام اللغة من اليمين إلى اليسار. تمت إضافة LayoutDirectionAmbient، ويمكن استخدامها لقراءة اتجاه التنسيق وتغييره. تمت إزالة Modifier.rtl وModifier.ltr. (I080b3)
  • إتاحة اقتطاع المسار في الرسومات المتّجهة (Ie16c9، b/158188351)
  • تمت إضافة Modifier.layout() التي تتيح إنشاء معدِّل تخطيط مخصّص بسهولة (I73b69، b/161355194)
  • تمت إضافة واجهة برمجة تطبيقات AndroidView جديدة وإيقاف واجهات برمجة التطبيقات الحالية نهائيًا. (I5bcfd)
  • تم إيقاف Modifier.plus نهائيًا، يُرجى استخدام Modifier.then بدلاً منه. توفّر الكلمة الأساسية "ثم" إشارة أقوى إلى الترتيب، كما أنّها تحظر كتابة Modifier.padding().background() + anotherModifier، ما يؤدي إلى إيقاف السلسلة ويصعّب قراءتها (Iedd58، b/161529964)
  • إضافة فئات فرعية من [Abstract]ComposeView View لاستضافة محتوى Compose في هيكلية طرق العرض. (I46357)
  • أصبحت الدالتان Row وColumn الآن دالتين مضمّنتين، ما يقلّل بشكل كبير من تكلفة استخدامهما. (I75c10)
  • تمت إضافة SubcomposeLayout. وهي عنصر أساسي منخفض المستوى يتيح إنشاء العناصر الفرعية أثناء القياس إذا أردنا استخدام بعض القيم المتاحة لاحقًا فقط أثناء القياس لإنشاء الشجرة الفرعية. على سبيل المثال، لم يتم تنفيذ WithConstraints باستخدام SubcomposeLayout. (I25cc8)
  • تمت إضافة SemanticsNode.positionInRoot للحصول على موضع SemanticsNode بالنسبة إلى جذر التسلسل الهرمي لـ Compose (Icdf26، b/161336532)
  • تم تمرير أحداث MotionEvent بالكامل من Android إلى Compose ثم إلى Android مرة أخرى. (I14be8، b/158034713)
  • تمت إزالة dropdownPopup. (I00430)
  • موضع النافذة المنبثقة الثابت على الشاشات التي تحتوي على صورة مقطوعة (Idd7dd)
  • إضافة إجراء تسهيل الاستخدام للحصول على TextLayoutResult (I9d6e6)
  • تمت إضافة RemeasurementModifier. يتيح ذلك إعادة قياس التنسيق بشكل متزامن. بشكل عام، لن تحتاج إليها أبدًا لأنّ إعادة القياس/إعادة التنسيق تتم تلقائيًا، ولكنّنا نستخدمها داخل LazyColumnItems أثناء التمرير. (I5f331، b/160791058)
  • إزالة getLineEllipsisOffset/getLineEllipsisCount يمكنك استخدام getLineVisibleEnd أو getLineEnd أو isLineEllipsized بدلاً من ذلك. (I85aa2)
  • أضِف بعض العلامات/التعليقات التوضيحية لسبب أفضل الممارسات. (I66b20)
  • عرض المزيد من واجهات برمجة التطبيقات للسطر في TextLayoutResult (I79bd2)
  • يمكن الآن الوصول إلى أدوات تحويل المتجهات المضمّنة لتحويل الوحدات المضمّنة من خلال Foo.VectorConverter، مثل Dp.VectorConverter وColor.VectorConverter وFloat.VectorConverter وما إلى ذلك (I3e273).

إصلاح الأخطاء

  • إصلاحات واسعة النطاق لواجهة برمجة التطبيقات (I077bc)
    1. إزالة واجهة OffsetBase غير المستخدَمة
    2. مواءمة فئتَي Offset وIntOffset للحصول على مساحة سطح متسقة لواجهة برمجة التطبيقات
    3. إعادة تسمية IntOffset.Origin إلى IntOffset.Zero لضمان التوافق مع Offset API
    4. تم نقل طريقة nativeCanvas من واجهة Canvas لإتاحة إنشاء مثيلات Canvas خاصة بالمستهلكين
    5. تم إنشاء رمز بديل لفئة EmptyCanvas لإعادة هيكلة DrawScope ليكون مَعلمة غير فارغة بدلاً من lateinit وضمان عدم إمكانية قبول القيم الفارغة للحقل
    6. تمت إعادة تسمية تعدادات ClipOp لتصبح Pascal Case
    7. إعادة تسمية تعدادات FilterQuality لتصبح Pascal Case
    8. إعادة تسمية تعدادات StrokeJoin لتكون Pascal Case
    9. إعادة تسمية تعداد PointMode ليكون Pascal Case
    10. تمت إعادة تسمية تعداد PaintingStyle ليصبح Pascal Case
    11. تمت إعادة تسمية تعداد PathFillType ليصبح Pascal Case
    12. إعادة تسمية تعدادات StrokeCap لتصبح Pascal Case
    13. تم تعديل تنفيذ DrawCache لكي لا يستخدم مَعلمات lateinit
    14. تم تعديل DrawScope لكي لا يستخدم التفويض الكسول للمَعلمات الداخلية fillPaint وstrokePaint
    15. تم تعديل الدالة البرمجية القابلة للإنشاء Image لتجنُّب استخدام Box لتقليل الحمل الزائد
    16. تم تعديل فئة Outline لتضمين التعليقات التوضيحية ‎ @Immutable
    17. تم تعديل PathNode لتضمين التعليقات التوضيحية ‎ @Immutable لكل تعليمات مسار
    18. تم تعديل التركيبة الفرعية Vector لإزالة عمليات التحقّق الشرطية المكرّرة من المساواة، لأنّ Compose يتعامل معها تلقائيًا.
    19. إيقاف نهائي لطُرق إنشاء Rect المتوافقة واستخدام دوال الإنشاء بدلاً منها
    20. تعديل فئات Brush ومنشئات الدوال باستخدام واجهات برمجة التطبيقات ‎@Immutable و‎ @Stable
    21. تم تعديل تعداد VertexMode ليكون PascalCase
    22. تم تحديث طريقة selectPaint في DrawScope لاستبدال مَعلمات حدود الرسم في الطلاء بشكل شرطي إذا تم تغييرها
    23. تم تعديل الحجم لإضافة واجهة برمجة تطبيقات تفكيك وإعادة تسمية UnspecifiedSize إلى Unspecified وإزالة الطرق غير المستخدَمة
  • تم تعديل استخدام واجهة برمجة التطبيقات BlendMode في Compose لربط BlendModes في إطار عمل Android بأوضاع PorterDuff بشكل صحيح استنادًا إلى مستوى واجهة برمجة التطبيقات. تم طرح واجهة برمجة التطبيقات BlendMode#isSupported API لتكون بمثابة طلب بحث عن إمكانية تحديد ما إذا كان BlendMode متوافقًا مع الجهاز قبل استخدامه. (I0ef42)
  • تمت إضافة LazyItemScope إلى المَعلمة itemContent الخاصة بالقوائم Lazy. توفّر هذه السمة معدِّلات لملء الحد الأقصى لحجم العنصر الرئيسي، ما يحلّ حالة الاستخدام التي يجب فيها أن يملأ العنصر إطار العرض، ولا تعمل السمة Modifier.fillMaxSize() العادية لأنّه يتم قياس العنصر باستخدام قيود لانهائية. (Ibd3b2، b/162248854)
  • تمت إزالة جهة الاتصال "SemanticsNodeInteraction.performPartialGesture". يُرجى استخدام SemanticsNodeInteraction.performGesture بدلاً من ذلك. (Id9b62)
  • تم تغيير اسم "LazyColumnItems" إلى "LazyColumnFor". تمت إعادة تسمية "LazyRowItems" إلى "LazyRowFor" (I84f84)
  • تمت تسوية حزمة foundation.shape.corner إلى foundation.share (I46491، b/161887429)
  • تمت إعادة تسمية "AndroidComposeTestRule" إلى "createAndroidComposeRule". (I70aaf)
  • تمت إضافة المزيد من واجهات برمجة التطبيقات إلى TextLayoutResult. (Id7e04)
  • تمت إعادة تسمية Material FilledTextField إلى TextField، وإعادة تسمية foundational TextField إلى BaseTextField لتسهيل العثور على أبسط واجهة برمجة تطبيقات مطلوبة واستخدامها (Ia6242، b/155482676)
  • تمت إعادة تسمية Modifier.drawBackground إلى Modifier.background (I13677)

الإصدار 0.1.0-dev15

‫22 يوليو 2020

تم طرح androidx.compose.ui:ui-*:0.1.0-dev15. يتضمّن الإصدار 0.1.0-dev15 هذه التعديلات.

تعديل المهام التابعة

  • لاستخدام إصدار 0.1.0-dev15 من Compose، عليك تعديل التبعيات وفقًا لمقتطفات الرموز الجديدة الموضّحة أعلاه في تعريف التبعيات.

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف FocusModifier نهائيًا لصالح Modifier.focus وModifier.focusRequester وModifier.focusObserver. تم إيقاف FocusState وFocusDetailedState نهائيًا واستبدالهما بـ FocusState2 (I46919 وb/160822875 وb/160922136)
  • تمت إضافة أداة تعديل لمراقبة تغيير حالة التركيز. (I05866 وb/160924455 وb/160923326)
  • تمت إضافة معدِّل لطلب تغييرات التركيز (I8dd73 وb/161182057 وb/160924778)
  • اضبط قائمة شريط الأدوات لعرض خيارات النسخ والقص واللصق بشكل صحيح. (Id3955)
  • تستخدم خصائص الدلالات ذات القيمة الواحدة الآن نمطًا للاتصال. على سبيل المثال، تتم كتابة "semantics { hidden = true }" الآن على النحو التالي: semantics { hidden() }. (Ic1afd، b/145951226، b/145955412)
  • تمت إضافة Modifier.focus الذي يحلّ محل FocusModifier. (Ib852a، b/160924778)
  • إضافة FloatingToolbar لتحديد TextField (Ie8b07)
  • تمت إضافة تعليق توضيحي تجريبي لواجهة برمجة التطبيقات بشأن واجهة برمجة التطبيقات ذات الصلة بإدخال المفاتيح (I53c0a)
  • تمت إضافة تعليق توضيحي تجريبي لواجهة برمجة التطبيقات لجميع واجهات برمجة التطبيقات ذات الصلة بميزة "التركيز" (I53b24 وb/160903352)
  • تمت إضافة FocusState2 التي ستحلّ محلّ FocusDetailedState (I0a3ba، b/160822595)
  • تمت إضافة ExperimentalFocus، وهي تعليق توضيحي @OptIn لواجهة برمجة التطبيقات Focus. (I1544b، b/160820961)
  • تمت إضافة فئة وحدة IntBounds، وهي تمثّل حدود وحدات البكسل الصحيحة من التصميم. تم تعديل واجهة برمجة التطبيقات PopupPositionProvider لاستخدامها. (I0d8d0، b/159596546)
  • يتطلّب Applier الآن طريقة clear() للتخلّص من التركيبات (Ibe697)
  • تم إيقاف KeyEvent نهائيًا واستبداله بـ KeyEvent2 (I68730)
  • تمت إضافة علامة اختيارية جديدة useUnmergedTree إلى أدوات البحث الاختبارية. (I2ce48)
  • تمت إضافة واجهة برمجة تطبيقات تجريبية إلى LayoutNode (I4f2e9)
  • تمت إضافة طرق النسخ إلى أنواع مختلفة من الفئات المضمّنة، بما في ذلك:

    • إزاحة
    • الحجم
    • نصف القطر
    • حركة
    • TransformOrigin

    • تم إيقاف طريقة Size.copy المصاحبة للكائن نهائيًا واستبدالها بطريقة نسخة الكائن (Ife290، b/159905651)

  • تتضمّن الآن النوافذ المنبثقة ومربّعات الحوار والقوائم سمة MaterialTheme السياقية (Ia3665، b/156527485)

  • تمت إعادة تسمية TextDirection إلى ResolvedTextDirection (I3ff38)

  • تمت إزالة مَعلمة اتجاه التنسيق من كتلة القياس الخاصة بالدالة Layout(). ومع ذلك، يتوفّر اتجاه التنسيق داخل دالة رد الاتصال من خلال عنصر نطاق القياس (Ic7d9d).

  • إعادة هيكلة SelectionHandles لإعادة استخدامها (I420e0)

  • تمت إزالة العنصر القابل للنقر. استخدام Modifier.clickable (I84bdf)

  • تم حذف TestTag وSemantics. استخدِم Modifier.testTag وModifier.semantics بدلاً من ذلك (I15ff0، b/158841414).

  • قبل إجراء هذا التغيير، كان المكوّن الإضافي لبرنامج تجميع Compose يعترض بشكل غير بسيط على طلبات المنشئات داخل دالة مركّبة إذا كان هناك (I5205a، b/158123804)

  • تمت إعادة تسمية Modifier.tag إلى Modifier.layoutId لتجنُّب الخلط بينه وبين Modifier.testTag. (I995f0)

  • أصبحت مواضع خط المحاذاة Int التي يتم عرضها من Placeable#get(AlignmentLine) غير فارغة الآن. في حال عدم توفّر خط المحاذاة المطلوب البحث عنه، سيتم عرض AlignmentLine.Unspecified. (I896c5، b/158134875)

  • تمت إضافة مَعلمة معدِّل إلى العنصر القابل للإنشاء AndroidView. (I48a88، b/158746303)

  • تم إيقاف Semantics()‎ نهائيًا. استخدِم Modifier.semantics()‎ بدلاً من ذلك. (I72407، b/158841414)

  • إضافة دالة viewModel() القابلة للإنشاء التي تتيح إنشاء ViewModel أو الحصول على ViewModel تم إنشاؤه من قبل بطريقة مشابهة لطريقة عملها في Activity أو Fragment (I5fdd1)

  • تم استبدال استخدام IntPx بـ Int، واستبدال IntPxPosition بـ IntOffset. تم استبدال IntPxSize بـ IntSize. (Ib7b44)

  • من أجل دمج عدد الفئات المستخدَمة لتمثيل معلومات الحجم، يجب توحيد استخدام فئة Size بدلاً من PxSize. يوفّر ذلك مزايا فئة مضمّنة للاستفادة من قيمة طويلة من أجل حزم قيمتَين عائمتَين لتمثيل العرض والارتفاع كقيم عائمة. (Ic0191)

  • من أجل دمج عدد الفئات المستخدَمة لتمثيل معلومات تحديد المواقع، يجب توحيد استخدام فئة Offset بدلاً من PxPosition. يوفّر ذلك مزايا فئة مضمّنة للاستفادة من قيمة طويلة لتعبئة قيمتَين من النوع float لتمثيل الإزاحتَين x وy الممثّلتَين كقيمتَين من النوع float. (I3ad98)

  • تم استبدال استخدام فئة Px في العديد من فئات Compose كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلَمات البكسل. تم حذف فئة Px بالكامل (I3ff33)

  • تم استبدال استخدام فئة Px في العديد من فئات Compose كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلمات البكسل (I086f4)

  • تم استبدال استخدام فئة Px في فئات Compose المختلفة كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلمات البكسل (Id3434)

  • تم استبدال استخدام فئة Px في العديد من فئات Compose كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلمات البكسل (I97a5a)

  • تم إيقاف TestTag نهائيًا. استخدِم Modifier.testTag بدلاً من ذلك. (If5110، b/157173105)

  • تمت إزالة التنفيذ التلقائي لـ ParentDataModifier#modifyParentData، والذي لا ينفّذ أي عملية. كان هذا التنفيذ يعادل عدم تنفيذ الواجهة في المقام الأول. (I0deaa)

  • تم سابقًا إيقاف ScaleFit نهائيًا وإزالته. استخدِم ContentScale بدلاً من ذلك. (Ifbc5b)

  • تم استبدال استخدام فئة Px في العديد من فئات Compose كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلمات البكسل (I19d02)

  • تمت إضافة المكوّن DropdownMenu في ui-material، وهو تنفيذ لقائمة التصميم المتعدد الأبعاد. (I9bb3d)

  • تمت إزالة LayoutTag()‎ المتوقّفة نهائيًا، يُرجى استخدام Modifier.tag()‎ بدلاً منها. تمت إزالة Modifier.matchParent()‎ المتوقّفة نهائيًا، يُرجى استخدام Modifier.matchParentSize()‎ بدلاً منها. (If8044)

  • تم استبدال استخدام فئة Px في العديد من فئات Compose كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلَمات البكسل (I57bff)

  • تمت إعادة إتاحة Modifier.semantics للسماح باستخدامها مع المكوّنات ذات المستوى العالي. (I4cfdc)

  • تم دمج عمليات تنفيذ CanvasScope بحيث أصبح هناك DrawScope وContentDrawScope فقط تمت إعادة تسمية CanvasScope إلى DrawScope. تم تعديل DrawScope لتنفيذ واجهة Density وتوفير LayoutDirection تم حذف فئة DrawScope الفرعية في ContentDrawScope تم تعديل Painter وPainterModifier لعدم الاحتفاظ بسمة RTL بأنفسهما لأنّ DrawScope توفّرها بالفعل بدون الحاجة إلى توفيرها يدويًا (I1798e)

  • تعمل السمة DoubleTapGestureFilter الآن على إزالة الغموض عن SingleTapGestureFilter في جميع أنحاء الشجرة. (If92b1)

  • تم تعديل Alignment API وإضافة إمكانية المحاذاة المطلقة (التي لا يتم عكسها تلقائيًا في سياق الكتابة من اليمين إلى اليسار) (I38cd3)

  • تم تغيير واجهة برمجة التطبيقات الخاصة بمعدِّلات DrawLayer: تمت إعادة تسمية outlineShape إلى shape، وأصبحت القيمة التلقائية هي RectangleShape، وأصبحت القيمة غير قابلة للتصغير. تمت إعادة تسمية clipToOutline إلى clip. تمت إزالة clipToBounds لأنّها مماثلة لـ clip == true مع RectangleShape (I7ef11 وb/155075735).

  • تم تعديل واجهات برمجة التطبيقات ذات المستوى الأعلى في Compose التي تعرض Canvas لعرض CanvasScope بدلاً من ذلك. ويؤدي ذلك إلى عدم حاجة المستهلكين إلى الاحتفاظ بكائنات Paint الخاصة بهم. بالنسبة إلى المستهلكين الذين ما زالوا بحاجة إلى الوصول إلى Canvas، يمكنهم استخدام طريقة drawCanvas الإضافية التي توفّر برنامج معالجة لإصدار أوامر الرسم باستخدام Canvas الأساسي. (I80afd)

  • تم تغيير واجهة برمجة التطبيقات WithConstraints trailing lambda. بدلاً من مَعلمتَين، أصبح يتضمّن الآن نطاقًا للمستقبِل يوفّر، بالإضافة إلى القيود وlayoutDirection، الخصائص minWidth وmaxWidth وminHeight وmaxHeight بوحدات بكسل مستقلة الكثافة (I91b9a وb/149979702).

  • تمت إعادة تسمية LayoutModifier2 إلى LayoutModifier. (Id29f3)

  • تمت إزالة واجهة LayoutModifier المتوقّفة نهائيًا. (I2a9d6)

  • تحتوي دوال القياسات الجوهرية في Layout وLayoutModifier2 الآن على أداة استقبال IntrinsicMeasureScope التي توفّر واجهة برمجة تطبيقات طلبات البحث عن القياسات الجوهرية مع اتجاه التنسيق الذي يتم نشره ضمنيًا. (Id9945)

  • يمكن قياس العناصر الفرعية Layout وLayoutModifier باتجاه تنسيق مختلف. (Ibd731)

  • تمت إضافة Modifier.zIndex() جديد للتحكّم في ترتيب رسم العناصر التابعة ضمن تنسيق العنصر الرئيسي نفسه. تمت إعادة تسمية السمة elevation في DrawLayerModifier إلى shadowElevation ولم تعُد تتحكّم في ترتيب الرسم. تم تغيير ترتيب المَعلمات في DrawShadow: أصبحت قيمة الارتفاع هي الأولى والشكل هو الثاني مع استخدام RectangleShape كقيمة تلقائية. (I20150، b/152417501)

  • تمت إزالة onSizeChange وonPositionChange في Owner. (I5c718)

  • تمت إضافة Constraints2، وهي نسخة من Constraints لا تتوافق إلا مع قيم قيود Int بدلاً من IntPx. ستتم إزالة IntPx وسيتم افتراض أنّ جميع قيود الأعداد الصحيحة هي وحدات بكسل، كما هو الحال في Android.

    • تمت إضافة IntSize أيضًا، والذي سيحلّ محلّ IntPxSize في النهاية. (I4b43a)
  • أصبحت السمة "محاذاة" قابلة للإنشاء باستخدام قيم عشوائية. تمت إضافة عمليات محاذاة أحادية البُعد. (Ia0c05)

  • تقبل السمة alignToSiblings الآن كائن Measured بدلاً من Placeable. (I5788d)

  • (I45f09، b/152842521)

    • تمت إعادة تسمية ScaleFit إلى ContentScale
    • نقلنا ContentScale من وحدة ui-graphics إلى وحدة ui-core لتكون في الوحدة نفسها التي تتضمّن واجهة Alignment API.
    • تمت إعادة تسمية FillMaxDimension إلى Crop
    • تمت إعادة تسمية FillMinDimension إلى Fit
    • تغيير اسم "تعبئة الشاشة" إلى "ملاءمة الشاشة" لتكون أكثر ملاءمة
    • القيم المكافئة لـ ImageView.ScaleType
    • تمت إضافة مستندات تشير إلى أنّ الجمع بين "القص" و"محاذاة إلى الوسط" يحقّق النتيجة نفسها التي يحقّقها ImageView.ScaleType.CENTER_CROP، وأنّ استخدام "الملاءمة" مع "محاذاة إلى الوسط" يحقّق النتيجة نفسها التي يحقّقها ImageView.ScaleType.FIT_CENTER، وأنّ استخدام "الداخل" مع "محاذاة إلى الوسط" يحقّق النتيجة نفسها التي يحقّقها ImageView.ScaleType.CENTER_INSIDE.
  • إتاحة استخدام معدِّلات الرسم مع اللغات التي تُكتب من اليمين إلى اليسار (I0aaf9)

  • تم إصدار واجهة برمجة تطبيقات لتوسيع "طرق عرض Android" من XML. يمكنك الاطّلاع على العرض التوضيحي ViewInCompose لمزيد من التفاصيل. (I42916)

  • تحسين واجهة برمجة التطبيقات DrawModifier API:

    • تم إنشاء نطاق المتلقّي للدالة draw() باسم ContentDrawScope
    • تمت إزالة جميع المَعلمات في draw()
    • تتضمّن DrawScope الواجهة نفسها التي كانت تتضمّنها CanvasScope السابقة
    • يحتوي ContentDrawScope على طريقة drawContent() (Ibaced، b/152919067)
  • تمت إضافة positionInParent وboundsInParent إلى LayoutCoordinates. (Icacdd، b/152735784)

  • أصبح clipToBounds وclipToOutline في DrawLayerModifier وdrawLayer()‎ مضبوطَين تلقائيًا على "خطأ". (I0eb8b، b/152810850)

  • تمت إعادة تسمية LayoutResult إلى MeasureResult. (Id8c68)

  • تمت إضافة LayoutModifier2، وهي واجهة برمجة تطبيقات جديدة لتحديد معدِّلات التنسيق، وتم إيقاف LayoutModifier نهائيًا (If32ac)

  • تم استبدال المعدِّل وعلامة الجمع بدوال إضافية للمصنع (I225e4)

  • تمت إضافة السمتَين translationX/Y لدعم إزاحة قائمة العرض الخاصة بأوامر الرسم لطبقة معيّنة. ويكون ذلك مفيدًا لنقل المحتوى استجابةً للصور المتحركة أو أحداث اللمس. (I8641c)

  • تمت إضافة المَعلمتَين pivotX وpivotY إلى واجهات برمجة التطبيقات الخاصة بالطبقات لتتيحا إمكانية التدوير والتوسيع أو التصغير حول نقطة معيّنة في إحدى الطبقات (Icf7c3)

  • أضِف OnPositionedModifier وOnChildPositionedModifier لاستبدال الدالتَين القابلتَين للإنشاء OnPositioned وOnChildPositioned. (I2ec8f)

  • تمت إضافة LayerModifier، وهو معدِّل يتيح إضافة RenderNode إلى Layout. ويتيح ضبط القص والشفافية والتدوير والتوسيع والظلال. سيحلّ هذا العنصر محلّ RepaintBoundary. (I7100d، b/150774014)

  • تم نشر اتجاه التنسيق من عقدة تصميم العنصر الرئيسي إلى العناصر الفرعية. تمت إضافة أداة تعديل اتجاه التنسيق. (I3d955)

  • يتيح مكوّن "الحزمة" اتجاه الكتابة من اليمين إلى اليسار (Ic9e00)

  • توفير الدعم الأوّلي للغة من اليمين إلى اليسار في تصميم Compose (Ia5519)

  • تم دمج Density وDensityScope في واجهة واحدة. بدلاً من ambientDensity()، يمكنك الآن استخدام DensityAmbient.current. بدلاً من withDensity(density)‎، استخدِم with(density)‎ (I11cb1)

  • تم تغيير LayoutCoordinates لجعل providedAlignmentLines Set بدلاً من Map، ولجعل LayoutCoordinates تنفّذ عامل التشغيل get() بدلاً من ذلك لاسترداد قيمة. يسهّل ذلك على المعدِّلين تعديل قيمة واحدة أو أكثر من المجموعة بدون إنشاء مجموعة جديدة لكل معدِّل. (I0245a)

  • لم يعُد LayoutCoordinates يتضمّن السمة position. لا تكون السمة position منطقية عند مراعاة LayoutModifiers أو التدوير أو تغيير الحجم. بدلاً من ذلك، على المطوّرين استخدام parentCoordinates وchildToLocal() لاحتساب عملية التحويل من LayoutCoordinate إلى أخرى.

    تستخدِم LayoutCoordinates السمة IntPxSize للمقاس بدلاً من PxSize. تستخدِم التصميمات أحجامًا عددية بالبكسل، لذا يجب أن تستخدِم جميع أحجام التصميمات أعدادًا صحيحة وليس قيمًا عشرية. (I9367b)

  • تحسينات على مساحة واجهة برمجة التطبيقات الخاصة بالقيود (I0fd15)

  • تم إنشاء واجهة برمجة التطبيقات CanvasScope التي تتضمّن عنصر Canvas لعرض مساحة واجهة برمجة تطبيقات للرسم بدون حالة وتصريحية. يتم تضمين عمليات التحويل ضمن نطاق جهاز الاستقبال الخاص بها، كما يتم تحديد نطاق معلومات الحجم ضمن حدود الحواف الداخلية المقابلة. ولا يتطلّب ذلك من المستهلك الاحتفاظ بكائن حالة Paint الخاص به لتحديد عمليات الرسم.

    • تمت إضافة CanvasScopeSample، كما تم تعديل التطبيق التجريبي ليشمل عرضًا توضيحيًا للرسومات التعريفية (Ifd86d).
  • تمت إزالة واجهة برمجة التطبيقات MaskFilter غير المستخدَمة لأنّ استخدامها محدود وغير محسّن لتسريع الأجهزة في معظم حالات الاستخدام (I54f76).

  • تم نقل RectangleShape من androidx.ui.foundation.shape.* إلى androidx.ui.graphics.* (Ia74d5، b/154507984)

  • تم استبدال جميع استخدامات Color القابلة للتصغير في واجهة برمجة التطبيقات بقيم غير قابلة للتصغير، وتم استخدام Color.Unset بدلاً من القيمة الخالية (Iabaa7)

  • إضافة مَعلمة rect اختيارية إلى ImagePainter لإتاحة رسم قسم فرعي من ImageAsset الأساسي (I0ea9e)

  • تمت إضافة "إزالة اللون" لتمثيل قيمة غير مضبوطة بدون وضع الألوان في مربّعات. (If901a)

  • تمت إضافة طريقتَي Canvas.rotate وCanvas.scale إلى الإضافات لاستهلاك إحداثيات نقطة الارتكاز الاختيارية للتحويلات. يتم ضبط هذه القيم تلقائيًا على الزاوية العلوية اليسرى من ترجمة لوحة العرض الحالية.

    تم أيضًا نقل Canvas.rotateRad ليكون طريقة إضافة للحفاظ على الاتساق (Ibaca6)

  • تم إنشاء واجهة برمجة التطبيقات PixelMap API لتتيح الاستعلام عن معلومات البكسل من ImageAsset. (I69ad6)

  • تمت إعادة تسمية toFrameworkRect/toFrameworkRectF إلى toAndroidRect/toAndroidRectF لتتوافق مع نظام التسمية لعمليات تحويل العناصر بين Compose وواجهات برمجة تطبيقات Android التي تم إنشاؤها استنادًا إليها. تم أيضًا تعديل المستندات المتعلقة بواجهات برمجة التطبيقات هذه (I86337).

  • تمت إضافة VectorPainter API لاستبدال واجهة برمجة التطبيقات الحالية الخاصة بالتركيب الفرعي للرسومات المتجهة. نتيجة التركيب الفرعي هي كائن VectorPainter بدلاً من DrawModifier. تم إيقاف الدوال البرمجية السابقة القابلة للإنشاء DrawVector نهائيًا واستبدالها بـ VectorPainter.

    تمت إعادة تسمية واجهة برمجة التطبيقات Image(Painter) إلى PaintBox(Painter) تم إنشاء عنصر Vector قابل للإنشاء يعمل مثل العنصر Image القابل للإنشاء، ولكن مع VectorAsset بدلاً من ImageAsset (I9af9a، b/149030271)

  • تمت إعادة تسمية Image إلى ImageAsset للتمييز بشكل أفضل بين بيانات Image وImage القابل للإنشاء القادم الذي سيتم استخدامه للمشاركة في التصميم ورسم المحتوى. _Body:تم إنشاء طريقة ملحقة في android.graphics.Bitmap باسم Bitmap.asImageAsset() لإنشاء مثيل من ImageAsset مفيد لدمج تطوير تطبيقات Android التقليدية مع إطار عمل Compose (Id5bbd)

  • تمت إضافة TextDirection.Content (I48f36)

  • تمت إضافة عامل التشغيل TextDecoration.plus (I0ad1a)

  • تمت إزالة Force من قيم تعداد TextDirectionAlgorithm (Icc944)

  • تمت إعادة تسمية TextDirectionAlgorithm إلى TextDirection (I75ce8)

  • تنفيذ LongPressAndDrag لتحديد TextField (I17919)

  • تمت إضافة AnnotatedString.getStringAnnotations التي تعرض جميع التعليقات التوضيحية ضمن النطاق. (I1fa00)

  • تم تغيير اسم الحزمة لكلّ من Locale وLocaleList من androidx.ui.text إلى androidx.ui.intl (I8132c)

  • يحتوي مؤشر TextField على صورة متحركة وامضة (Id10a7)

  • تغيير في واجهة برمجة التطبيقات: تمت إعادة تسمية AnnotatedString(builder: Builder) إلى annotatedString(builder: Builder). (Ia6377)

  • تغيير في واجهة برمجة التطبيقات: تمت إعادة تسمية AnnotatedString.Item إلى AnnotatedString.Range. (I2d44d)

  • تمت إعادة تسمية AnnotatedString.Builder.addAnnotationString إلى addStringAnnotation. (I5059e)

  • أصبح بإمكانك الآن إخفاء لوحة المفاتيح الافتراضية أو إظهارها باستخدام SoftwareKeyboardController الذي يتم توفيره من خلال معاودة الاتصال onTextInputStarted ‎ (I8dc44 وb/151860051).

  • تمت إضافة عامل التشغيل "زائد" إلى (Text/Paragraph/Span)Style الذي يتم تفويضه إلى الدالة merge(). (Ia1add)

  • لم يعُد FontWeight.lerp يلتصق. ولا يزال هذا النوع من الفئات يُعدّ فئة بيانات. (I521c2)

  • أصبح منشئ FontWeight متاحًا للجميع، ولم يعُد فئة بيانات. (Id6b1f)

  • إضافة getLineStart وgetLineEnd وgetEllipsisOffset وgetEllipsisCount إلى TextLayoutResult (Ibc801)

  • تمت إعادة تسمية وحدة ui-text لتصبح ui-text-core (I57dec)

  • تمت إزالة فئة Size غير المستخدَمة لأنّ هناك فئة Size مكرّرة في وحدة ui-geometry يتم استخدامها. (I1b602)

  • تمت إضافة AdapterList، وهو مكوّن قائمة قابلة للتمرير يعرض العناصر المرئية فقط. تشمل المشاكل المعروفة حاليًا أنّه عمودي فقط ولا يتعامل بشكل كامل مع جميع حالات التغييرات التي تطرأ على العناصر التابعة له. (Ib351b)

  • إضافة معلَمات الحشو والحدود والشكل والخلفية إلى المربّع (I05027، b/148147281)

إصلاح الأخطاء

  • تمت إعادة تسمية دالة onFocusChange في حقول النص إلى onFocusChanged (Ida4a1)
  • تم إيقاف VerticalScroller وHoriziontalScroller نهائيًا. استخدِم ScrollableColumn وScrollableRow للحصول على تجربة مدمجة مع سلوك Column/Row ومَعلماتهما، أو Modifier.verticalScroll وModifier.horizontalScroll على العنصر الخاص بك. وبالمثل، تم إيقاف ScrollerPosition نهائيًا واستبداله بـ ScrollState (I400ce وb/157225838 وb/149460415 وb/154105299).
  • تمت إعادة تسمية runOnIdleCompose إلى runOnIdle (I83607)
  • تمت إعادة تسمية العديد من واجهات برمجة التطبيقات الخاصة بالاختبار لتكون أكثر سهولة. تمت إعادة تسمية جميع واجهات برمجة التطبيقات findXYZ إلى onNodeXYZ. تمت إعادة تسمية جميع واجهات برمجة التطبيقات doXYZ إلى performXYZ. (I7f164)
  • يمكن الآن إنشاء واجهة مستخدم Compose داخل ViewGroups بدون الحاجة إلى إنشاء تركيبة جديدة. راجِع ViewInteropDemo للاطّلاع على مثال. (I9ab0b، b/160455080)
  • تمت إضافة sortWith وremoveRange إلى MutableVector (Icccf7)
  • تنفيذ "مقابض تحديد السحب" لتغيير التحديد في TextField (I27032)
  • تمت إزالة فئة Shader المضمّنة التي كانت تتضمّن فئة NativeShader المتوقّعة، وتمت إعادة تسمية NativeShader إلى Shader. لم يضِف الصف المضمّن Shader أي قيمة إلى مساحة واجهة برمجة التطبيقات، وكان صفًا مضمّنًا، لذا استخدِم الصف NativeShader مباشرةً. (I25e4d)
  • تمت إعادة تصميم PainterModifier كي لا يوفّر التحجيم استنادًا إلى القيود المحدّدة ومَعلمة ContentScale. يجب أن تعمل عمليات تنفيذ Painter على تغيير حجم محتوى الرسم بنفسها استنادًا إلى حجم DrawScope الذي يتم الرسم فيه.

    تم إصلاح المشكلة التي كان يتم فيها تحديد حجم خريطة البت المخزّنة مؤقتًا في VectorPainter على أساس الحجم التلقائي بدلاً من الحجم المحدّد للرسم.

    تم تعديل ImagePainter لتغيير حجم المحتوى بدلاً من الاعتماد على PainterModifier لتنفيذ ذلك نيابةً عنه. (I6ba90)

  • إضافة دالة withFrameNanos ذات المستوى الأعلى لتحديد توقيت الصورة المتحركة (Ie34c5)

  • تم إيقاف التعليق التوضيحي ‎@Untracked نهائيًا. استبدِلها بـ ‎ @ComposableContract(tracked=false)‎ (Id211e)

  • تم إيقاف androidx.ui.foundation.TextFieldValue وandroidx.ui.input.EditorValue نهائيًا. تم أيضًا إيقاف دوال TextField وFilledTextField وCoreTextField القابلة للإنشاء نهائيًا، والتي تستخدم هذا النوع. يُرجى استخدام androidx.ui.input.TextFieldValue بدلاً من ذلك (I4066d، b/155211005)

  • تم إصلاح المشكلة التي كان يؤدي فيها إرسال بيانات إدخال المؤشر إلى حدوث تعطُّل إذا تمت إزالة PointerInputFilters من خلال التركيب الفرعي أثناء الإرسال. نودّ إعلامك بأنه تمّ الآن إصلاح هذه المشكلة. (I1f48b، b/157998762)

  • تم إصلاح المشكلة التي كانت تؤدي إلى تعطُّل التطبيق عند إزالة PointerInputFilters من خلال التركيب الفرعي أثناء الإرسال. نودّ إعلامك بأنه تمّ الآن إصلاح هذه المشكلة. (Iab398، b/157998762)

  • تمت إعادة تصميم فئة Radius لتصبح فئة مضمّنة. تمت إزالة طرق إنشاء العناصر المصاحبة واستبدالها بدالة إنشائية مع مَعلمة تلقائية ليكون نصف القطر على المحور y مطابقًا لنصف القطر الإلزامي على المحور x.

    تم تعديل DrawScope.drawRoundRect لاستخدام مَعلمة Radius واحدة بدلاً من قيمتَين منفصلتَين من النوع float للنطاق الجغرافي على طول المحورَين x وy (I46d1b)

  • لم يعُد العنصر القابل للإنشاء Recompose تجريدًا مفيدًا. يجب أن تحدث معظم عمليات إعادة التركيب نتيجة لعمليات تعيين MutableState. بالنسبة إلى أي شيء آخر، يُنصح باستخدام الدالة invalidate لتفعيل إعادة إنشاء النطاق الحالي. (Ifc992)

  • تم استبدال استخدام فئة Px في العديد من فئات Compose كجزء من عملية إعادة البناء الكبيرة للاعتماد فقط على Dp والأنواع الأساسية لمعلَمات البكسل (Iede0b)

  • تغيير استراتيجية إنشاء الرموز البرمجية لمترجم Compose قبل إجراء هذا التغيير، كان برنامج التجميع Compose يحوّل طلبات الدوال القابلة للإنشاء. من خلال هذا التغيير، أصبحنا الآن نحوّل نص الدالة المركّبة ونترك موقع الاستدعاء بدون تغيير (في الغالب).

    وهذا يعني أنّ معظم منطق التواصل مع وقت تشغيل Compose يحدث في بداية نص الدالة، بدلاً من موقع الاستدعاء.

    يجب أن يكون هذا التغيير متوافقًا مع المصدر لجميع استخدامات الإنشاء. لن يحتاج معظم مستخدمي Compose إلى تعديل أي رمز نتيجةً لهذا التغيير.

    ولإتاحة هذا العمل، تم تغيير توقيع JVM لجميع الدوال القابلة للإنشاء. يتم تحويل الدالة المركّبة التي تقبل مَعلمة واحدة إلى دالة تقبل 3 مَعلمات، وتكون المَعلمات الإضافية هي Composer، وهو عدد صحيح "مفتاح"، وعدد صحيح لقناع البت يُستخدَم لنقل البيانات الوصفية من خلال عمليات الاستدعاء.

    تحوّل Compose الآن أيضًا الوسيطات التلقائية إلى دالة مركّبة. ويتم ذلك بدون إضافة حمل زائد اصطناعي إضافي تلقائي للوظيفة نفسها، لذا سيؤدي هذا التغيير إلى تحديد عدد أقل من الوظائف.

    في ما يلي التغييرات المعروفة والمقصودة في السلوك الناتجة عن ذلك:

    1. سيتم تخطّي بعض المكالمات التي لم يكن من الممكن تخطّيها سابقًا
    2. أصبحت التعبيرات القابلة للإنشاء في تعبيرات الوسيطة التلقائية متاحة الآن ويمكن التعامل معها بشكل صحيح

    تضمّنت هذه التعديلات بعض التحسينات: 1. يتم نشر نتيجة مقارنات المَعلمات من خلال الرسم البياني لعمليات الاستدعاء إلى الدوال الأخرى القابلة للإنشاء. سيؤدي ذلك إلى تقليل عمليات المقارنة في وقت التشغيل، وتقليل حجم جدول الفتحات، بالإضافة إلى تخطّي المزيد من الدوال القابلة للإنشاء التي لم يتم تخطّيها سابقًا. لم يعُد يتمّ تخزين المَعلمات التي يتمّ تحديد أنّها "ثابتة" في وقت الترجمة أو مقارنتها في وقت التشغيل. يقلّل ذلك من عدد عمليات المقارنة ويقلّل من حجم جدول الفتحات. 3- يتم استخدام بنية التحكّم في سير عمل نص الدوال لتقليل عدد المجموعات التي يتم إنشاؤها. يؤدي ذلك إلى تقليل حجم جدول المواضع، ما يقلّل من الجهد المطلوب من وقت التشغيل 4. لا يتم تضمين مَعلمات الإرسال والاستقبال غير المستخدَمة للدوال في تحديد ما إذا كان يمكن تخطّي الدالة إذا لم يتم استخدامها داخل نص الدالة.

    كانت معظم التغييرات غير المتوافقة مخصّصة لواجهات برمجة التطبيقات التي يستهدفها المحوّل البرمجي مباشرةً، ولن يتأثّر الاستخدام العادي لـ Compose بما يلي: 1. تمت إزالة Composer::startExpr 2. تمت إزالة Composer::endExpr 3. تم إيقاف Composer::call نهائيًا 4. تمت إزالة عمليات التحميل الزائد غير المتغيرة لـ key. استخدِم الإصدار vararg من الآن فصاعدًا. 5. تم إيقاف التعليق التوضيحي "مهم" نهائيًا. استخدِم key كبديل. 6. تم تغيير ScopeUpdateScope::updateScope ليتوقّع Function3 بدلاً من Function1 7. تم تعديل restartableFunction وrestartableFunctionN لتضمين مَعلمات إضافية في وقت الترجمة (I60756، b/143464846)

  • تمت إزالة معدِّلات LayoutAlign المتوقّفة نهائيًا. (I10877)

  • تمت إزالة RepaintBoundary واستخدام DrawLayerModifier بدلاً منها (I00aa4)

  • يحتوي كل من Button وFloatingActionButton وClickable الآن على المَعلمة enabled المنفصلة. تمت إعادة تسمية بعض المَعلمات في الزر أو إعادة ترتيبها. (I54b5a)

  • تم استبدال ButtonStyle بدوال مميزة وإزالة التحميل الزائد للنص (السلسلة). اطّلِع على نماذج معدَّلة للحصول على معلومات حول الاستخدام. (If63ab، b/146478620، b/146482131)

  • تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات ambients API راجِع مستندات السجلّ وAmbient<T> للحصول على التفاصيل (I4c7ee، b/143769776)

  • تم تغيير سلوك TextDirection التلقائي ليتم تحديده حسب LayoutDirection، أي إذا كان LayoutDirection من اليمين إلى اليسار، سيكون TextDirection التلقائي من اليمين إلى اليسار. كانت القيمة السابقة هي TextDirection.ContentOrLtr/Rtl (I4e803)

  • إصلاح الخطأ: عند تضمين وزن الخط ونمطه في AnnotatedString، لا يتم عرض النص بشكل صحيح. (I77a9d)

  • تضيف هذه السمة المَعلمات الشائعة الاستخدام إلى Text(). إذا كنت تنشئ حاليًا نمط نص محليًا لتمرير عدد صغير من هذه المَعلمات، مثل Text(style = TextStyle(textAlign = TextAlign.Center))، يمكنك الآن تقديم المَعلمات مباشرةً: Text(textAlign = TextAlign.Center) (I82768)

  • تمت إعادة تسمية الوحدة ui-android-text إلى ui-text-android (I68cbe)