ایجاد ابزاره پایه

امتحان کردن روش «نوشتن»
‫Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه ساختن ابزارک بااستفاده از APIهای سبک Compose آشنا شوید.

ابزاره‌های برنامه نماهای کوچک برنامه‌ها هستند که می‌توانید آن‌ها را در برنامه‌های دیگر (مثل صفحه اصلی) جاسازی کنید و به‌روزرسانی‌های دوره‌ای دریافت کنید. این نماها در واسط کاربری به‌عنوان ابزاره نامیده می‌شوند و می‌توانید یکی از آن‌ها را با ارائه‌دهنده ابزاره برنامه (یا ارائه‌دهنده ابزاره) منتشر کنید. جزء برنامه‌ای که ابزاره‌های دیگر را در خود جای می‌دهد میزبان ابزاره برنامه (یا میزبان ابزاره) نامیده می‌شود. شکل ۱ ابزارک موسیقی نمونه‌ای را نشان می‌دهد:

مثالی از ابزاره موسیقی
شکل ۱. نمونه‌ای از ابزاره موسیقی.

این سند نحوه انتشار ابزاره بااستفاده از ارائه‌دهنده ابزاره را شرح می‌دهد. برای جزئیات مربوط به ایجاد AppWidgetHost خودتان برای میزبانی ابزاره‌های برنامه، ساختن میزبان ابزاره را ببینید.

برای کسب اطلاعات درباره نحوه طراحی ابزاره، به نمای کلی ابزاره‌های برنامه مراجعه کنید.

اجزای ابزاره

برای ایجاد ابزاره، به مؤلفه‌های پایه زیر نیاز دارید:

‫AppWidgetProviderInfo شیء
فراداده‌های ابزاره را توصیف می‌کند، مانند چیدمان ابزاره، تناوب به‌روزرسانی، و AppWidgetProvider کلاس. AppWidgetProviderInfo همان‌گونه که در این سند توضیح داده شده است، در XML تعریف شده است.
کلاس AppWidgetProvider
روش‌های پایه‌ای را تعریف می‌کند که به شما امکان می‌دهد به‌صورت برنامه‌نویسی با ابزارک تعامل داشته باشید. ازطریق آن، وقتی ابزاره به‌روزرسانی، فعال، غیرفعال، یا حذف می‌شود، همه‌فرستی دریافت می‌کنید. همان‌طور که در این سند توضیح داده شده است، ابتدا AppWidgetProvider را در مانیفستپیاده‌سازی کنید.
مشاهده چیدمان
چیدمان اولیه ابزاره را تعریف می‌کند. چیدمان در XML تعریف شده است، همان‌طور که در این سند توضیح داده شده است.

شکل ۲ نشان می‌دهد که این عناصر چگونه در جریان کلی پردازش ابزاره برنامه قرار می‌گیرند.

جریان پردازش ابزاره برنامه
شکل ۲. جریان پردازش ابزاره برنامه.

اگر ابزاره شما به پیکربندی کاربر نیاز دارد، فعالیت پیکربندی ابزاره برنامه را پیاده‌سازی کنید. این فعالیت به کاربران امکان می‌دهد تنظیمات ابزارک را تغییر دهند—برای مثال، منطقه زمانی ابزارک ساعت.

بهبودهای زیر را نیز توصیه می‌کنیم: چیدمان‌های ابزاره انعطاف‌پذیر، بهبودهای متفرقه، ابزاره‌های پیشرفته، ابزاره‌های مجموعه، و ساخت میزبان ابزاره.

اعلام کردن XML مربوط به AppWidgetProviderInfo

تعریف تنظیمات فراداده (مانند اندازه‌های پیش‌فرض سلول، محدودیت‌های تغییر اندازه، و تناوب‌های به‌روزرسانی) در هر دو «نماهای» سنتی و ابزاره‌های مبتنی بر «نگاه سریع» دقیقاً یکسان است.

برای آشنایی با نحوه تعریف و پیکربندی فایل «زبان نشانه‌گذاری توسعه‌پذیر» فراداده، به بخش «اعلام کردن بخش XML مربوط به AppWidgetProviderInfo» در مستندات Glance مراجعه کنید.

از کلاس AppWidgetProvider برای مدیریت همه‌فرستی‌های ابزارک استفاده کنید

سازوکار گیرنده همه‌فرستی پلاتفرم، فیلترهای بیانیه مانیفست، و حلقه‌های رویداد چرخه حیات در زیر پلاتفرم یکپارچه می‌شوند. در توسعه «ابتدا نوشتن»، این همه‌فرستی‌ها بااستفاده از GlanceAppWidgetReceiver بسته‌بندی هماهنگ می‌شوند.

برای آشنایی با نحوه ثبت گیرنده در مانیفست و پیاده‌سازی جایگزین‌های چرخه حیات سازگار با Hilt، به بخش استفاده از کلاس AppWidgetProvider برای مدیریت همه‌فرستی‌ها در اسناد Glance مراجعه کنید.

ایجاد چیدمان ابزاره

باید چیدمان اولیه‌ای برای ابزاره‌تان در XML تعریف کنید و آن را در دایرکتوری res/layout/ پروژه ذخیره کنید. برای جزئیات، به رهنمودهای طراحی مراجعه کنید.

اگر با چیدمان‌ها آشنا باشید، ایجاد چیدمان ابزاره ساده است. بااین‌حال، توجه داشته باشید که چیدمان ابزاره‌ها براساس RemoteViews است که از هر نوع چیدمان یا ابزاره نمایشی پشتیبانی نمی‌کند. نمی‌توانید از نماهای سفارشی یا زیرکلاس‌های نماهایی که توسط RemoteViews پشتیبانی می‌شوند استفاده کنید.

RemoteViews همچنین از ViewStub پشتیبانی می‌کند، که یک عنصر نامرئی با اندازه صفر است View که می‌توانید از آن برای ازهم بازکردن تنبل‌وار منابع چیدمان در زمان اجرا استفاده کنید.

پشتیبانی از رفتار حالت‌دار

‫Android 12 بااستفاده از اجزای موجود زیر از رفتار حالت‌دار پشتیبانی می‌کند:

ابزاره هنوز بدون وضعیت است. برنامه شما باید وضعیت را ذخیره کند و برای رویدادهای تغییر وضعیت ثبت‌نام کند.

نمونه‌ای از ابزاره فهرست خرید که رفتار حالت‌دار را نشان می‌دهد
شکل ۳. مثالی از رفتار حالت‌دار.

مثال کد زیر نحوه پیاده‌سازی این عناصر را نشان می‌دهد.

// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true)

// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2)

// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
    R.id.my_checkbox,
    RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent)
)

دو چیدمان ارائه دهید: یکی برای هدف‌یابی دستگاه‌های دارای Android 12 یا بالاتر در res/layout-v31، و دیگری برای هدف‌یابی Android 11 یا پایین‌تر در پوشه پیش‌فرض res/layout.

پیاده‌سازی گوشه‌های گرد

محاسبه شعاع‌های تناسبی داخلی و پس‌زمینه بیرونی استاندارد و مشترک است. در توسعه «ترکیب اول»، این مورد را می‌توان به‌صورت پویا در Kotlin در کنار منابع زمینه سفارشی تنظیم کرد.

برای پیاده‌سازی شعاع‌های گوشه یا راه‌اندازی سبک‌های پویا برای دستگاه‌های Android قدیمی‌تر، به بخش پیاده‌سازی گوشه‌های گرد در اسناد «نگاه سریع» مراجعه کنید.