Dodawanie niestandardowej interaktywności

Z tego przewodnika dowiesz się, jak dodać niestandardową interaktywność na kartach niestandardowych.

Włącz domyślne działanie udostępniania

Jeśli nie określisz niestandardowego działania udostępniania, warto włączyć w rozszerzonym menu domyślne działanie udostępniania w przeglądarce. Ułatwi to użytkownikom udostępnianie linku do oglądanej treści:

    CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
    intentBuilder.setShareState(CustomTabsIntent.SHARE_STATE_ON);

Dodawanie niestandardowego przycisku działania

W przypadku ważnych działań na pasku narzędzi karty niestandardowej możesz zintegrować niestandardowy przycisk polecenia, który może mieć etykietę tekstową lub ikonę niestandardową. Ikona powinna mieć wysokość 24 dp i szerokość 24–48 dp.

Karta niestandardowa z niestandardowym działaniem udostępniania

Do paska narzędzi możesz na przykład dodać niestandardowe działanie udostępniania. Aby to zrobić, utwórz obiekt BroadcastReceiver, który będzie wywoływany, gdy użytkownik kliknie działanie udostępniania na karcie niestandardowej.

Zarejestruj BroadCastReceiver w pliku AndroidManifest.xml:

<application …>
  <receiver android:name=".ShareBroadcastReceiver" />
</application>

Następnie dodaj nowe zajęcia: ShareBroadcastReceiver. W metodzie onReceive() wyodrębnij wyświetlany obecnie URL z intencji i aktywuj intencję wysyłania.

public class ShareBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String url = intent.getDataString();
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, url);
        sendIntent.setType("text/plain");
        Intent shareIntent = Intent.createChooser(sendIntent, null);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(shareIntent);
    }
}

Teraz utwórz PendingIntent dla domeny ShareBroadcast i zarejestruj go w usłudze setActionButton(). Przekaż oczekującą intencję wraz z ikoną i opisem.

String shareDescription = getString(R.string.label_action_share);
Bitmap shareIcon = BitmapFactory.decodeResource(getResources(),
       android.R.drawable.ic_menu_share);

// Create a PendingIntent to your BroadCastReceiver implementation
Intent actionIntent = new Intent(
       this.getApplicationContext(), ShareBroadcastReceiver.class);
PendingIntent pendingIntent =
       PendingIntent.getBroadcast(getApplicationContext(), 0 /* request code */, actionIntent, PendingIntent.FLAG_MUTABLE);          

//Set the pendingIntent as the action to be performed when the button is clicked.
CustomTabsIntent intentBuilder = new CustomTabsIntent.Builder()
    
    .setActionButton(shareIcon, shareDescription, pendingIntent)
    .build();

Dodaj niestandardowe pozycje menu

Karta niestandardowa ma maksymalnie pięć domyślnych działań udostępnianych przez przeglądarkę: „Przekaż dalej”, „Informacje o stronie”, „Odśwież” i „Znajdź na stronie”. i „Otwórz w przeglądarce”. Możesz dodać jeszcze 7. Te pozycje menu zostaną wstawione między wierszem ikon a elementami dostarczonymi przez przeglądarkę. (zobacz ilustrację poniżej). Rzeczywista liczba zależy od używanej implementacji przeglądarki. (Na przykład w wersji 117 Chrome zwiększył liczbę pozycji w menu z pięciu do siedmiu). Najlepiej więc dodać najważniejsze informacje na początku.

Działania niestandardowe możesz wyświetlić za pomocą menu z 3 kropkami w prawym górnym rogu:

Karta niestandardowa z 5 niestandardowymi pozycjami menu.

Aby dodać pozycję menu, wywołaj CustomTabsIntent.Builder.addMenuItem() z tytułem i PendingIntent. Gdy użytkownik kliknie pozycję menu, przeglądarka uruchomi PendingIntent.

