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

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

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

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

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

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

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

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

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

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

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

نقترح تحديد السمتَين previewLayout وpreviewImage ليتمكّن تطبيقك من استخدام previewImage إذا كان جهاز المستخدم لا يتيح تشغيل 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، يمكنك الاطّلاع على إنشاء معاينات دقيقة تحتوي على عناصر ديناميكية لمعرفة التفاصيل.

التوافق مع الأنظمة القديمة مع معاينات التطبيقات المصغّرة القابلة للتوسّع

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

في حال تغيير مظهر التطبيق المصغّر، يمكنك تعديل صورة المعاينة.

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

بدءًا من الإصدار 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

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

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

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);