درباره برش‌ها

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

نمونه برش در حالت عمودی
شکل ۱. نمونه برش در «حالت چهره»
نمونه برش در حالت افقی
شکل ۲. نمونه برش در حالت افقی

‫Android از برش‌های نمایشگر در دستگاه‌های دارای Android 9 (سطح API 28) و بالاتر پشتیبانی می‌کند. بااین‌حال، سازندگان دستگاه می‌توانند از برش‌های نمایشگر در دستگاه‌های دارای Android نسخه ۸.۱ یا پایین‌تر نیز پشتیبانی کنند.

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

حالت پیش‌فرض

برنامه‌هایی که سطح API 34 یا پایین‌تر را هدف‌یابی می‌کنند، یا «فعالیت‌هایی» که enableEdgeToEdge را فراخوانی نمی‌کنند، به‌طور پیش‌فرض در ناحیه برش نمایشگر رسم نمی‌شوند، مگر اینکه برنامه در نوار سیستمی حاوی برش نمایشگر رسم کند.

برنامه‌هایی که سطح API 35 یا بالاتر را در دستگاه‌های دارای Android 15 یا بالاتر هدف‌یابی می‌کنند، یا «فعالیت‌هایی» که enableEdgeToEdge را فرا می‌خوانند، در ناحیه برش طراحی می‌کنند.

به‌عبارت دیگر، LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT، LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES، و LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER برای پنجره‌های غیرشناور در برنامه‌هایی که سطح میانای برنامه‌سازی کاربردی ۳۵ یا بالاتر را در دستگاه‌های دارای Android 15 یا بالاتر هدف‌یابی می‌کنند، به‌صورت LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS تفسیر می‌شوند.

مدیریت دستی اطلاعات برش

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

برای «نوشتن»، توصیه می‌کنیم از displayCutout، safeContent، یا safeDrawing برای مدیریت حاشیه‌های برش در عناصر ترکیبی استفاده کنید. این رویکرد به شما امکان می‌دهد درصورت نیاز، حاشیه برش نمایشگر را رعایت کنید یا درصورت عدم نیاز، آن را نادیده بگیرید.

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}