Üst uygulama çubuğu, geçerli ekrandaki bilgileri ve işlemleri görüntülemek için uygulama pencerenizin üst kısmında tutarlı bir yer sağlar.
![üst uygulama çubuğu örneği](https://developer.android.com/static/images/guide/fragments/top-app-bar.png?authuser=5&hl=tr)
Uygulama çubuğunun sahipliği, uygulamanızın ihtiyaçlarına göre değişir. Parça kullanırken uygulama çubuğu, ana makine etkinliğine veya parçanızın düzenindeki bir araç çubuğuna ait bir ActionBar
olarak uygulanabilir.
Tüm ekranlarınız, her zaman üstte yer alan ve ekranın genişliğini kapsayan aynı uygulama çubuğunu kullanıyorsa etkinlik tarafından barındırılan ve tema tarafından sağlanan bir işlem çubuğu kullanın. Tema uygulama çubukları kullanmak, tutarlı bir görünüm sunmaya yardımcı olur ve seçenek menüleri ile Yukarı düğmesi barındırmak için bir yer sağlar.
Birden fazla ekranda uygulama çubuğunun boyutu, yerleşimi ve animasyonu üzerinde daha fazla kontrol sahibi olmak istiyorsanız parça tarafından barındırılan bir araç çubuğu kullanın. Örneğin, daraltılabilen bir uygulama çubuğuna veya ekranın yalnızca yarısını kaplayan ve dikey olarak ortalanmış bir uygulama çubuğuna ihtiyacınız olabilir.
Menüleri şişirme ve kullanıcı etkileşimine yanıt verme gibi farklı durumlar için farklı yaklaşımlar gerekir. Farklı yaklaşımları anlamak ve uygulamanız için en iyi olanı kullanmak size zaman kazandırır ve uygulamanızın düzgün bir şekilde çalışmasını sağlar.
Bu konudaki örnekler, düzenlenebilir profil içeren bir ExampleFragment
öğesine referansta bulunur. Parça, uygulama çubuğunda aşağıdaki XML tanımlı menüyü şişirir:
<!-- 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, diğeri de profilde yapılan değişiklikleri kaydetmek için.
Etkinliğe ait uygulama çubuğu
Uygulama çubuğu, genellikle ana makine etkinliğine aittir. Uygulama çubuğunun sahibi bir etkinlik olduğunda parçalar, oluşturma sırasında çağrılan çerçeve yöntemlerini geçersiz kılarak uygulama çubuğuyla etkileşim kurabilir.
Etkinlikle kaydol
Uygulama çubuğu parçanızın seçenekler menüsünü doldurmaya katıldığını sisteme bildirmeniz gerekir. Bunu yapmak için parçanızın onCreate(Bundle)
yönteminde setHasOptionsMenu(true)
yöntemini aşağıdaki örnekte gösterildiği gibi çağırın:
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 istediğini bildirir. Etkinlik işleme yöntemi, tıklama gibi menüyle ilgili bir etkinlik gerçekleştiğinde, parçada çağrılmadan önce ilk olarak etkinlikte çağrılır.
Ancak uygulama mantığınızda bu sırayı temel almayın. Aynı etkinlik birden fazla parça barındırıyorsa her parça menü seçeneklerini sağlayabilir. Bu durumda, geri çağırma sırası parçaların eklenme sırasına bağlıdır.
Menüyü şişirme
Menünüzü uygulama çubuğunun seçenekler menüsüyle birleştirmek için parçanızda onCreateOptionsMenu()
öğesini geçersiz kılın. Bu yöntem, geçerli uygulama çubuğu menüsünü ve parametre olarak bir MenuInflater
değerini alır. Parçanızın menüsünün bir örneğini oluşturmak için menü genişleticiyi kullanın ve ardından aşağıdaki örnekte gösterildiği gibi bunu geçerli menüyle birleştirin:
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österilmiştir.
![seçenekler menüsü artık menü parçanızı içeriyor](https://developer.android.com/static/images/guide/fragments/app-bar-added.png?authuser=5&hl=tr)
Tıklama etkinliklerini işleme
Seçenekler menüsünde yer alan her etkinlik ve parça, dokunma hareketlerine yanıt verebilir. Parçanın onOptionsItemSelected()
özelliği, seçilen menü öğesini parametre olarak alır ve dokunmanın kullanılıp kullanılmadığını belirtmek için bir boole döndürür. Bir etkinlik veya parça onOptionsItemSelected()
öğesinden true
değerini döndürdüğünde, katılan diğer parçalar geri çağırmayı almaz.
onOptionsItemSelected()
uygulamanızda, menü öğesinin itemId
kısmında bir switch
ifadesi kullanın. Seçilen öğe size aitse dokunmayı uygun şekilde kullanın ve tıklama etkinliğinin işlendiğini belirtmek için true
değerini döndürün. Seçilen öğe size ait değilse super
uygulamasını çağırın. Varsayılan olarak, super
uygulaması, menü işlemeye devam etmek 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
onPrepareOptionsMenu()
'te düğmeleri gizleme veya gösterme ya da simgeyi değiştirme mantığını yerleştirin.
Bu yöntem, menü gösterilmeden hemen önce çağrılır.
Önceki örnekten devam edersek, Kaydet düğmesi kullanıcı düzenlemeye başlayana kadar görünmez ve kullanıcı kaydettikten sonra kaybolur. Bu mantığı onPrepareOptionsMenu()
öğesine eklemek menünün doğru şekilde sunulmasını sağlar:
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. bir kullanıcı, profil bilgilerini düzenlemek için Düzenle düğmesine bastığında) sistemin onCreateOptionsMenu()
çağrısı yapmasını istemek için ana makine etkinliğinde invalidateOptionsMenu()
numaralı telefonu arayın.
Geçersiz kılma işleminden sonra, güncellemeleri onCreateOptionsMenu()
üzerinden yapabilirsiniz. Menü genişlediğinde sistem onPrepareOptionsMenu()
öğesini çağırır ve menüyü parçanın mevcut durumunu yansıtacak şekilde günceller.
Kotlin
class ExampleFragment : Fragment() { ... fun updateOptionsMenu() { isEditing = !isEditing requireActivity().invalidateOptionsMenu() } }
Java
public class ExampleFragment extends Fragment { ... public void updateOptionsMenu() { isEditing = !isEditing; requireActivity().invalidateOptionsMenu(); } }
Bir parçaya ait uygulama çubuğu
Uygulamanızdaki çoğu ekranda uygulama çubuğu gerekmiyorsa veya bir ekranda diğerlerinden farklı bir uygulama çubuğu gerekiyorsa parça düzeninize Toolbar
ekleyebilirsiniz. Parçanızın görünüm hiyerarşisinde herhangi bir yere Toolbar
ekleyebilirsiniz ancak bu öğe genellikle ekranın en üstünde tutulur. Parçanızda Toolbar
kullanmak için bir kimlik sağlayın ve diğer tüm görünümlerde olduğu gibi parçanızda buna bir referans alın. Araç çubuğunu, CoordinatorLayout
davranışlarını kullanarak da canlandırabilirsiniz.
<androidx.appcompat.widget.Toolbar
android:id="@+id/myToolbar"
... />
Google, parçaya ait bir uygulama çubuğu kullanırken doğrudan Toolbar
API'lerinin kullanılmasını önerir. Yalnızca etkinliğe ait uygulama çubukları için uygun olan setSupportActionBar()
ve Fragment
menü API'lerini kullanmayın.
Menüyü şişirme
Toolbar
kolay kullanım yöntemi inflateMenu(int)
, bir menü kaynağının kimliğini parametre olarak alır. Bir XML menü kaynağını araç çubuğunuza genişletmek için resId
öğesini, aşağıdaki örnekte gösterildiği gibi bu yönteme iletin:
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
ile yöntemi tekrar çağırın. Yeni menü öğeleri menüye eklenir, mevcut menü öğeleri değiştirilmez veya kaldırılmaz.
Mevcut menü grubunu değiştirmek isterseniz aşağıdaki örnekte gösterildiği gibi, inflateMenu(int)
yöntemini çağırmadan önce menüyü temizleyin:
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 işleme
OnMenuItemClickListener
öğelerini setOnMenuItemClickListener()
yöntemini kullanarak doğrudan araç çubuğuna aktarabilirsiniz. Bu işleyici, kullanıcı araç çubuğunun sonunda sunulan işlem düğmelerinden veya ilgili taşma öğesinde bir menü öğesi seçtiğinde çağrılır. Seçilen MenuItem
, işleyicinin onMenuItemClick()
yöntemine aktarılır ve aşağıdaki örnekte gösterildiği gibi işlemi kullanmak için kullanılabilir:
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 çalışma zamanında Toolbar
öğesini tıpkı diğer görünümlerde olduğu gibi değiştirebilirsiniz.
Önceki örnekten devam edersek, Kaydet menü seçeneği, kullanıcı düzenlemeye başlayana kadar görünmez olmalı ve dokunulduğunda tekrar kaybolmalıdır:
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); } }
Gezinme simgesi ekleme
Araç çubuğunun başında gezinme düğmesi (varsa) görünür.
Araç çubuğuna bir gezinme simgesi ayarlamak, araç çubuğunu görünür hale getirir. Ayrıca aşağıdaki örnekte gösterildiği gibi, kullanıcı gezinme düğmesini tıkladığında çağrılan, gezinmeye özel bir onClickListener()
ayarlayabilirsiniz:
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. } }); } }