پیش نمایش ویجت های تولید شده به شما این امکان را می دهد که پیش نمایش های پویا و شخصی سازی شده ای برای ویجت های خود ایجاد کنید که به طور دقیق نحوه نمایش آنها را در صفحه اصلی کاربر نشان می دهد. آنها از طریق یک push API ارائه می شوند، به این معنی که برنامه شما پیش نمایش را در هر نقطه از چرخه عمر خود بدون دریافت درخواست صریح از میزبان ویجت ارائه می دهد.
برای بهبود تجربه انتخابگر ویجت برنامه خود، یک پیشنمایش ویجت تولید شده در دستگاههای Android 15 و جدیدتر، یک پیشنمایش ویجت مقیاسشده (با مشخص کردن یک previewLayout
) برای دستگاههای Android 12 تا Android 14، و یک previewImage
برای نسخههای قبلی ارائه دهید.
برای اطلاعات بیشتر، برنامه خود را با بهروزرسانیها و ویجتهای زنده در YouTube غنیسازی کنید .
برنامه خود را برای پیش نمایش ویجت های ایجاد شده تنظیم کنید
برای نمایش پیشنمایشهای ویجت تولید شده در دستگاه Android 15 یا بالاتر، ابتدا مقدار compileSdk
را روی 35 یا بالاتر در فایل build.gradle
ماژول تنظیم کنید تا توانایی ارائه RemoteViews
به انتخابگر ویجت را داشته باشید.
سپس برنامهها میتوانند از setWidgetPreview
در GlanceAppWidgetManager
یا AppWidgetManager
استفاده کنند. برای جلوگیری از سوء استفاده و کاهش نگرانیهای مربوط به سلامت سیستم، setWidgetPreview
یک API با نرخ محدود است. حد پیش فرض تقریباً دو تماس در ساعت است.
پیش نمایش به روز شده را با Jetpack Glance ایجاد کنید
برای ویجت های ساخته شده با Jetpack Glance، موارد زیر را انجام دهید:
تابع
GlanceAppWidget.providePreview
را نادیده بگیرید تا محتوای قابل ترکیب برای پیش نمایش ارائه شود. همانطور که درprovideGlance
انجام می دهید، داده های برنامه خود را بارگیری کنید و آن را به محتوای ویجت قابل ساخت ارسال کنید تا مطمئن شوید پیش نمایش داده های دقیق را نشان می دهد. برخلافprovideGlance
، این یک ترکیب واحد بدون ترکیب مجدد یا اثرات است.برای تولید و انتشار پیش نمایش، با
GlanceAppWidgetManager.setWidgetPreviews
تماس بگیرید.
هیچ پاسخی از سیستم برای ارائه پیش نمایش وجود ندارد، بنابراین برنامه شما باید تصمیم بگیرد که چه زمانی setWidgetPreviews
تماس بگیرد. استراتژی به روز رسانی به موارد استفاده ویجت شما بستگی دارد:
- اگر ویجت دارای اطلاعات ثابت است یا یک اقدام سریع است، پیشنمایش را در اولین راهاندازی برنامه تنظیم کنید.
- هنگامی که برنامه شما دارای داده باشد، می توانید پیش نمایش را تنظیم کنید. به عنوان مثال، پس از ورود کاربر به سیستم یا راه اندازی اولیه.
- میتوانید یک کار دورهای برای بهروزرسانی پیشنمایشها در یک آهنگ انتخابی تنظیم کنید.
عیب یابی پیش نمایش های ایجاد شده
یک مشکل رایج این است که پس از ایجاد یک پیشنمایش، ممکن است تصاویر، نمادها یا سایر موارد قابل ترکیب در تصویر پیشنمایش، نسبت به اندازه قطره ویجت، وجود نداشته باشند. این اندازه قطره توسط targetCellWidth
و targetCellHeight
در صورت مشخص شدن یا با minWidth
و minHeight
در فایل اطلاعات ارائهدهنده ابزارک برنامه تعریف میشود.
این به این دلیل اتفاق میافتد که Android، بهطور پیشفرض، تنها موارد composable را در حداقل اندازه ویجت قابل مشاهده میکند. به عبارت دیگر اندروید previewSizeMode
به صورت پیش فرض روی SizeMode.Single
قرار می دهد. از android:minHeight
و android:minWidth
در اطلاعات ارائهدهنده ویجت برنامه XML استفاده میکند تا مشخص کند کدام فایلهای composable باید ترسیم شوند.
برای رفع این مشکل، previewSizeMode
در GlanceAppWidget
خود لغو کنید و آن را روی SizeMode.Responsive
تنظیم کنید و مجموعه ای از مقادیر DpSize
را ارائه دهید. این به اندروید تمام اندازههای طرحبندی را که برای پیشنمایش نیاز دارد، میگوید، که تضمین میکند همه عناصر به درستی نمایش داده شوند.
بهینه سازی برای عوامل فرم خاص. 1 یا 2 اندازه را با شروع از حداقل و پس از نقاط شکست ویجت خود ارائه دهید. حداقل یک تصویر را برای سازگاری با عقب مشخص کنید. می توانید حداقل مقادیر DP مناسب را برای اندازه های مختلف شبکه در راهنمای طراحی ویجت بیابید.
پیش نمایش به روز شده را بدون Jetpack Glance ایجاد کنید
می توانید بدون نگاه از RemoteViews
استفاده کنید. مثال زیر یک منبع طرح بندی ویجت XML را بارگیری می کند و آن را به عنوان پیش نمایش تنظیم می کند. تنظیم ساخت compileSdk 35 یا بالاتر برای setWidgetPreview
لازم است تا به عنوان یک روش در این قطعه نمایش داده شود.
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
ExampleAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
پیش نمایش ویجت های مقیاس پذیر را به انتخابگر ویجت اضافه کنید
با شروع در اندروید 12، پیش نمایش ویجت نمایش داده شده در انتخابگر ویجت مقیاس پذیر است. شما آن را به عنوان یک طرح بندی XML با اندازه پیش فرض ویجت ارائه می کنید. پیش از این، پیشنمایش ویجت یک منبع قابل ترسیم ثابت بود، که در برخی موارد منجر به پیشنمایشهایی میشد که نحوه نمایش ویجتها را هنگام اضافه شدن به صفحه اصلی نشان میداد.
برای پیادهسازی پیشنمایشهای ویجت مقیاسپذیر، از ویژگی previewLayout
عنصر appwidget-provider
برای ارائه یک طرح XML استفاده کنید:
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
توصیه میکنیم از همان طرحبندی ویجت واقعی، با مقادیر پیشفرض یا آزمایش واقعی استفاده کنید. اکثر برنامه ها از همان previewLayout
و initialLayout
استفاده می کنند. برای راهنمایی در مورد ایجاد طرحبندیهای پیشنمایش دقیق، بخش زیر را در این صفحه ببینید.
توصیه میکنیم هر دو ویژگی previewLayout
و previewImage
را مشخص کنید تا اگر دستگاه کاربر از previewLayout
پشتیبانی نمیکند، برنامه شما بتواند دوباره به استفاده از previewImage
برود. ویژگی previewLayout
بر ویژگی previewImage
اولویت دارد.
سازگاری به عقب با پیش نمایش ویجت
برای اینکه انتخابکنندگان ویجت در Android 11 (سطح API 30) یا پایینتر، پیشنمایشهای ویجت شما را نشان دهند، یا بهعنوان جایگزینی برای پیشنمایشهای تولید شده، ویژگی previewImage
را مشخص کنید.
اگر ظاهر ویجت را تغییر دادید، تصویر پیش نمایش را به روز کنید.
پیش نمایش های دقیقی بسازید که شامل موارد پویا باشد

