AppBar ile çalışma

Uygulamanın üst çubuğu uygulama pencerenizin üst kısmı boyunca tutarlı bir yer sağlar. bilgileri ve işlemleri görüntüleyebilirsiniz.

üst uygulama çubuğu örneği
Şekil 1. Üst uygulama çubuğu örneği.

Uygulama çubuğunun sahipliği, uygulamanızın ihtiyaçlarına göre değişir. Zaman parça kullanarak, uygulama çubuğu bir Sahibi ActionBar ana makine etkinliği veya parçanızın düzenindeki bir araç çubuğu tarafından bulunabilir.

Tüm ekranlarınızda, her zaman üst kısımda ve ekranın genişliğini kaplayorsa, Google Play Müzik'teki işlem çubuğunda görünür. Tema uygulama çubukları kullanmak, tutarlı bir görünüm sağlıyor ve seçenek menüleri ve Yukarı düğmesi.

Üzerinde daha fazla denetime sahip olmak istiyorsanız parça tarafından barındırılan uygulama çubuğunun boyutu, yerleşimi ve animasyonu ekranları. Örneğin, daraltılabilen bir uygulama çubuğuna veya ekranın yalnızca yarısını kaplar ve dikey olarak ortalanır.

Farklı durumlar, şişirme gibi konular için farklı yaklaşımlar gerektirir ve kullanıcı etkileşimine yanıt verme hakkında bilgi edinebilirsiniz. Farklı reklam öğelerini anlama ve uygulamanız için en iyi seçeneği kullanmak size zaman kazandırır uygulamanızın düzgün çalıştığından emin olun.

Bu konudaki örneklerde, şunları içeren bir ExampleFragment referans alınmıştır: profili oluşturabilirsiniz. Parça aşağıdakileri şişirir Uygulama çubuğunda XML tanımlı menü:

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

    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/ic_settings"
        android:title="@string/settings"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_done"
        android:icon="@drawable/ic_done"
        android:title="@string/done"
        app:showAsAction="ifRoom|withText"/>

</menu>

Menüde iki seçenek bulunur: biri profil ekranına gitmek için. ve yapılan profil değişikliklerini kaydetmek için birini tıklayın.

Etkinliğe ait uygulama çubuğu

Uygulama çubuğu, en yaygın olarak düzenleyen kullanıcıya aittir. Uygulama çubuğu bir etkinliğe aitse, parçalar uygulama çubuğuyla etkileşimde bulunabilir parça oluşturma sırasında çağrılan çerçeve yöntemlerini geçersiz kılarak.

Etkinlikle kaydol

Uygulama çubuğu parçasınızın katıldığını sisteme bildirmeniz gerekir seçenekleri vardır. Bunun için şu numarayı arayın: setHasOptionsMenu(true) aşağıda gösterildiği gibi, parçanızın onCreate(Bundle) yönteminde örnek:

Kotlin

class ExampleFragment : Fragment() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setHasOptionsMenu(true)
    }
}

Java

public class ExampleFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }
}

setHasOptionsMenu(true), sisteme parçanızın menüyle ilgili geri çağırmalar almak istiyor. Menüyle alakalı bir kullanıcı tıklama gibi bir etkinlik gerçekleştiğinde etkinlik işleme yöntemi, parçada çağrılmadan önce ilk olarak etkinliği çağırır.

Ancak uygulama mantığınızda bu sıraya güvenmeyin. Aynıysa etkinlik birden fazla parça barındırıyor, her parça menü sağlayabilir seçenekleri sunar. Bu durumda geri arama sırası, parçaların eklendiği zaman gösterilir.

Menüyü şişir

Menünüzü uygulama çubuğunun seçenekler menüsüyle birleştirmek için geçersiz kıl onCreateOptionsMenu() oluşturmanız gerekir. Bu yöntem, geçerli uygulama çubuğu menüsünü ve bir Parametre olarak MenuInflater. Tekliflerinizi otomatikleştirmek ve optimize etmek için parçanızın menüsünün bir örneğini oluşturmak için menüyü şişirin ve ardından aşağıdaki örnekte gösterildiği gibi geçerli menüye ekleyin:

Kotlin

class ExampleFragment : Fragment() {
    ...
    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.sample_menu, menu)
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
       inflater.inflate(R.menu.sample_menu, menu);
    }
}

