İşlem ekleme ve işleme

Uygulama çubuğu, kullanıcı işlemleri için düğmeler eklemenize olanak tanır. Bu özellik, mevcut bağlamla ilgili en önemli işlemleri uygulamanın üst kısmına koymanızı sağlar. Örneğin, bir fotoğraf tarama uygulaması, kullanıcı fotoğraf rulosuna bakarken üst tarafta paylaş ve albüm oluştur düğmelerini gösterebilir. Kullanıcı tek bir fotoğrafa baktığında uygulama kırp ve filtrele düğmelerini gösterebilir.

Uygulama çubuğundaki alan sınırlıdır. Bir uygulama, uygulama çubuğuna sığabilecek daha fazla işlem bildirirse uygulama çubuğu, fazla işlemleri bir taşma menüsüne gönderir. Uygulama, bir işlemin uygulama çubuğunda görüntülenmek yerine her zaman taşma menüsünde gösterilmesini de belirtebilir.

Asistan'ı Android uygulamasında gösteren ve işlem çubuğu simgesiyle gösterilen resim
Şekil 1. "Now in Android" uygulamasında bir işlem simgesi.

İşlem düğmesi ekleme

İşlem taşmasında bulunan tüm işlem düğmeleri ve diğer öğeler XML menü kaynağında tanımlanır. İşlem çubuğuna işlem eklemek için projenizin res/menu/ dizininde yeni bir XML dosyası oluşturun.

Aşağıdaki örnek menü XML dosyasında gösterildiği gibi, işlem çubuğuna eklemek istediğiniz her öğe için bir <item> öğesi ekleyin:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- "Mark Favorite", must appear as action button if possible. -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, must always be in the overflow. -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

app:showAsAction özelliği, işlemin uygulama çubuğunda bir düğme olarak gösterilip gösterilmeyeceğini belirtir. app:showAsAction="ifRoom" öğesini ayarlarsanız (örnek kodun favori işleminde olduğu gibi) uygulama çubuğunda yer varsa işlem bir düğme olarak görüntülenir. Yeterli alan yoksa fazla işlemler taşma menüsüne gönderilir. app:showAsAction="never" öğesini ayarlarsanız (örnek kodun ayarlar işleminde olduğu gibi) işlem her zaman taşma menüsünde listelenir ve uygulama çubuğunda gösterilmez.

İşlem uygulama çubuğunda görüntülenirse sistem, işlem düğmesi olarak işlemin simgesini kullanır. Malzeme Simgeleri'nde pek çok kullanışlı simge bulabilirsiniz.

İşlemlere yanıt verme

Kullanıcı, uygulama çubuğu öğelerinden birini seçtiğinde sistem, etkinliğinizin onOptionsItemSelected() geri çağırma yöntemini çağırır ve hangi öğeye dokunulduğunu belirtmek için bir MenuItem nesnesi iletir. onOptionsItemSelected() uygulamanızda, hangi öğeye dokunulduğunu belirlemek için MenuItem.getItemId() yöntemini çağırın. Döndürülen kimlik, karşılık gelen <item> öğesinin android:id özelliğinde bildirdiğiniz değerle eşleşir.

Örneğin, aşağıdaki kod snippet'i kullanıcının hangi işlemi seçtiğini kontrol eder. Yöntem, kullanıcının işlemini tanımazsa üst sınıf yöntemini çağırır:

Kotlin

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_settings -> {
        // User chooses the "Settings" item. Show the app settings UI.
        true
    }

    R.id.action_favorite -> {
        // User chooses the "Favorite" action. Mark the current item as a
        // favorite.
        true
    }

    else -> {
        // The user's action isn't recognized.
        // Invoke the superclass to handle it.
        super.onOptionsItemSelected(item)
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chooses the "Settings" item. Show the app settings UI.
            return true;

        case R.id.action_favorite:
            // User chooses the "Favorite" action. Mark the current item as a
            // favorite.
            return true;

        default:
            // The user's action isn't recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}