تحسين تطبيقك المصغّر

تجربة طريقة Compose
‫Jetpack Compose هي مجموعة أدوات واجهة المستخدِم المقترَحة لنظام Android. تعرَّف على كيفية إنشاء التطبيقات المصغّرة باستخدام واجهات برمجة التطبيقات بنمط Compose.

تتضمّن هذه الصفحة تفاصيل التحسينات الاختيارية للتطبيقات المصغّرة التي تتوفّر بدءًا من Android 12 (مستوى واجهة برمجة التطبيقات 31). هذه الميزات اختيارية، ولكن من السهل تنفيذها وتحسين تجربة المستخدمين مع التطبيقات المصغّرة.

استخدام الألوان الديناميكية

بدءًا من Android 12، يمكن للتطبيق المصغّر استخدام ألوان مظهر الجهاز للأزرار والخلفيات والمكوّنات الأخرى. ويوفّر ذلك انتقالات أكثر سلاسة واتساقًا بين التطبيقات المصغّرة المختلفة.

هناك طريقتان لاستخدام الألوان الديناميكية:

  • استخدام المظهر التلقائي للنظام (@android:style/Theme.DeviceDefault.DayNight) في التنسيق الأساسي

  • استخدام مظهر Material 3 (Theme.Material3.DynamicColors.DayNight) من مكتبة Material Components لنظام Android، والذي يتوفّر بدءًا من الإصدار 1.6.0 من Material Components لنظام Android.

بعد ضبط المظهر في التنسيق الأساسي، يمكنك استخدام سمات الألوان الشائعة في التنسيق الأساسي أو أي من العناصر التابعة له لاختيار الألوان الديناميكية.

في ما يلي بعض الأمثلة على سمات الألوان التي يمكنك استخدامها:

  • ?attr/primary
  • ?attr/primaryContainer
  • ?attr/onPrimary
  • ?attr/onPrimaryContainer

في المثال التالي الذي يستخدم مظهر Material 3، يكون لون مظهر الجهاز "أرجوانيًا". يتم ضبط لون التمييز وخلفية التطبيق المصغّر ليناسبا الوضعَين الفاتح والداكن، كما هو موضّح في الشكلَين 1 و2.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="?attr/colorPrimaryContainer"
  android:theme="@style/Theme.Material3.DynamicColors.DayNight">

  <ImageView
    ...
    app:tint="?attr/colorPrimaryContainer"
    android:src="@drawable/ic_partly_cloudy" />

    <!-- Other widget content. -->

</LinearLayout>
التطبيق المصغّر في المظهر الفاتح
الشكل 1 التطبيق المصغّر في المظهر الفاتح
التطبيقات المصغّرة في المظهر الداكن
الشكل 2 التطبيق المصغّر في المظهر الداكن

التوافق مع الإصدارات السابقة للألوان الديناميكية

لا تتوفّر الألوان الديناميكية إلا على الأجهزة التي تعمل بنظام Android 12 أو إصدارات أحدث. لتوفير مظهر مخصّص للإصدارات الأقدم، يمكنك إنشاء مظهر تلقائي باستخدام ألوانك المخصّصة ومحدِّد جديد (values-v31) باستخدام سمات المظهر التلقائي.

في ما يلي مثال على استخدام مظهر Material 3:

/values/styles.xml

<resources>
  <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight">
    <!-- Override default colorBackground attribute with custom color. -->
    <item name="android:colorBackground">@color/my_background_color</item>

    <!-- Add other colors/attributes. -->

  </style>
</resources>

/values-v31/styles.xml

<resources>
  <!-- Do not override any color attribute. -->
  <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" />
</resources>

/layout/my_widget_layout.xml

<resources>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:background="?android:attr/colorBackground"
    android:theme="@style/MyWidgetTheme" />
</resources>

تفعيل الدعم الصوتي