Şekil 2'de güncellenen menü gösterilmektedir.

seçenekler menüsü artık menü parçanızı içerir
Şekil 2. Seçenekler menüsü artık menünüzü içeriyor emin olmanız gerekir.

Tıklama etkinliklerini yönetme

Seçenekler menüsünde katılan her etkinlik ve parça, ve dokunmalara yanıt verebilir. Parçanın onOptionsItemSelected() seçilen menü öğesini parametre olarak alır ve bir boole değeri döndürür değeri gösterilir. Bir etkinlik veya parça, onOptionsItemSelected() öğesinden true döndürür, hayır diğer katılımcı parçalar geri çağırmayı alır.

onOptionsItemSelected() uygulamanızda switch kullanın itemId ifadesini içeren bir metin görürsünüz. Seçilen öğe sizindir, dokunmaya uygun şekilde hareket edin ve belirtmek için true konumuna geri dönün emin olun. Seçilen öğe super uygulamasını çağırın. Varsayılan olarak, super uygulama, menü işlemenin devam etmesine izin vermek için false değerini döndürür.

Kotlin

class ExampleFragment : Fragment() {
    ...
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.action_settings -> {
                // Navigate to settings screen.
                true
            }
            R.id.action_done -> {
                // Save profile changes.
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:  {
                // Navigate to settings screen.
                return true;
            }
            case R.id.action_done: {
                // Save profile changes.
                return true;
            }
            default:
                return super.onOptionsItemSelected(item);
        }

    }

}

Menüyü dinamik olarak değiştirme

Bir düğmeyi gizlemek veya göstermek ya da onPrepareOptionsMenu(). Bu yöntem, menü gösterilmeden hemen önce çağrılır.

Önceki örnekten devam ettiğimizde Kaydet düğmesi kullanıcı düzenlemeye başlayana kadar görünmez. Kullanıcı düzenleme yaptıktan sonra kaydediyor. Bu mantığı onPrepareOptionsMenu() işlevine eklemek şunları sağlar: aşağıdaki adımları uygulayın:

Kotlin

