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

تتضمّن هذه الصفحة تفاصيل حول التحسينات الاختيارية على التطبيقات المصغّرة المتوفّرة. بدءًا من نظام التشغيل 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. تطبيق مصغّر بالمظهر الداكن

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

لا تتوفّر الألوان الديناميكية إلا على الأجهزة التي تعمل بنظام التشغيل 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 3- يعرض "مساعد Google" تطبيقك المصغّر بشكل استباقي عندما يشغّل المستخدمون طريقة BII هذه من خلال من خلال تقديم طلبات مثل: "Ok Google، كم ميلاً جريت هذا الأسبوع في ExampleApp؟"

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

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

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

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

بدءًا من نظام التشغيل Android 12، سيتم عرض معاينة التطبيق المصغّر في يكون منتقي الأدوات قابلاً للتطوير. تقدمه كتنسيق 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 .

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

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

بدءًا من الإصدار 12 من نظام التشغيل Android، قدِّم وصفًا للتطبيق المصغّر المنتقي الذي سيتم عرضه في التطبيق المصغّر.

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