CustomTabsIntent intent = new CustomTabsIntent.Builder()
        ...
        .addMenuItem("Menu item 1", pendingIntent)
        .addMenuItem("Menu item 2", pendingIntent)
        .addMenuItem("Menu item 3", pendingIntent)
        .addMenuItem("Menu item 4", pendingIntent)
        .addMenuItem("Menu item 5", pendingIntent)
        .build();

Dostosowywanie przycisku zamykania

Aby lepiej dopasować kartę niestandardową do aplikacji, dostosuj przycisk zamykania. Jeśli chcesz, aby użytkownik miał wrażenie, że Karty niestandardowe są modalnym oknem, użyj domyślnego przycisku “X”. Jeśli chcesz, aby użytkownik czuł, że karta niestandardowa jest częścią procesu aplikacji, użyj strzałki wstecz.

CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
intentBuilder.setCloseButtonIcon(BitmapFactory.decodeResource(
    getResources(), R.drawable.ic_arrow_back));

Dodaj dolny pasek narzędzi

Dolny pasek narzędzi to bardzo elastyczny sposób dodawania do karty niestandardowej dodatkowych funkcji.

Karta niestandardowa z dolnym paskiem narzędzi

Dzięki przekazaniu obiektu RemoteViews do funkcji CustomTabIntent.Builder.setSecondaryToolbarViews() możesz w pełni dostosować dolny pasek narzędzi i dynamicznie go aktualizować.

Najpierw zadeklaruj układ paska narzędzi, tworząc nowy plik układu (res/layout/custom_tab_toolbar.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center">

    <Button xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ct_toolbar_next"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_margin="8dp"
        android:padding="8dp"
        android:paddingStart="16dp"
        android:paddingEnd="16dp"
        android:text="Next" />

    <Button xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ct_toolbar_previous"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_margin="8dp"
        android:padding="8dp"
        android:text="Previous" />
</LinearLayout>

Następnym krokiem jest zarejestrowanie w pliku AndroidManifest.xml usługi BroadcastReceiver, która obsługuje interakcje z paskiem narzędzi:

<application …>
  <receiver android:name=".CustomTabBottomToolbarBroadcastReceiver" />
</application>

Następnie wdróż element BroadcastReceiver, który będzie obsługiwać wszystkie interakcje z dolnym paskiem narzędzi:

public class BottomToolbarBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String url = intent.getDataString();
        int remoteViewId = intent.getIntExtra(EXTRA_REMOTEVIEWS_CLICKED_ID, -1);
        if (remoteViewId == R.id.ct_toolbar_previous) {
          // handle previous
        } else if (remoteViewId == R.id.ct_toolbar_next) {
          // handle next
        }
    }
}

Na koniec zarejestruj pasek narzędzi:

// Create the pending intent
Intent actionIntent = new Intent(
       this.getApplicationContext(), BottomToolbarBroadcastReceiver.class);

PendingIntent pendingIntent =
       PendingIntent.getBroadcast(getApplicationContext(), 0 /* request code */, actionIntent, PendingIntent.FLAG_MUTABLE);          

// Pass the toolbar layout to the RemoteViews instance
RemoteViews secondaryToolbarViews = new RemoteViews(getPackageName(), R.layout.custom_tab_toolbar);
// All toolbar buttons
int[] clickableIds = {R.id.ct_toolbar_next, R.id.ct_toolbar_previous};

// Register the bottom toolbar when creating a new custom tab intent
CustomTabsIntent intent = new CustomTabsIntent.Builder()
    .setSecondaryToolbarViews(secondaryToolbarViews, clickableIds, toolbarPendingIntent)
    .build();

Zakładki i przyciski pobierania

Zakładki i przyciski pobierania w menu z 3 kropkami są domyślnie włączone. Aby je wyłączyć, wykonaj następujące czynności kod w CustomTabsIntent.Builder:

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
    .setBookmarksButtonEnabled(false)
    .setDownloadButtonEnabled(false)
    .build();

Kolejny krok: jak przyśpieszyć ładowanie treści z internetu na karcie niestandardowej.