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ą na pełny ekran, przeciągając uchwyt paska narzędzi w górę, i przywrócić początkową wysokość okna, przeciągając uchwyt w dół.

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

Począwszy od Chrome 120 możesz określić maksymalną szerokość uruchomienia, aby wyświetlać niepełną kartę niestandardową na karcie bocznej na dużych ekranach lub urządzeniach w orientacji poziomej. 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 na panelu 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 z karty niestandardowej zrobić kartę niestandardową częściowej, zdefiniuj 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, implementacja przeglądarki powinna ustawić jako wartość domyślną 840dp. Jeśli x ma wartość <600dp, implementacja przeglądarki powinna domyślnie ustawić wartość 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 w kartach niestandardowych.