درباره تورفتگی‌های پنجره

پلاتفرم Android مسئول رسم میانای کاربر سیستم، مانند نوار وضعیت و نوار پیمایش است. این واسط کاربر سیستم صرف‌نظر از اینکه کاربر از کدام برنامه استفاده می‌کند نمایش داده می‌شود.

WindowInsets اطلاعاتی درباره واسط کاربر سیستم ارائه می‌دهد تا مطمئن شوید برنامه‌تان در ناحیه درست ترسیم می‌شود و واسط کاربر سیستم آن را نمی‌پوشاند.

رفتن به حالت لبه‌به‌لبه برای رسم در پشت نوارهای سیستم
شکل ۱. رفتن به حالت لب‌به‌لب برای رسم در پشت نوارهای سیستم.

در Android 14 (سطح API‏ ۳۴) و پایین‌تر، میانای کاربر برنامه شما به‌طور پیش‌فرض در زیر نوارهای سیستم و برش‌های نمایشگر رسم نمی‌شود.

در Android 15 (سطح ای‌پی‌آی ۳۵) و بالاتر، وقتی برنامه شما کیت توسعه نرم‌افزار ۳۵ را هدف‌یابی می‌کند، برنامه شما زیر نوارهای سیستم و برش‌های نمایشگر ترسیم می‌شود. این کار منجر به تجربه کاربری یکپارچه‌تری می‌شود و به برنامه شما اجازه می‌دهد از فضای پنجره دردسترس خود به‌طور کامل استفاده کند.

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

اصول حاشیه

وقتی برنامه‌ای لبه‌به‌لبه می‌شود، باید مطمئن شوید که محتوا و تعاملات مهم توسط واسط کاربر سیستم پنهان نمی‌شوند. برای مثال، اگر دکمه‌ای پشت نوار پیمایش قرار گیرد، ممکن است کاربر نتواند روی آن کلیک کند.

اندازه میانای کاربر سیستم و اطلاعات مربوط به محل قرارگیری آن بااستفاده از درج‌ها مشخص می‌شود.

هر بخش از واسط کاربر سیستم دارای نوعی درج متناظر است که اندازه و محل قرارگیری آن را توصیف می‌کند. برای مثال، تورفتگی‌های نوار وضعیت اندازه و موقعیت نوار وضعیت را ارائه می‌دهند، درحالی‌که تورفتگی‌های نوار پیمایش اندازه و موقعیت نوار پیمایش را ارائه می‌دهند. هر نوع درج از چهار بعد پیکسلی تشکیل شده است: بالا، چپ، راست، و پایین. این ابعاد مشخص می‌کنند که میانای کاربری سیستم تا چه اندازه از طرفین مربوطه پنجره برنامه گسترش می‌یابد. بنابراین، برای جلوگیری از هم‌پوشانی با آن نوع میانای کاربر سیستم، میانای کاربر برنامه باید به همان اندازه تورفتگی داشته باشد.

این انواع درج‌های توکار Android ازطریق WindowInsets دردسترس هستند:

WindowInsets.statusBars

درج‌ها نوار وضعیت را توصیف می‌کنند. این‌ها نوارهای واسط کاربر سیستم در بالا هستند که نمادهای اعلان و نشانگرهای دیگر را دربرمی‌گیرند.

WindowInsets.statusBarsIgnoringVisibility

درج‌های نوار وضعیت برای زمانی که نمایان هستند. اگر نوارهای وضعیت پنهان باشند (به‌دلیل ورود به حالت تمام‌صفحه فراگیر)، درج‌های نوار وضعیت اصلی خالی خواهند بود، اما این درج‌ها خالی نخواهند بود.

WindowInsets.navigationBars

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

WindowInsets.navigationBarsIgnoringVisibility

درج‌های نوار پیمایش برای زمانی که قابل‌مشاهده هستند. اگر نوارهای پیمایش پنهان باشند (به‌دلیل ورود به حالت تمام‌صفحه فراگیر)، درج‌های نوار پیمایش اصلی خالی خواهند بود، اما این درج‌ها خالی نخواهند بود.

WindowInsets.captionBar

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

WindowInsets.captionBarIgnoringVisibility

درج‌های نوار زیرنویس ناشنوایان برای زمانی که نمایان هستند. اگر نوارهای زیرنویس پنهان باشند، تورفتگی‌های نوار زیرنویس اصلی خالی خواهند بود، اما این تورفتگی‌ها خالی نخواهند بود.

WindowInsets.systemBars

