تتضمّن هذه الصفحة تفاصيل حول تحسينات التطبيقات المصغّرة الاختيارية المتاحة بدءًا من الإصدار 12 من Android (المستوى 31 من واجهة برمجة التطبيقات). هذه الميزات اختيارية، ولكن من السهل تنفيذها وتحسين تجربة المستخدمين مع التطبيقات المصغّرة.
استخدام ألوان ديناميكية
بدءًا من الإصدار 12 من نظام Android، يمكن للتطبيق المصغّر استخدام ألوان مظهر الجهاز للأزرار والخلفيات والمكونات الأخرى. ويؤدي ذلك إلى توفير انتقالات أكثر سلاسة وتناسقًا في التطبيقات المصغّرة المختلفة.
هناك طريقتان لتطبيق ألوان ديناميكية:
استخدِم المظهر التلقائي للنظام (
@android:style/Theme.DeviceDefault.DayNight
) في تنسيق الجذر.استخدِم مظهر Material 3 (
Theme.Material3.DynamicColors.DayNight
) من مكتبة Material Components لنظام Android المتوفّرة اعتبارًا من الإصدار Material Components لنظام Android v1.6.0.
بعد ضبط المظهر في تنسيق الجذر، يمكنك استخدام سمات الألوان الشائعة في الجذر أو أيّ من عناصره الفرعية لاختيار الألوان الديناميكية.
في ما يلي بعض الأمثلة على سمات اللون التي يمكنك استخدامها:
?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>


التوافق مع الأنظمة القديمة للألوان الديناميكية
لا تتوفّر الألوان الديناميكية إلا على الأجهزة التي تعمل بالإصدار 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>

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

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