Ö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şması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

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

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

Örneğin, araç çubuğuna özel bir paylaşım işlemi ekleyebilirsiniz. Bunu yapmak için, kullanıcı Özel Sekme'de paylaşma 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, ShareBroadcastReceiver adlı yeni bir sınıf ekleyin. onReceive() yönteminde, halihazırda görüntülenmekte olan URL'yi niyetten çıkarı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şturun ve setActionButton() üzerinden kaydettirin. 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 ekleyin

Özel Sekmelerde tarayıcı tarafından en fazla beş varsayılan işlem bulunur: "Yönlendir", "Sayfa Bilgisi", "Yenile", "Sayfada Bul" ve "Tarayıcıda Aç"ı tıklayın. Ayrıca, yedi e-posta daha ekleyebilirsiniz. Bu menü öğeleri, simge satırı ile tarayıcı tarafından sağlanan öğelerin arasına eklenir. (Aşağıdaki resme bakın.) Gerçek sayı, temel tarayıcı uygulamasına bağlıdır. (Örneğin, 117 sürümünde Chrome, menü öğelerinin sayısını beşten yediye çıkardı.) Bu nedenle en önemli öğeleri en başta eklemeniz gerekir.

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

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

Menü seçeneği eklemek için başlık ve PendingIntent ile CustomTabsIntent.Builder.addMenuItem() numaralı telefonu arayın. Kullanıcı bir menü öğesine dokunduğunda, tarayıcı PendingIntent öğesini 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 Sekme'yi 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));

Alt araç çubuğu ekle

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

Altta araç çubuğu olan Özel Sekme

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

Öncelikle res/layout/custom_tab_toolbar.xml adlı yeni bir düzen dosyası 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 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 aşağıdakileri kullanın: CustomTabsIntent.Builder içindeki kod:

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.