Obsługa wielu okien

W Androidzie 7.0 i nowszym urządzenia mogą wyświetlać wiele aplikacji jednocześnie w trybie wielu okien. Android obsługuje 3 konfiguracje wielu okien:

  • Dowolny: umożliwia użytkownikom dynamiczne zmienianie rozmiaru paneli aktywności i wyświetlanie na ekranie więcej niż 2 aplikacji. W przypadku trybu okien na pulpicie użytkownicy mogą tworzyć dowolne okna na pulpicie, które oferują interakcje w stylu komputerowym.
  • Podzielony ekran: domyślna implementacja wielu okien, która zapewnia 2 panele aktywności, w których użytkownicy mogą umieszczać aplikacje.
  • Obraz w obrazie: umożliwia urządzeniom z Androidem odtwarzanie treści wideo w małym oknie, gdy użytkownik korzysta z innych aplikacji.

Wymagania dotyczące urządzeń z wieloma oknami

Obsługa wielu okien jest domyślnie włączona na urządzeniach z Androidem 7.0 i nowszymi wersjami. Aby ją wyłączyć, ustaw w pliku config.xml na urządzeniu wartość config_supportsMultiWindow jako false.

Na wszystkich urządzeniach z niewielką ilością pamięci RAM (urządzeniach, które deklarują ActivityManager.isLowRam) funkcja wielu okien jest domyślnie wyłączona. Urządzenia z niewielką ilością pamięci RAM ignorują wartość flagi config_supportsMultiWindow.

Dowolny

Swobodne okna umożliwiają użytkownikowi tworzenie okien, których rozmiar można dowolnie zmieniać. Dowolny rozmiar okien jest wymagany w przypadku trybu okien na pulpicie. Wymagania dotyczące urządzenia, które musi spełniać, aby można było włączyć okna o dowolnym rozmiarze:

  • Włącz flagę config_supportsMultiWindow.
  • Włącz zarządzanie oknami o dowolnym rozmiarze na jeden z tych sposobów:
    • Włącz flagę config_freeformWindowManagementconfig.xml:
      <feature name="android.software.freeform_window_management" />
    • W pliku makefile urządzenia uwzględnij te elementy:
      PRODUCT_COPY_FILES += \
      frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml

W Androidzie 16 producenci OEM mogą włączyć na swoich urządzeniach obsługę trybu okien na pulpicie w konfiguracji z wieloma oknami o dowolnym rozmiarze za pomocą opcji Włącz okna na pulpicie.

Tryb okien na pulpicie

Tryb okien na pulpicie zapewnia przestrzeń roboczą do pracy wielozadaniowej na dużych ekranach, opartą na oknach o dowolnym kształcie. Obszar roboczy działa równolegle z trybem pełnoekranowym i ma dodatkowe elementy interfejsu oraz zachowania, które zapewniają użytkownikowi większą elastyczność podczas wykonywania wielu zadań:

  • Interakcja z klawiaturą lub myszą: obsługuje interakcje oparte na dotyku oraz interakcje oparte na klawiaturze lub myszy.
  • Dowolny rozmiar okien: uruchamia aplikacje w oknach o zmienianym rozmiarze, które można przenosić i które mają paski tytułu i elementy sterujące.
  • Ulepszony pasek zadań: zapewnia łatwy dostęp do uruchomionych i przypiętych aplikacji.
  • Optymalizacja wyświetlaczy zewnętrznych: przekształca podłączone monitory w środowiska komputerowe na obsługiwanych urządzeniach.
  • Wirtualne biurka: umożliwiają użytkownikom porządkowanie aplikacji w wielu obszarach roboczych.

Aby skonfigurować urządzenie do wyświetlania w oknach na komputerze, musisz spełnić te wymagania wstępne:

  • Włącz te flagi:
    • Wszystkie wymagania wstępne dotyczące okien w Freeform
    • Globalna flaga trybu okien na pulpicie config_isDesktopModeSupported
  • Interfejs systemu wymaga ekranu o szerokości co najmniej 600 dp. Tryb okien na pulpicie może nie działać zgodnie z oczekiwaniami na mniejszych ekranach.
  • Urządzenie nie może mieć małej ilości pamięci RAM. ActivityManager.isLowRam musi zwrócić false, ponieważ urządzenia z małą ilością pamięci RAM nie kwalifikują się do korzystania z żadnych funkcji wielookienkowych.

W tabeli poniżej znajdziesz konfiguracje, w których urządzenie może być skonfigurowane do trybu okien na pulpicie, w zależności od rozmiaru ekranu i przeznaczenia urządzenia:

Tryb Urządzenie przenośne tylko z pełnym ekranem Wyświetlanie na pełnym ekranie na podłączonym wyświetlaczu Duży ekran na pełnym ekranie rozszerzony na podłączony wyświetlacz Tryb okien na pulpicie – pierwszy duży ekran
Przykładowy format Telefon komórkowy telefon komórkowy obsługujący HDMI do wyświetlacza zewnętrznego, tablet obsługujący HDMI do wyświetlacza zewnętrznego, Tablet z klawiaturą obsługujący HDMI do wyświetlacza zewnętrznego
Wyświetlacz wewnętrzny Obsługa pełnego ekranu, podzielonego ekranu, obrazu w obrazie i trybu swobodnego na urządzeniach innych niż komputery Obsługa pełnego ekranu, podzielonego ekranu i obrazu w obrazie Obsługa pełnego ekranu, podzielonego ekranu i obrazu w obrazie w trybie okien na pulpicie dzięki oddzielnym pulpitom Tryb okien na pulpicie jest domyślnym trybem okien (obsługuje oddzielne pulpity); użytkownicy mogą włączyć tryb okien na pulpicie na pełnym ekranie lub w trybie dotykowym za pomocą oddzielnych pulpitów.
Obsługa połączonego wyświetlacza Klonowanie tylko na wyświetlaczu wewnętrznym Tryb okien na pulpicie tylko na podłączonych wyświetlaczach Tryb okien na pulpicie rozszerza biurka; dostępny na wyświetlaczach wewnętrznych Tryb okien na pulpicie rozszerza biurka; dostępny na wyświetlaczach wewnętrznych
Ustawienia konfiguracji
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops Ignorowany false true true
config_enterDesktopByDefaultOnFreeformDisplay Ignorowany false false true

config_isDesktopModeSupported

Flaga nakładki konfiguracji config_isDesktopModeSupported to flaga najwyższego poziomu, która umożliwia korzystanie z trybu okien na pulpicie. Jeśli ta opcja nie jest włączona, wszystkie inne ustawienia konfiguracji są ignorowane. Ustaw wartość trueconfig.xml:

<!-- Globally enable Desktop windowing logic -->
    <bool name="config_isDesktopModeSupported">true</bool>

Gdy wartość config_isDesktopModeSupported to true, system automatycznie traktuje kwalifikujące się wyświetlacze zewnętrzne (np. podłączone przez DisplayPort lub HDMI) jako kandydatów do trybu okien na pulpicie. Wyświetlacz musi być uznany za kwalifikujący się przez Menedżera okien (co najmniej publiczny i zaufany, patrz Tryb okien na pulpicie). System domyślnie próbuje uruchamiać zadania w trybie dowolnego rozmiaru okien na tych wyświetlaczach.

config_canInternalDisplayHostDesktops

Flaga nakładki konfiguracji config_canInternalDisplayHostDesktops włącza tryb okien na pulpicie na wewnętrznym wyświetlaczu urządzenia. Ustaw wartość true w polu config.xml:

<!-- Allow the primary internal display to host desktop sessions -->
    <bool name="config_canInternalDisplayHostDesktops">true</bool>

