← Ana Sayfaya Dön

Androidde Menü Oluşturma

Kategori: Android23 Şubat 2025

Androidde menü oluşturmak için öncelikle bir adet android resouce file oluşturuyoruz.

Bu dosyanın resource type'ını menu olarak seçiyoruz ve ismini my_popup_menu olarak belirliyoruz.

Oluşan xml dosyamıza şu kodları yazalım:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/yuklemeItem" android:title="Yeni Post Oluştur"></item> <item android:id="@+id/cikisItem" android:title="Çıkış Yap"></item> </menu>

Oluşturduğumuz menu xml dosyasına iki adet item ekledik, bunlar yeni post oluştur ve çıkış yap butonları.

Bu butonları aktifleştirmek için şu kodları yazalım:

onViewCreated içerisine

binding.floatingActionButton.setOnClickListener { floatingButtonTiklandi(it)}

Şimdi butonun tıklanma kodunu yazalım. Öncelikle popup menümüzü tanımlamamız gerekiyor.

private lateinit var popup : PopupMenu

Şimdi popup menümüzün tanımlayalım.

popup = PopupMenu(requireContext(),binding.floatingActionButton)

Şimdi bağlama işlemi için MenuInflater'ı tanımlamamız gerekiyor. Layoutlardaki LayoutInflater'ı menülerde MenuInflater ile değiştiriyoruz.

val inflater = popup.menuInflater inflater.inflate(R.menu.my_popup_menu,popup.menu)

Şimdi menüye tıklandığında ne yapılacağını belirleyelim. Bunun için PopupMenu.OnMenuItemClickListener interface'ini implement ediyoruz.

class FeedFragment : Fragment(), PopupMenu.OnMenuItemClickListener

onMenuItemClick fonksiyonunu override etmeyi unutmuyoruz ve onViewCreated içerisinde popup.setOnMenuItemClickListener(this) yapıyoruz.

Bu kod ile birlikte menüye tıklandığında this, yani FeedFragment'ın içerisindeki onMenuItemClick fonksiyonuna atıf veriyoruz.

Şimdi override ettiğimiz onMenuItemClick fonksiyonunun içerisinde menüye tıklandığında ne yapılacağının kodunu yazalım.

override fun onMenuItemClick(item: MenuItem?): Boolean { if (item?.itemId == R.id.yuklemeItem) { val action = FeedFragmentDirections.actionFeedFragmentToYuklemeFragment() Navigation.findNavController(requireView()).navigate(action) } else if (item?.itemId == R.id.cikisItem){ val action = FeedFragmentDirections.actionFeedFragmentToKullaniciFragment() Navigation.findNavController(requireView()).navigate(action) } return true } }

Neye tıklandığında ne yapılacağını belirlemek için yeni bir action oluşturup ona göre navigation yapıyoruz.

Not: Return true yapmamızın sebebi, boolen değer döndürmesi gerektiği içindir.

Şimdi butonumuza tıklandığında popup menümüzün görünmesini sağlayalım.

fun floatingButtonTiklandi(view: View){ popup.show() }
Blog Resmi

Menüdeki butonlara tıkladığımızda artık diğer fragmentlere geçiş yapıyoruz.

Son olarak şimdiye kadarki tüm kodlar şu şekilde olacak:

Not: Bu kodlar sadece menü oluşturma kısmı için geçerlidir. Herhangi bir çıkış yapma işlemi falan tanımlanmamıştır.

package com.bilocan.fotografpaylasma import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu import androidx.navigation.Navigation import com.bilocan.fotografpaylasma.databinding.FragmentFeedBinding import com.bilocan.fotografpaylasma.databinding.FragmentKullaniciBinding class FeedFragment : Fragment(), PopupMenu.OnMenuItemClickListener { private var _binding: FragmentFeedBinding? = null private val binding get() = _binding!! private lateinit var popup : PopupMenu override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = FragmentFeedBinding.inflate(inflater, container, false) val view = binding.root return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.floatingActionButton.setOnClickListener { floatingButtonTiklandi(it)} popup = PopupMenu(requireContext(),binding.floatingActionButton) val inflater = popup.menuInflater inflater.inflate(R.menu.my_popup_menu,popup.menu) popup.setOnMenuItemClickListener(this) } fun floatingButtonTiklandi(view: View){ popup.show() } override fun onDestroyView() { super.onDestroyView() _binding = null } override fun onMenuItemClick(item: MenuItem?): Boolean { if (item?.itemId == R.id.yuklemeItem) { val action = FeedFragmentDirections.actionFeedFragmentToYuklemeFragment() Navigation.findNavController(requireView()).navigate(action) } else if (item?.itemId == R.id.cikisItem){ val action = FeedFragmentDirections.actionFeedFragmentToKullaniciFragment() Navigation.findNavController(requireView()).navigate(action) } return true } }