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

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da nasıl bileşen ekleyeceğinizi öğrenin.

AndroidX kitaplığı, kullanıcıların uygulamanızla etkileşim kurması için farklı yollar sunar. Toolbar Eylem ekleme ve işleme bölümünde, düğme veya menü öğesi olabilen bir eylemin nasıl tanımlanacağı açıklanmaktadır. 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şlevsellik sağlayan bir işlemdir. Örneğin, arama işlemi görünümü, kullanıcının etkinlikleri veya parçaları değiştirmesine gerek kalmadan arama metnini uygulama çubuğuna yazmasına olanak tanır.
  • İşlem sağlayıcı, kendi özelleştirilmiş düzenine sahip bir işlemdir. İşlem başlangıçta düğme veya menü öğesi olarak görünür. Kullanıcı işleme dokunduğunda, işlem sağlayıcı, işlemin davranışını tanımladığınız şekilde kontrol eder. Örneğin, işlem sağlayıcı, dokunma işlemine menü göstererek yanıt verebilir.

AndroidX, çeşitli özel işlem görünümü ve işlem sağlayıcı widget'ları sunar. Örneğin, SearchView widget'ı, arama sorgularını girmek için bir işlem görünümü uygular. ShareActionProvider widget'ı, bilgileri diğer uygulamalarla 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 araç çubuğunun menü kaynağında İşlem ekleme ve işleme bölümünde açıklandığı gibi bir <item> öğesi oluşturun. <item> öğesine aşağıdaki özelliklerden birini ekleyin:

  • actionViewClass: işlemi uygulayan bir widget'ın 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österileceğini belirtir. Widget, uygulama çubuğundaysa uygulama, widget'ı simge olarak gösterir. Widget taşma menüsündeyse uygulama, widget'ı menü öğesi olarak gösterir. Kullanıcı işlem görünümüyle etkileşimde bulunduğunda, 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 simge olarak gösterir. Uygulama çubuğunda yer yoksa uygulama, işlemi taşma menüsüne ekler.

Önde ve arkada simgeler bulunan bir arama çubuğunu gösteren resim.
Şekil 1. Önde ve arkada simgeler bulunan arama çubuğu.

Kullanıcı simgeye veya menü öğesine dokunduğunda widget, araç çubuğunu dolduracak şekilde genişler ve kullanıcının widget'la etkileşime geçmesine olanak tanır.

Arama çubuğu odaklandığında açılan arama görünümünü gösteren bir resim.
Şekil 2. Arama çubuğu odaklandığında arama görünümü açılır.

İşlemi yapılandırmanız gerekiyorsa bunu 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şletme işlemine yanıt verme

İşlemin <item> öğesinde collapseActionView işareti varsa kullanıcı işlem görünümüyle etkileşimde bulunana kadar uygulama, işlem görünümünü simge olarak gösterir. Kullanıcı simgeye dokunduğunda onOptionsItemSelected() için yerleşik işleyici, işlem görünümünü genişletir. Etkinlik alt sınıfınız onOptionsItemSelected() yöntemini geçersiz kılıyorsa geçersiz kılma yönteminiz super.onOptionsItemSelected() yöntemini çağırmalıdır. Böylece üst sınıf, işlem görünümünü genişletebilir.

İşlem genişletildiğinde veya daraltıldığında bir şey yapmak istiyorsanız MenuItem.OnActionExpandListener'ı uygulayan bir sınıf tanımlayabilir ve bu sınıfın bir üyesini setOnActionExpandListener()'a iletebilirsiniz. Örneğin, bir işlem görünümünün genişletilip daraltılmasına göre etkinliği güncellemek isteyebilirsiniz. Aşağıdaki kod snippet'inde, bir dinleyicinin nasıl tanımlanacağı ve iletileceği gösterilmektedir:

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

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

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

<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 etmeye gerek yoktur. Özel bir işlem kullanıyorsanız simge bildirin.

Ek kaynaklar

  • Üst uygulama çubuğunuza paylaşma işlemi ekleme örneği için ShareActionProvider bölümüne bakın.
  • Özel işlem sağlayıcı oluşturma hakkında daha fazla bilgi için ActionProvider bölümüne bakın.