این بخش روش توصیه شده برای نمایش چندین مورد در یک پیشنمایش ویجت را برای یک ویجت با نمای مجموعه توضیح میدهد - یعنی ویجتی که از ListView
، GridView
یا StackView
استفاده میکند. این در مورد پیش نمایش ویجت های تولید شده صدق نمی کند.
اگر ویجت شما از یکی از این نماها استفاده میکند، ایجاد یک پیشنمایش مقیاسپذیر با ارائه مستقیم طرحبندی واقعی ویجت، زمانی که پیشنمایش ویجت هیچ موردی را نمایش نمیدهد، تجربه را کاهش میدهد. این به این دلیل رخ می دهد که داده های نمای مجموعه به صورت پویا در زمان اجرا تنظیم می شوند و شبیه تصویر نشان داده شده در شکل 1 به نظر می رسد.
برای اینکه پیشنمایش ویجتها با نمای مجموعه به درستی در انتخابگر ویجت نمایش داده شوند، توصیه میکنیم یک فایل طرحبندی جداگانه که فقط برای پیشنمایش تعیین شده است نگهداری کنید. این فایل طرح بندی جداگانه باید شامل موارد زیر باشد:
- طرح ویجت واقعی
- نمای مجموعه جایگیر با موارد جعلی. برای مثال، میتوانید با ارائه یک حفرهدار
LinearLayout
با چندین آیتم فهرست جعلی، یکListView
تقلید کنید.
برای نشان دادن مثالی برای ListView
، با یک فایل طرح بندی جداگانه شروع کنید:
// res/layout/widget_preview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/widget_background"
android:orientation="vertical">
// Include the actual widget layout that contains ListView.
<include
layout="@layout/widget_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
// The number of fake items you include depends on the values you provide
// for minHeight or targetCellHeight in the AppWidgetProviderInfo
// definition.
<TextView android:text="@string/fake_item1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="?attr/appWidgetInternalPadding" />
<TextView android:text="@string/fake_item2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="?attr/appWidgetInternalPadding" />
</LinearLayout>
هنگام ارائه ویژگی previewLayout
فراداده AppWidgetProviderInfo
، فایل طرح بندی پیش نمایش را مشخص کنید. شما همچنان طرح بندی واقعی ویجت را برای ویژگی initialLayout
مشخص می کنید و هنگام ساخت RemoteViews
در زمان اجرا از طرح بندی واقعی ویجت استفاده می کنید.
<appwidget-provider
previewLayout="@layout/widget_previe"
initialLayout="@layout/widget_view" />
موارد لیست پیچیده
مثال در بخش قبل موارد جعلی لیست را ارائه می دهد، زیرا موارد لیست، اشیاء TextView
هستند. اگر اقلام دارای طرحبندی پیچیده باشند، ارائه اقلام جعلی میتواند پیچیدهتر باشد.
یک آیتم لیست را در نظر بگیرید که در widget_list_item.xml
تعریف شده است و از دو شی TextView
تشکیل شده است:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/fake_title" />
<TextView android:id="@id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/fake_content" />
</LinearLayout>
برای ارائه آیتمهای فهرست جعلی، میتوانید طرحبندی را چندین بار اضافه کنید، اما این باعث میشود هر آیتم فهرست یکسان باشد. برای ارائه اقلام لیست منحصر به فرد، این مراحل را دنبال کنید:
مجموعه ای از ویژگی ها را برای مقادیر متن ایجاد کنید:
<resources> <attr name="widgetTitle" format="string" /> <attr name="widgetContent" format="string" /> </resources>
برای تنظیم متن از این ویژگی ها استفاده کنید:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="?widgetTitle" /> <TextView android:id="@id/content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="?widgetContent" /> </LinearLayout>
هر تعداد سبک که برای پیش نمایش لازم است ایجاد کنید. مقادیر را در هر سبک دوباره تعریف کنید:
<resources> <style name="Theme.Widget.ListItem"> <item name="widgetTitle"></item> <item name="widgetContent"></item> </style> <style name="Theme.Widget.ListItem.Preview1"> <item name="widgetTitle">Fake Title 1</item> <item name="widgetContent">Fake content 1</item> </style> <style name="Theme.Widget.ListItem.Preview2"> <item name="widgetTitle">Fake title 2</item> <item name="widgetContent">Fake content 2</item> </style> </resources>
استایلها را روی موارد جعلی در طرحبندی پیشنمایش اعمال کنید:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" ...> <include layout="@layout/widget_view" ... /> <include layout="@layout/widget_list_item" android:theme="@style/Theme.Widget.ListItem.Preview1" /> <include layout="@layout/widget_list_item" android:theme="@style/Theme.Widget.ListItem.Preview2" /> </LinearLayout>