درباره ورودی های پنجره

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

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

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

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

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

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

درج اصول

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

اندازه UI سیستم و اطلاعات مربوط به محل قرارگیری آن از طریق inset ها مشخص می شود.

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

این انواع داخلی اندروید از طریق 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 برای محافظت از محتوایی که نباید زیر هیچ رابط کاربری سیستمی کشیده شود، استفاده کنید. این رایج ترین استفاده از inset ها است: برای جلوگیری از ترسیم محتوایی که توسط رابط کاربری سیستم (چه به طور جزئی یا کامل) مبهم است.
  • از WindowInsets.safeGestures برای محافظت از محتوا با حرکات استفاده کنید. این کار از تداخل حرکات سیستم با حرکات برنامه (مانند موارد مربوط به صفحات پایین، چرخ فلک ها یا در بازی ها) جلوگیری می کند.
  • از WindowInsets.safeContent به عنوان ترکیبی از WindowInsets.safeDrawing و WindowInsets.safeGestures استفاده کنید تا مطمئن شوید محتوا همپوشانی بصری و همپوشانی حرکتی ندارد.
{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}