Özel etkileşim özelliği ekleme

Bu kılavuzda, Özel Sekmelere nasıl özel etkileşim ekleneceği açıklanmaktadır.

Varsayılan paylaşım işlemini etkinleştir

Özel bir paylaşım işlemi sağlamazsanız, kullanıcıların gördükleri içeriğin bağlantısını paylaşmalarını kolaylaştırmak için taşma menüsünde tarayıcının varsayılan paylaşım işlemini etkinleştirmek iyi bir fikirdir:

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

Özel işlem düğmesi ekleyin

Önemli işlemler için Özel Sekme araç çubuğu, metin etiketi veya özel simge içeren özel bir işlem düğmesini entegre etmenize olanak tanır. Simgenin yüksekliği 24 dp, genişliği ise 24-48 dp olmalıdır.

Özel paylaşım işlemi içeren Özel Sekme

Örneğin, araç çubuğuna özel bir paylaşma işlemi ekleyebilirsiniz. Bunu yapmak için, kullanıcı Özel Sekme'de paylaş işlemini tıkladığında çağrılacak bir BroadcastReceiver oluşturun.

BroadCastReceiver öğesini AndroidManifest.xml dosyasına kaydedin:

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

Ardından, yeni bir sınıf ekleyin: ShareBroadcastReceiver. onReceive() yönteminde, o anda gösterilen URL'yi amaçtan ayıklayın ve bir gönderme niyetini tetikleyin.

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);
    }
}

Şimdi ShareBroadcast için bir PendingIntent oluşturup setActionButton() üzerinden kaydedin. Beklemedeki amacı simge ve açıklamayla birlikte iletin.

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();

Özel menü öğeleri ekleme

Özel Sekmede tarayıcı tarafından sağlanan en fazla beş varsayılan işlem vardır: "Yönlendir", "Sayfa Bilgileri", "Yenile", "Sayfada Bul" ve "Tarayıcıda Aç". Ayrıca, en fazla yedi tane daha ekleyebilirsiniz. Bu menü öğeleri, simge satırı ile tarayıcı tarafından sağlanan öğeler arasına eklenir. (Aşağıdaki resmi inceleyin.) Gerçek sayı, kullanılan tarayıcı uygulamasına bağlıdır. (Örneğin Chrome, 117 sürümüyle birlikte menü öğelerinin sayısını beşten yediye çıkardı.) Bu nedenle en önemli öğeleri önce eklemeniz önerilir.

Özel işlemlerinize sağ üst köşedeki üç nokta menüsünden erişebilirsiniz:

Beş özel menü öğesi içeren Özel Sekme.

Menü seçeneği eklemek için CustomTabsIntent.Builder.addMenuItem() numaralı telefonu başlık ve PendingIntent ile arayın. Kullanıcı bir menü öğesine dokunduğunda tarayıcı PendingIntent özelliğini tetikler.

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();

Kapat düğmesini özelleştirme

Özel Sekmeyi uygulamanızın akışına daha iyi sığdırmak için kapat düğmesini özelleştirin. Kullanıcının Özel Sekmeler'in kalıcı bir iletişim kutusu olduğunu hissetmesini istiyorsanız varsayılan “X” düğmesini kullanın. Kullanıcının Özel Sekme'nin uygulama akışının bir parçası olduğunu hissetmesini istiyorsanız geri okunu kullanın.

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

Alta araç çubuğu ekle

Alttaki araç çubuğu, Özel Sekmeye daha fazla işlev eklemek için çok esnek bir yoldur.

Alt araç çubuğu olan Özel Sekme

CustomTabIntent.Builder.setSecondaryToolbarViews() işlevine bir RemoteViews nesnesi geçirilerek alttaki araç çubuğu tamamen özelleştirilebilir ve dinamik olarak güncellenebilir.

İlk olarak, yeni bir düzen dosyası (res/layout/custom_tab_toolbar.xml) oluşturarak bir araç çubuğu düzeni tanımlayın:

<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>

Sonraki adım, AndroidManifest.xml dosyasına araç çubuğu etkileşimlerini işleyen bir BroadcastReceiver kaydetmektir:

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

Ardından, alttaki araç çubuğuyla tüm etkileşimleri işleyecek olan BroadcastReceiver öğesini uygulayın:

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
        }
    }
}

Son olarak, araç çubuğunu kaydedin:

// 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();

Yer işaretleri ve indirme düğmeleri

Üç nokta menüsündeki yer işaretleri ve indirme düğmeleri varsayılan olarak etkindir. Bunları devre dışı bırakmak için CustomTabsIntent.Builder içinde şu kodu kullanın:

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

Sıradaki: Özel Sekmede web içeriğinin yüklenmesini nasıl hızlandıracağınızı öğrenin.