class ExampleFragment : Fragment() {
    ...
    override fun onPrepareOptionsMenu(menu: Menu){
        super.onPrepareOptionsMenu(menu)
        val item = menu.findItem(R.id.action_done)
        item.isVisible = isEditing
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    @Override
    public void onPrepareOptionsMenu(@NonNull Menu menu) {
        super.onPrepareOptionsMenu(menu);
        MenuItem item = menu.findItem(R.id.action_done);
        item.setVisible(isEditing);
    }
}

Menüyü güncellemeniz gerektiğinde (ör. kullanıcı Profil bilgilerini düzenlemek için Düzenle düğmesi invalidateOptionsMenu() sistemin onCreateOptionsMenu() işlevini çağırmasını istemek için barındırıcı etkinliğinde oturum açın. Geçersiz kılma işleminden sonra onCreateOptionsMenu() sayfasında güncelleme yapabilirsiniz. Bir kez menü şişir, sistem onPrepareOptionsMenu() işlevini çağırır ve parçanın mevcut durumunu yansıtacak şekilde değişir.

Kotlin

class ExampleFragment : Fragment() {
    ...
    fun updateOptionsMenu() {
        isEditing = !isEditing
        requireActivity().invalidateOptionsMenu()
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    public void updateOptionsMenu() {
        isEditing = !isEditing;
        requireActivity().invalidateOptionsMenu();
    }
}

Parçaya ait uygulama çubuğu

Uygulamanızdaki çoğu ekranda uygulama çubuğu yoksa veya ekranın diğerlerinden farklı bir uygulama çubuğu olması gerekiyorsa, bir uygulama çubuğu Toolbar parça düzeni. Şurada herhangi bir yere Toolbar ekleyebilirsiniz: parçasının görünüm hiyerarşisini seçerseniz, onu genellikle sayfanın en üstünde ekranda görebilirsiniz. Parçanızda Toolbar kullanmak için bir kimlik sağlayın ve diğer tüm öğelerde olduğu gibi parçanızda buna görünüm. Araç çubuğunu CoordinatorLayout ve bunları kontrol etmenizi sağlar.

<androidx.appcompat.widget.Toolbar
    android:id="@+id/myToolbar"
    ... />

Parçaya ait bir uygulama çubuğu kullanırken Google, Toolbar API'lerini doğrudan kullanabilirsiniz. Şunu kullanmayın setSupportActionBar() ve Fragment menü API'lerini etkinleştirin.

Menüyü şişir

Toolbar kolaylık yöntemi inflateMenu(int), parametre olarak kullanabilirsiniz. Bir XML menü kaynağını araç çubuğunuzdan, resId öğesini aşağıdaki gösterildiği gibi bu yönteme iletin örnek:

Kotlin

class ExampleFragment : Fragment() {
    ...
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        ...
        viewBinding.myToolbar.inflateMenu(R.menu.sample_menu)
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        ...
        viewBinding.myToolbar.inflateMenu(R.menu.sample_menu);
    }

}

Başka bir XML menü kaynağını şişirmek için Yeni menünün resId. Yeni menü öğeleri menüye eklenir ve mevcut menü öğeleri değiştirilmez veya kaldırılmaz.

Mevcut menü grubunu değiştirmek istiyorsanız, önce menünün alt tarafındaki aşağıda gösterildiği gibi, yeni menü kimliğiyle inflateMenu(int) çağrılıyor örnek:

Kotlin

class ExampleFragment : Fragment() {
    ...
    fun clearToolbarMenu() {
        viewBinding.myToolbar.menu.clear()
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    public void clearToolbarMenu() {

        viewBinding.myToolbar.getMenu().clear()

    }

}

Tıklama etkinliklerini yönetme

Bir OnMenuItemClickListener kullanarak doğrudan araç çubuğuna setOnMenuItemClickListener() yöntemidir. Kullanıcı bir menü öğesi seçtiğinde bu işleyici çağrılır veya araç çubuğunun sonunda sunulan işlem düğmelerinden görebilirsiniz. Seçilen MenuItem, dinleyicinin onMenuItemClick() yöntemini kullanır ve aşağıda gösterildiği gibi işlemi kullanmak için kullanılabilir örnek:

Kotlin

class ExampleFragment : Fragment() {
    ...
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        ...
        viewBinding.myToolbar.setOnMenuItemClickListener {
            when (it.itemId) {
                R.id.action_settings -> {
                    // Navigate to settings screen.
                    true
                }
                R.id.action_done -> {
                    // Save profile changes.
                    true
                }
                else -> false
            }
        }
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        ...
        viewBinding.myToolbar.setOnMenuItemClickListener(item -> {
            switch (item.getItemId()) {
                case R.id.action_settings:
                    // Navigate to settings screen.
                    return true;
                case R.id.action_done:
                    // Save profile changes.
                    return true;
                default:
                    return false;
            }
        });
    }
}

Menüyü dinamik olarak değiştirme

Parçanız uygulama çubuğuna sahip olduğunda Toolbar öğesini şuradan değiştirebilirsiniz: diğer görünümlerde olduğu gibi çalışır.

Önceki örnekten devam ettiğimizde Kaydet menü seçeneği kullanıcı düzenlemeye başlayana kadar görünmez. Bu durumda, tekrar dokunun:

Kotlin

class ExampleFragment : Fragment() {
    ...
    fun updateToolbar() {
        isEditing = !isEditing

        val saveItem = viewBinding.myToolbar.menu.findItem(R.id.action_done)
        saveItem.isVisible = isEditing

    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    public void updateToolbar() {
        isEditing = !isEditing;

        MenuItem saveItem = viewBinding.myToolbar.getMenu().findItem(R.id.action_done);
        saveItem.setVisible(isEditing);
    }

}

Araç çubuğunun başında gezinme düğmesi varsa bu düğme görünür. Araç çubuğunda bir gezinme simgesi ayarlamak onu görünür hale getirir. Ayrıca transkriptinizi her seferinde çağrılan gezinmeye özgü bir onClickListener() kullanıcı, aşağıda gösterildiği gibi gezinme düğmesini tıklar örnek:

Kotlin

class ExampleFragment : Fragment() {
    ...
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        ...
        myToolbar.setNavigationIcon(R.drawable.ic_back)

        myToolbar.setNavigationOnClickListener { view ->
            // Navigate somewhere.
        }
    }
}

Java

public class ExampleFragment extends Fragment {
    ...
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        ...
        viewBinding.myToolbar.setNavigationIcon(R.drawable.ic_back);
        viewBinding.myToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Navigate somewhere.
            }
        });
    }
}