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

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

Zrzut ekranu karty dolnej z kartą częściową
Częściowa karta niestandardowa w arkuszu u dołu.

W przypadku dużych ekranów lub urządzeń w trybie poziomym (począwszy od Chrome 120) możesz określić maksymalną szerokość uruchamiania, aby w arkuszu bocznym wyświetlała się tylko część karty niestandardowej. Ustawiając punkt przerwania, możesz zdecydować, kiedy wyświetlić część karty niestandardowej u dołu lub w arkuszu bocznym.

Zrzut ekranu przedstawiający arkusz boczny karty częściowej
Częściowa karta niestandardowa w arkuszu bocznym.

Warunek wstępny

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

Połącz oba te podejścia, jeśli chcesz szybko uruchamiać działanie, jeśli połączenie z usługą nie zostało jeszcze nawiązane.

Konfigurowanie planszy dolnej

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

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

Konfiguruję arkusz boczny

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

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

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

Karta niestandardowa będzie działać jak arkusz boczny, jeśli szerokość ekranu jest większa niż wartość punktu przerwania ustawiona w metodzie setActivitySideSheetBreakpointDp(). Jeśli szerokość ekranu jest większa niż x, karta niestandardowa będzie działać jak arkusz boczny. W przeciwnym razie będzie działać jak arkusz dolny. Jeśli nie został określony żaden punkt przerwania, ustaw implementację przeglądarki jako wartość domyślną 840dp. Jeśli x ma wartość <600dp, implementacja przeglądarki powinna mieć domyślną wartość 600dp.

Uruchamianie częściowej karty niestandardowej w 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ą polecenia 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 za pomocą kart niestandardowych.