مهامّ في التطبيقات تتيح لمساعد Google عرض التطبيقات المصغّرة استجابةً للأوامر الصوتية ذات الصلة التي يوجّهها المستخدم. من خلال ضبط التطبيق المصغّر للاستجابة للأهداف المضمّنة (BII)، يمكن لتطبيقك عرض التطبيقات المصغّرة بشكل استباقي على أسطح "مساعد Google"، مثل Android وAndroid Auto. يمكن للمستخدمين تثبيت التطبيقات المصغّرة التي يعرضها "مساعد Google" على مشغّل التطبيقات، ما يشجّع على التفاعل في المستقبل.

على سبيل المثال، يمكنك ضبط التطبيق المصغّر الخاص بملخّص التمارين في تطبيقك الرياضي لتنفيذ الأوامر الصوتية التي يوجّهها المستخدم والتي تؤدي إلى تفعيل GET_EXERCISE_OBSERVATION الهدف المضمّن. يعرض "مساعد Google" التطبيق المصغّر بشكل استباقي عندما يفعّل المستخدمون هذا الهدف المضمّن من خلال توجيه طلبات مثل "Ok Google، كم عدد الأميال التي ركضتها هذا الأسبوع على ExampleApp؟"

تتوفّر عشرات الأهداف المضمّنة التي تغطي عدة فئات من تفاعلات المستخدمين، ما يتيح لأي تطبيق Android تقريبًا تحسين تطبيقاته المصغّرة للاستخدام الصوتي. للبدء، يُرجى الاطّلاع على مقالة دمج "مهامّ في التطبيقات" مع تطبيقات Android المصغّرة.

إضافة اسم إلى التطبيق المصغّر

يجب أن يكون للتطبيقات المصغّرة اسم فريد عند عرضها في أداة اختيار التطبيقات المصغّرة.

يتم تحميل أسماء التطبيقات المصغّرة من سمة label لعنصر receiver في التطبيق المصغّر في ملف AndroidManifest.xml.

<receiver
    ….
   android:label="Memories">
     ….
</receiver>

إضافة وصف للتطبيق المصغّر

بدءًا من Android 12، يمكنك تقديم وصف لأداة اختيار التطبيقات المصغّرة لعرضه لتطبيقك المصغّر.

صورة تعرض أداة اختيار الأدوات تعرض أداة ووصفها
الشكل 3. نموذج لأداة اختيار التطبيقات المصغّرة يعرض تطبيقًا مصغّرًا ووصفه

يمكنك تقديم وصف لتطبيقك المصغّر باستخدام سمة description لعنصر &lt;appwidget-provider&gt;:

<appwidget-provider
    android:description="@string/my_widget_description">
</appwidget-provider>

يمكنك استخدام السمة descriptionRes في الإصدارات السابقة من Android، ولكن تتجاهلها أداة اختيار التطبيقات المصغّرة.

تفعيل الانتقالات الأكثر سلاسة

بدءًا من Android 12، توفّر مشغّلات التطبيقات انتقالاً أكثر سلاسة عندما يفتح المستخدم تطبيقك من تطبيق مصغّر.

لتفعيل هذا الانتقال المحسّن، استخدِم @android:id/background أو android.R.id.background لتحديد عنصر الخلفية:

// Top-level layout of the widget.
<LinearLayout
    android:id="@android:id/background">
</LinearLayout>

يمكن لتطبيقك استخدام @android:id/background على الإصدارات السابقة من Android بدون حدوث أي مشاكل، ولكن يتم تجاهله.

استخدام التعديل في وقت التشغيل لـ RemoteViews

بدءًا من Android 12، يمكنك الاستفادة من عدة طرق RemoteViews تتيح تعديل سمات RemoteViews في وقت التشغيل. يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات RemoteViews API للحصول على القائمة الكاملة بالطرق المضافة.

يوضّح مثال الرمز البرمجي التالي كيفية استخدام بعض هذه الطرق.

Kotlin

// Set the colors of a progress bar at runtime.
remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList())

// Specify exact sizes for margins.
remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP)

Java

// Set the colors of a progress bar at runtime.
remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList());

// Specify exact sizes for margins.
remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP);