Wielozadaniowość dzięki częściowym kartom niestandardowym

Domyślnie karty niestandardowe otwierają się w pełnym oknie. Począwszy od Chrome 107 możesz używać częściowych kart niestandardowych, aby określić inną wysokość okna podczas uruchamiania w trybie poziomym, dzięki czemu użytkownicy mogą wykonywać wiele zadań jednocześnie, korzystając z aplikacji podczas przeglądania treści w internecie. Użytkownicy mogą rozwinąć kartę niestandardową do pełnego ekranu, przeciągając uchwyt paska narzędzi w górę, i przywracając początkową wysokość uruchamiania, przeciągając uchwyt w dół.

Zrzut ekranu z częściową kartą na dolnym panelu
Częściowa karta niestandardowa na dolnym panelu.

W przypadku dużych ekranów lub urządzeń w trybie poziomym (od Chrome 120) możesz określić maksymalną szerokość uruchamiania, by wyświetlić część karty niestandardowej w arkuszu bocznym. Ustawiając punkt przerwy, możesz określić, kiedy uruchomić częściową kartę niestandardową na dolnym lub bocznym panelu.

Zrzut ekranu karty częściowej na panelu bocznym
Częściowa karta niestandardowa w arkuszu bocznym.

Warunek wstępny

Aby móc korzystać z częściowych kart niestandardowych:

Jeśli chcesz, aby aplikacja szybko się uruchamiała, gdy połączenie z usługą nie zostało jeszcze nawiązane, połącz oba podejścia.

Konfigurowanie planszy dolnej

Aby zmienić kartę niestandardową na kartę niestandardową częściowej, określ początkową wysokość inicjacji w pikselach, wywołując metodę CustomTabBuilder klasy setInitialActivityHeightPx(). Domyślnie rozmiar karty niestandardowej częściowej można zmieniać, ale możesz przekazać parametr ACTIVITY\_HEIGHT\_FIXED, aby wyłączyć tę funkcję:

new CustomTabsBuilder().setInitialActivityHeightPx(
    400,
    ACTIVITY_HEIGHT_FIXED
);

Konfigurowanie panelu bocznego

Aby skonfigurować zachowanie panelu bocznego, określ początkową szerokość podczas uruchamiania w pikselach, wywołując metodę CustomTabBuilder klasy setInitialActivityWidthPx().

Domyślnie rozmiar karty niestandardowej częściowej można zmieniać, ale możesz przekazać parametr ACTIVITY\_HEIGHT\_FIXED, aby wyłączyć tę funkcję:

  CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder(session)
        .setInitialActivityHeightPx(400)
        .setInitialActivityWidthPx(400);
        .setActivitySideSheetBreakpointDp(800);

Karta niestandardowa będzie działać jak panel boczny, jeśli szerokość ekranu jest większa niż wartość punktu kontrolnego ustawiona przez funkcję setActivitySideSheetBreakpointDp(). Jeśli szerokość ekranu jest większa niż x, karta niestandardowa będzie działać jak panel boczny, w przeciwnym razie będzie działać jak panel dolny. Jeśli nie określono punktu przerwania, ustaw implementację przeglądarki na wartość domyślną 840dp. Jeśli zasada x ma wartość <600dp, implementacja przeglądarki powinna domyślnie używać wartości 600dp.

Uruchamianie częściowej karty niestandardowej w ramach istniejącej sesji

CustomTabsSession customTabsSession;

// ...

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder(customTabsSession)
   .setInitialActivityHeightPx(500)
    .setInitialActivityWidthPx(400);
    .setActivitySideSheetBreakpointDp(800);
   .setCloseButtonPosition(CustomTabsIntent.CLOSE_BUTTON_POSITION_END)
   // ...
   .build();

customTabsIntent.launchUrl(context, Uri.parse(url))

Uruchamianie częściowej karty niestandardowej za pomocą startActivityForResult

private ActivityResultLauncher<String> mCustomTabLauncher = registerForActivityResult(new ActivityResultContract<String, Integer>() {
    @Override
    public Integer parseResult(int statusCode, @Nullable Intent intent) {
        return statusCode;
    }

    @NonNull
    @Override
    public Intent createIntent(@NonNull Context context, String url) {
        CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(customTabsSession)
                .setInitialActivityHeightPx(500)
                .setInitialActivityWidthPx(400);
                .setActivitySideSheetBreakpointDp(800);
                .setCloseButtonPosition(CustomTabsIntent.CLOSE_BUTTON_POSITION_END)
                .setToolbarCornerRadiusDp(10);
        Intent customTabsIntent = builder.build().intent;
        customTabsIntent.setData(Uri.parse(url));
        return customTabsIntent;
    }
}, new ActivityResultCallback<Integer>() {
    @Override
    public void onActivityResult(Integer statusCode) {
       // ...
    }
});

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    Button selectButton = findViewById(R.id.select_button);
    selectButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            mCustomTabLauncher.launch(customTabsIntent.intent);
        }
    });
}

Kolejny krok: dowiedz się, jak mierzyć zaangażowanie użytkowników na kartach niestandardowych.