Tryb okien na pulpicie działa najlepiej na urządzeniach z dużym ekranem, takich jak tablety, w porównaniu z mniejszymi telefonami komórkowymi. Jeśli ta opcja nie jest włączona, tryb okien na pulpicie jest obsługiwany tylko na wyświetlaczu zewnętrznym (zakładając, że urządzenie obsługuje HDMI).

config_enterDesktopByDefaultOnFreeformDisplay

Flaga nakładki konfiguracyjnej config_enterDesktopByDefaultOnFreeformDisplay ustawia tryb okien na pulpicie jako domyślny tryb okien na wewnętrznym wyświetlaczu urządzenia. Jeśli nie jest włączony, domyślnym trybem okien jest tryb pełnoekranowy, w którym pulpity współistnieją. Ustaw wartość trueconfig.xml:

<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
    <bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>

Włączanie limitów zadań

Aby skonfigurować maksymalną liczbę zadań obsługiwanych w trybie okien na pulpicie, ustaw flagę nakładki konfiguracyjnej config_maxDesktopWindowingActiveTasks w config.xml na maksymalną liczbę obsługiwanych zadań. Aby obsługiwać nieograniczoną liczbę zadań, ustaw wartość flagi na 0:

<!-- Maximum number of tasks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingActiveTasks">4</integer>

Włączanie limitów biurek

Aby skonfigurować maksymalną liczbę wirtualnych biurek obsługiwanych w trybie okien na pulpicie, ustaw flagę nakładki konfiguracyjnej config_maxDesktopWindowingDesks w config.xml na maksymalną liczbę obsługiwanych biurek. Aby obsługiwać nieograniczoną liczbę biurek, ustaw wartość flagi na 0:

<!-- Maximum number of virtual desks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingDesks">4</integer>

Podzielony ekran

Domyślnym trybem wielookienkowości jest tryb podzielonego ekranu, w którym interfejs systemu jest podzielony na pół w pionie lub poziomie. Użytkownicy mogą zmieniać rozmiar okna, przeciągając linię podziału w bok lub w górę i w dół w zależności od orientacji urządzenia.

Po włączeniu trybu podzielonego ekranu producenci urządzeń mogą włączyć tryb swobodny lub obraz w obrazie.

Android 8.0 i nowsze wersje poprawiają działanie podzielonego ekranu, kompresując program uruchamiający, gdy użytkownik naciśnie Ekran główny. Szczegóły wdrażania znajdziesz w sekcji Interakcje na podzielonym ekranie.

Obraz w obrazie

Po włączeniu trybu wielu okien za pomocą flagi config_supportsMultiWindow producenci urządzeń mogą obsługiwać obraz w obrazie, który umożliwia użytkownikom oglądanie filmów podczas korzystania z innych funkcji. Ta funkcja jest przeznaczona dla urządzeń z Androidem TV, ale może być obsługiwana także na innych urządzeniach.

Aby obsługiwać tryb obrazu w obrazie, włącz funkcję systemową PackageManager#FEATURE_PICTURE_IN_PICTURE w /android/frameworks/base/core/java/android/content/pm/PackageManager.java.

Więcej informacji o wdrażaniu funkcji obraz w obrazie na urządzeniach z Androidem 8.0 i nowszym znajdziesz w artykule Obraz w obrazie.

interfejs systemu

Obsługuj wszystkie standardowe interfejsy systemowe zgodnie z weryfikacją trybu wielu okien.

Aplikacje

Aby obsługiwać tryb wielu okien w przypadku wstępnie załadowanych aplikacji, zapoznaj się z artykułem Obsługa trybu wielu okien.

Weryfikacja

Aby sprawdzić, czy implementacja trybu wielu okien jest prawidłowa, uruchom odpowiednie testy CTS i postępuj zgodnie z instrukcjami w sekcji Weryfikacja trybu wielu okien.

Wersja Androida Test CTS
7.0 /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts
z Androidem 8.0 /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts
9.0 /platform/cts/tests/framework/base/activitymanager/src/android/server/am
Android 10 lub nowszy /platform/cts/tests/framework/base/windowmanager/src/android/server/wm