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

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

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

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

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

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

نمایش محتوا در پشت رابط کاربری سیستم ، نمایش لبه به لبه (edge-to-edge) نامیده می‌شود. در این صفحه، شما با انواع مختلف insetها، نحوه نمایش لبه به لبه و نحوه استفاده از APIهای inset برای متحرک‌سازی رابط کاربری و اطمینان از اینکه محتوای برنامه شما توسط عناصر رابط کاربری سیستم پنهان نمی‌شود، آشنا می‌شوید.

اصول اولیه درج

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

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

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

این نوع inset های داخلی اندروید از طریق 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

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

WindowInsets.tappableElementIgnoringVisibility

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

WindowInsets.systemGestures

خطوط داخلی (insets) نشان‌دهنده‌ی تعداد خطوط داخلی هستند که سیستم در آن‌ها حرکات ناوبری را رهگیری می‌کند. برنامه‌ها می‌توانند به صورت دستی و از طریق Modifier.systemGestureExclusion تعداد محدودی از این حرکات را مدیریت کنند.

WindowInsets.mandatorySystemGestures

زیرمجموعه‌ای از حرکات سیستم که همیشه توسط سیستم مدیریت می‌شوند و نمی‌توان آن‌ها را از طریق Modifier.systemGestureExclusion غیرفعال کرد.

WindowInsets.displayCutout

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

WindowInsets.waterfall

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

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

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

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