İşlem görünümlerini ve işlem sağlayıcıları kullanma

AndroidX kitaplığının Toolbar özelliği, kullanıcıların uygulamanızla etkileşimde bulunması için farklı yollar sağlar. İşlem ekleme ve işleme, bir düğme veya menü öğesi olabilecek bir işlemin nasıl tanımlanacağını açıklar. Bu belgede iki çok yönlü bileşenin nasıl ekleneceği açıklanmaktadır:

  • İşlem görünümü, uygulama çubuğunda zengin işlevler sağlayan bir işlemdir. Örneğin, arama işlemi görünümü, kullanıcının etkinlikleri veya parçaları değiştirmek zorunda kalmadan uygulama çubuğuna arama metnini yazmasını sağlar.
  • İşlem sağlayıcı, kendi özelleştirilmiş düzeni olan bir işlemdir. İşlem başlangıçta bir düğme veya menü öğesi olarak görünür. Kullanıcı işleme dokunduğunda işlem sağlayıcısı, işlemin davranışını sizin tanımladığınız şekilde kontrol eder. Örneğin, işlem sağlayıcı bir menü görüntüleyerek dokunmaya yanıt verebilir.

AndroidX, çeşitli özel işlem görünümü ve işlem sağlayıcı widget'ları sağlar. Örneğin, SearchView widget'ı arama sorgularını girmek için bir işlem görünümü uygular. ShareActionProvider Widget'ı, diğer uygulamalarla bilgi paylaşmak için bir işlem sağlayıcı uygular. Kendi işlem görünümlerinizi ve işlem sağlayıcılarınızı da tanımlayabilirsiniz.

İşlem görünümü ekleme

İşlem görünümü eklemek için İşlem ekleme ve işleme bölümünde açıklandığı gibi araç çubuğunun menü kaynağında bir <item> öğesi oluşturun. <item> öğesine aşağıdaki özelliklerden birini ekleyin:

  • actionViewClass: işlemi uygulayan widget sınıfı
  • actionLayout: İşlemin bileşenlerini açıklayan bir düzen kaynağı

showAsAction özelliğini "ifRoom|collapseActionView" veya "never|collapseActionView" olarak ayarlayın. collapseActionView işareti, kullanıcı etkileşimde bulunmadığında widget'ın nasıl görüntüleneceğini belirtir. Widget, uygulama çubuğundaysa uygulama, Widget'ı bir simge olarak görüntüler. Widget, taşma menüsündeyse uygulama widget'ı menü öğesi olarak görüntüler. Kullanıcı, işlem görünümüyle etkileşime geçtiğinde görünüm, uygulama çubuğunu dolduracak şekilde genişler.

Örneğin, aşağıdaki kod uygulama çubuğuna bir SearchView widget'ı ekler:

<item android:id="@+id/action_search"
     android:title="@string/action_search"
     android:icon="@drawable/ic_search"
     app:showAsAction="ifRoom|collapseActionView"
     app:actionViewClass="androidx.appcompat.widget.SearchView" />

Kullanıcı widget'la etkileşimde bulunmuyorsa uygulama, widget'ı android:icon tarafından belirtilen simgeyle görüntüler. Uygulama çubuğunda yer yoksa uygulama, işlemi taşma menüsüne ekler.

Başında ve sonunda simgeler olan bir arama çubuğunu gösteren resim.
Şekil 1. Başında ve sonunda simgeler bulunan arama çubuğu.

Kullanıcı simgeye veya menü öğesine dokunduğunda widget genişleyerek araç çubuğunu doldurarak kullanıcının etkileşimde bulunmasına olanak tanır.

Arama çubuğu odaklanıldığında arama görünümünün açık olduğunu gösteren resim.
Şekil 2. Arama çubuğu odaklanıldığında arama görünümü açılır.

İşlemi yapılandırmanız gerekiyorsa etkinliğinizin onCreateOptionsMenu() geri çağırmasında yapın. getActionView() yöntemini çağırarak işlem görünümünün nesne referansını alabilirsiniz. Örneğin, aşağıdaki kod, önceki kod örneğinde tanımlanan SearchView widget'ının nesne referansını alır:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main_activity_actions, menu)

    val searchItem = menu?.findItem(R.id.action_search)
    val searchView = searchItem?.actionView as SearchView

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu)
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =
            (SearchView) searchItem.getActionView();

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu);
}

İşlem görünümü genişletmesine yanıt verme

İşlemin <item> öğesinde collapseActionView işareti varsa uygulama, kullanıcı işlem görünümüyle etkileşim kurana kadar işlem görünümünü bir simge olarak görüntüler. Kullanıcı simgeye dokunduğunda, onOptionsItemSelected() öğesinin yerleşik işleyicisi işlem görünümünü genişletir. Etkinlik alt sınıfınız onOptionsItemSelected() yöntemini geçersiz kılarsa üst sınıfın işlem görünümünü genişletebilmesi için geçersiz kılma yönteminizin super.onOptionsItemSelected() yöntemini çağırması gerekir.

İşlem genişletildiğinde veya daraltıldığında bir şey yapmak istiyorsanız MenuItem.OnActionExpandListener özelliğini uygulayan bir sınıf tanımlayabilir ve bu sınıfın bir üyesini setOnActionExpandListener() öğesine aktarabilirsiniz. Örneğin, işlem görünümünün genişletilmiş veya daraltılmış olmasına bağlı olarak etkinliği güncellemek isteyebilirsiniz. Aşağıdaki kod snippet'i, bir işleyicinin nasıl tanımlanıp iletileceğini gösterir:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.options, menu)

    // Define the listener.
    val expandListener = object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
            // Do something when the action item collapses.
            return true // Return true to collapse the action view.
        }

        override fun onMenuItemActionExpand(item: MenuItem): Boolean {
            // Do something when it expands.
            return true // Return true to expand the action view.
        }
    }

    // Get the MenuItem for the action item.
    val actionMenuItem = menu?.findItem(R.id.myActionItem)

    // Assign the listener to that action item.
    actionMenuItem?.setOnActionExpandListener(expandListener)

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);

    // Define the listener.
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when the action item collapses.
            return true;  // Return true to collapse action view.
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do something when it expands.
            return true;  // Return true to expand the action view.
        }
    };

    // Get the MenuItem for the action item.
    MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

    // Assign the listener to that action item.
    MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true;
}

İşlem sağlayıcı ekle

İşlem sağlayıcı bildirmek için İşlem ekleme ve işleme bölümünde açıklandığı gibi araç çubuğunun menü kaynağında bir <item> öğesi oluşturun. Bir actionProviderClass özelliği ekleyin ve bunu işlem sağlayıcı sınıfı için tam sınıf adı olarak ayarlayın.

Örneğin, aşağıdaki kod, AndroidX kitaplığında tanımlanan ve uygulamanızın diğer uygulamalarla veri paylaşmasına olanak tanıyan bir widget olan ShareActionProvider özelliğini tanımlar:

<item android:id="@+id/action_share"
    android:title="@string/share"
    app:showAsAction="ifRoom"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>

Bu durumda, ShareActionProvider kendi grafiklerini sağladığından widget için simge beyan edilmesi gerekmez. Özel bir işlem kullanıyorsanız bir simge belirtin.

Ek kaynaklar

  • Üst uygulama çubuğunuza paylaşma işlemi eklemeyle ilgili bir örnek için bkz. ShareActionProvider.
  • Özel işlem sağlayıcı oluşturma hakkında daha fazla bilgi için ActionProvider adresine bakın.