Wycinki w oknie tworzenia

Wycięcie w ekranie to obszar na niektórych urządzeniach, który wkracza w powierzchnię ekranu. Umożliwia korzystanie z usług najnowszych i zapewnia przestrzeń dla ważne czujniki z przodu urządzenia.

Przykład wycięcia w trybie pionowym
Rysunek 1. Przykład wycięcia w trybie portretowym
Przykład wycięcia w orientacji poziomej
Rysunek 2. Przykład wycięcia w trybie poziomym

Android obsługuje wycięcia w ekranie na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym. Producenci urządzeń mogą jednak obsługiwać wycięcia na wyświetlaczu na urządzeniach z Androidem 8.1 lub starszym.

Na tej stronie dowiesz się, jak wdrożyć obsługę urządzeń z wycięciami w tworzenie wiadomości, w tym informacje o korzystaniu z obszaru wycięcia, czyli od krawędzi do krawędzi prostokąt z wycięciem.

Domyślny przypadek

Domyślnie wycięcia w ekranie są zawarte w informacjach o wkładkach okien. Dlatego jeśli zastosujesz się do wskazówek dotyczących wyświetlania aplikacji od krawędzi do krawędzi, aplikacja nie będzie rysować w obszarach wycięcia.

Jeśli na przykład używasz Modifier.windowInsetsPadding(WindowInsets.safeContent) lub Modifier.windowInsetsPadding(WindowInsets.safeDrawing), Twoja aplikacja nie rysuje automatycznie w obszarach, w których znajduje się wycięcie. Obie te wartości (WindowInsets.safeContentWindowInsets.safeDrawing) zawierają informacje o wycięciu w ekranie i nie będą wyświetlane w miejscu wycięcia na urządzeniu.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    WindowCompat.setDecorFitsSystemWindows(window, false)

    setContent {
        Box(Modifier.windowInsetsPadding(WindowInsets.safeContent)) {
            // Any composable inside here will avoid drawing behind cutouts
        }
    }
}

Aby jeszcze bardziej dostosować to działanie, musisz obsługiwać informacje o wycięciu siebie.

Ręczne zarządzanie informacjami o wycięciu

Możesz radzić sobie z wycięciami na następujące sposoby:

W przypadku tworzenia wiadomości zalecamy ustawienie pola windowLayoutInDisplayCutoutMode na default w ogólnym motywie, a następnie wykorzystaj WindowInsets.displayCutout obsługuje wstawki w plikach kompozycyjnych:

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

To podejście umożliwia uwzględnienie dopełnienia displayCutout tam, gdzie jest to wymagane, lub zignorować je, gdy nie jest wymagane.

Możesz też zastosować te same ustawienia, które opisane są w dokumentacji dotyczącej wycinka liczby wyświetleń. Aby to zrobić, ustaw temat aktywności android:windowLayoutInDisplayCutoutMode na inną opcję lub zmień atrybut okna za pomocą tagu window.attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT. Następnie zostanie zastosowany tryb wycięcia. w odniesieniu do całej aktywności i nie można nią kontrolować poszczególnych elementów kompozycyjnych.

Aby uwzględnić wycięcie w ekranie tylko w niektórych funkcjach kompozycyjnych, użyj funkcji WindowInset.displayCutout Ten interfejs API umożliwia dostęp do wycięcia informacji, gdy są wymagane.

Sprawdzone metody

Podczas pracy z wycięciami w ekranie weź pod uwagę te kwestie:

  • Zwróć uwagę na rozmieszczenie kluczowych elementów interfejsu. Nie pozwól, aby zasłaniają ważny tekst, elementy sterujące i inne informacje.
  • Nie umieszczaj ani nie rozszerzaj elementów interaktywnych, które wymagają precyzyjnego wykrywania dotyku, w obszarze wycięcia. Czułość ekranu może być niższa w obszarze wycięcia.
  • Jeśli postępujesz zgodnie ze wskazówkami dotyczącymi wyświetlania od krawędzi do krawędzi, informacje o wycięciu są zawarte w ramkach safeDrawing / safeContent.
  • W miarę możliwości użyj elementu Modifier.windowInsetsPadding(WindowInsets.safeDrawing), aby określić odpowiedni margines dla treści. Unikaj osadzania wysokości paska stanu, ponieważ może to spowodować nakładanie się lub przycinanie treści.

Testowanie renderowania treści z wycięciami

Przetestuj wszystkie ekrany i funkcje aplikacji. Przetestuj na urządzeniach z różne typy wycięć. Jeśli nie masz urządzenia z wycięciem, możesz symulować typowe konfiguracje wycięć na dowolnym urządzeniu lub emulatorze z Androidem 9 lub nowszym. Aby to zrobić:

  1. Włącz Opcje programisty.
  2. Na ekranie Opcje programisty przewiń w dół do sekcji Rysunek. i wybierz Symuluj wyświetlacz z wycięciem.
  3. Wybierz typ wycięcia.
    symulowanie wycięcia w ekranie w emulatorze.
    Rysunek 3. Aby sprawdzić, jak renderowane są Twoje treści, użyj opcji dla deweloperów.
.