اتحاد درج‌های نوار سیستم که شامل نوار وضعیت، نوار پیمایش، و نوار عنوان می‌شود.

WindowInsets.systemBarsIgnoringVisibility

درج‌های نوار سیستم برای زمانی که نمایان هستند. اگر نوارهای سیستم پنهان باشند (به‌دلیل ورود به حالت تمام‌صفحه فراگیر)، تورفتگی‌های نوار سیستم اصلی خالی خواهند بود، اما این تورفتگی‌ها خالی نخواهند بود.

WindowInsets.ime

درج‌هایی که مقدار فضای پایین را که صفحه‌کلید نرم‌افزاری اشغال می‌کند توصیف می‌کنند.

WindowInsets.imeAnimationSource

درج‌هایی که مقدار فضایی را که صفحه‌کلید نرم‌افزاری قبل‌از پویانمایی صفحه‌کلید فعلی اشغال کرده است توصیف می‌کنند.

WindowInsets.imeAnimationTarget

درج‌هایی که مقدار فضایی را که صفحه‌کلید نرم‌افزاری پس‌از پویانمایی صفحه‌کلید فعلی اشغال خواهد کرد توصیف می‌کند.

WindowInsets.tappableElement

نوعی از درج‌ها که اطلاعات دقیق‌تری درباره میانای کاربری پیمایش ارائه می‌دهد و مقدار فضایی را که «تک‌ضرب‌ها» توسط سیستم (و نه برنامه) مدیریت می‌شود نشان می‌دهد. برای نوارهای پیمایش شفاف با پیمایش اشاره‌ای، برخی‌از عناصر برنامه می‌توانند ازطریق میانای کاربری پیمایش سیستم قابل‌تک‌ضرب باشند.

WindowInsets.tappableElementIgnoringVisibility

درج‌های عنصر ضربه‌زدنی برای زمانی که رؤیت‌پذیر هستند. اگر عناصر ضربه‌زدنی پنهان باشند (به‌دلیل ورود به حالت تمام‌صفحه فراگیر)، تورفتگی‌های عنصر ضربه‌زدنی اصلی خالی خواهند بود، اما این تورفتگی‌ها خالی نخواهند بود.

WindowInsets.systemGestures

درج‌هایی که نشان‌دهنده مقدار درج‌هایی است که سیستم اشاره‌ها را برای پیمایش رهگیری می‌کند. برنامه‌ها می‌توانند بااستفاده از Modifier.systemGestureExclusion به‌طور دستی مشخص کنند که تعداد محدودی از این اشاره‌ها را مدیریت می‌کنند.

WindowInsets.mandatorySystemGestures

زیرمجموعه‌ای از اشاره‌های سیستم که همیشه توسط سیستم مدیریت می‌شود و نمی‌توان بااستفاده از Modifier.systemGestureExclusion از آن‌ها انصراف داد.

WindowInsets.displayCutout

درج‌هایی که مقدار فاصله موردنیاز برای جلوگیری از هم‌پوشانی با برش نمایشگر (بریدگی یا سوراخ) را نشان می‌دهند.

WindowInsets.waterfall

تصاویر کوچک نشان‌دهنده نواحی خمیده نمایشگر آبشاری. نمایشگر آبشاری دارای نواحی منحنی در امتداد لبه‌های صفحه‌نمایش است که در آن صفحه‌نمایش در امتداد کناره‌های دستگاه شروع به پیچیدن می‌کند.

این انواع با سه نوع درج «ایمن» خلاصه می‌شوند که تضمین می‌کنند محتوا پنهان نمی‌شود:

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

  • از WindowInsets.safeDrawing برای محافظت از محتوایی که نباید زیر هیچ میانای کاربری سیستمی ترسیم شود استفاده کنید. این رایج‌ترین کاربرد تورفتگی‌ها است: برای جلوگیری از ترسیم محتوایی که توسط واسط کاربر سیستم (به‌طور جزئی یا کامل) پنهان شده است.
  • از WindowInsets.safeGestures برای محافظت از محتوا با اشاره‌ها استفاده کنید. این کار از تداخل اشاره‌های سیستم با اشاره‌های برنامه (مانند اشاره‌های مربوط به برگه‌های پایین، چرونه‌ها، یا اشاره‌های درون بازی) جلوگیری می‌کند.
  • از WindowInsets.safeContent به‌عنوان ترکیبی از WindowInsets.safeDrawing و WindowInsets.safeGestures استفاده کنید تا مطمئن شوید محتوا هم‌پوشانی دیداری و هم‌پوشانی اشاره‌ای ندارد.