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

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

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

بدءًا من الإصدار 12 من نظام 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. التطبيق المصغّر في المظهر الداكن

.

التوافق مع الأنظمة القديمة للألوان الديناميكية

لا تتوفّر الألوان الديناميكية إلا على الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث. لتقديم مظهر مخصّص للإصدارات الأقدم، أنشئ مظهرًا تلقائيًا باستخدام ألوانك المخصّصة ومؤهّل جديد (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" عرض التطبيقات المصغّرة استجابةً للطلبات الصوتية ذات الصلة التي يوجّهها المستخدم. من خلال ضبط التطبيقات المصغّرة للردّ على المهام المضمّنة (BIIs)، يمكن لتطبيقك عرض التطبيقات المصغّرة بشكل استباقي على مساحات عرض "مساعد Google"، مثل Android و Android Auto. يمكن للمستخدمين تثبيت التطبيقات المصغّرة التي يعرضها "مساعد Google" في مشغّل التطبيقات، ما يشجع على التفاعل في المستقبل.

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

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

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

يتيح لك نظام التشغيل Android 12 إضافة معاينات التطبيقات المصغّرة الموسّعة و أوصافها. يتيح لك نظام التشغيل Android 15 تحسين تجربت اختيار التطبيقات المصغّرة لتطبيقك من خلال معاينات التطبيقات المصغّرة التي يتم إنشاؤها.

لتحسين تجربة أداة اختيار التطبيقات المصغّرة في تطبيقك، قدِّم معاينة لتطبيق مصغّر تم إنشاؤه على أجهزة Android 15 والإصدارات الأحدث، ومعاينة لتطبيق مصغّر مكبَّر (من خلال تحديد previewLayout) لأجهزة Android 12 وحتى Android 14، وpreviewImage للإصدارات الأقدم.

إضافة معاينات التطبيقات المصغّرة التي تم إنشاؤها إلى أداة اختيار التطبيقات المصغّرة

يجب أن تضبط التطبيقات قيمة compileSdk على 35 أو إصدار أحدث فيملفbuild.gradle الوحدة لتكون قادرة على توفيرRemoteViews لأداة اختيار التطبيقات المصغّرة على أجهزة Android 15 أو الإصدارات الأحدث. وهذا يعني أنّ التطبيقات يمكنها تعديل المحتوى في أداة الاختيار ليكون أكثر تمثيلاً لما يراه المستخدم.

يمكن للتطبيقات استخدام الطريقتَين AppWidgetManager وsetWidgetPreview و getWidgetPreview لتعديل مظهر التطبيقات المصغّرة باستخدام معلومات محدّثة ومخصّصة.

إنشاء معاينة معدَّلة باستخدام Jetpack Glance

Glance.compose يُشغِّل تركيبة واحدة، وبالتالي لا يتم استخدام أيّ دوال تعليق أو عمليات تدفق أو طلبات غير متزامنة مشابهة في نص العنصر القابل للتجميع. بدلاً من ذلك، يجب استخدام بيانات ثابتة.

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

AppWidgetManager.getInstance(appContext).setWidgetPreview(
    ComponentName(
        appContext,
        ExampleAppWidgetReceiver::class.java
    ),
    AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
    ExampleAppWidget().compose(
        context = appContext
    ),
)

إنشاء معاينة معدَّلة بدون Jetpack Glance

يمكنك استخدام RemoteViews بدون ميزة "نظرة سريعة". يحمِّل المثال التالي مورد تنسيق شاشة widget بتنسيق XML ويضبطه كمعاينة. يجب ضبط الإصدار compileSdk على 35 أو إصدار أحدث لكي يظهر setWidgetPreview كأحد methods في هذا المقتطف.

AppWidgetManager.getInstance(appContext).setWidgetPreview(
    ComponentName(
        appContext,
        ExampleAppWidgetReceiver::class.java
    ),
    AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
    RemoteViews("com.example", R.layout.widget_preview)
)

إضافة معاينات قابلة للتكبير/التصغير للتطبيقات المصغّرة إلى أداة اختيار التطبيقات المصغّرة

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

لتنفيذ معاينات التطبيقات المصغّرة القابلة للتغيير، استخدِم سمة previewLayout للعنصر appwidget-provider لتوفير تنسيق XML بدلاً من ذلك:

<appwidget-provider
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>

ننصحك باستخدام التنسيق نفسه المُستخدَم في التطبيق المصغّر الفعلي، مع قيم تلقائية أو اختبارية واقعية. تستخدم معظم التطبيقات previewLayout وinitialLayout نفسهما. للحصول على إرشادات حول إنشاء تنسيقات معاينة دقيقة، اطّلِع على القسم التالي في هذه الصفحة.

ننصحك بتحديد السمتَين previewLayout وpreviewImage، كي يتمكّن تطبيقك من استخدام previewImage بدلاً من previewLayout إذا كان جهاز المستخدم لا يتيح استخدام previewLayout. تكون لسمة previewLayout الأولوية على سمة previewImage.

الطرق المقترَحة لإنشاء معاينات دقيقة

لتنفيذ معاينات أدوات قابلة للتوسيع، استخدِم السمة previewLayout للعنصر appwidget-provider لتوفير تنسيق XML:

<appwidget-provider
    ...
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
صورة تعرض معاينة تطبيق مصغّر
الشكل 3. معاينة التطبيق المصغّر التي تظهر تلقائيًا في منطقة 3×3 ولكن يمكن أن تلائم منطقة 3×1 بسبب تنسيق XML

لعرض معاينة دقيقة، يمكنك توفير القيم التلقائية لتنسيق التطبيقات المصغّرة الفعلي مباشرةً من خلال إكمال الخطوات التالية:

  • ضبط android:text="@string/my_widget_item_fake_1" لـ TextView العناصر

  • ضبط صورة أو رمز تلقائي أو عنصر نائب، مثل android:src="@drawable/my_widget_icon"، لمكوّنات ImageView

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

للحصول على الأساليب المقترَحة للمعاينات الأكثر تعقيدًا التي تحتوي على ListView أو GridView أو StackView، اطّلِع على إنشاء معاينات دقيقة تتضمّن عناصر ديناميكية للاطّلاع على التفاصيل.

التوافق مع الإصدارات السابقة من خلال معاينات التطبيقات المصغّرة القابلة للتكبير/التصغير

للسماح لأدوات اختيار التطبيقات المصغّرة على الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم بعرض معاينات لتطبيقك المصغّر، حدِّد السمة previewImage.

إذا غيّرت مظهر التطبيق المصغّر، عدِّل صورة المعاينة.

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

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

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

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

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

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

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

قدِّم وصفًا لأداة التطبيقات المصغّرة باستخدام سمة 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، يمكنك الاستفادة من عدة methods 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);