Menü eklemek için iki tane metodu override etmek gerekiyor. Bir tanesi menüyü oluşturacak, diğeri menü ögelerine tıklandığında yapılacak işlemleri belirleyecek. Menüyü oluşturacak metodun adı onCreateOptionsMenu. R.menu.menu_main: ileride oluşturulacak, menülerin adı ve simgesi gibi nitelikleri belirleyecek xml dosyası.
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
Diğer metot ise, ögelere tıklandığında yapılacak görevler için oluşturuluyor. Parametre olarak seçilen seçeneği alıyor. item.getItemId ile seçilen seçeneğin id değerine ulaşıp switch-case yapısında görevlerini veriyoruz. ayarlar ve paylas kısımları oluşturulacak xml dosyasından geliyor.
@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id){ case R.id.paylas: return true; case R.id.ayarlar: return true; case R.id.gonder: return true; default: return super.onOptionsItemSelected(item); } }
xml dosyasını oluşturalım. Bunun için res klasörüne sağ tıklayıp new -> Android Resource Directory tıklayıp adını menu verin. menuya sağ tıklayıp new -> Menu resource file seçin ve adını menu_main koyun. Burada her <item etiketi ile yeni bir menü ögesi oluşturulabiliyor.
<item android:id="@+id/paylas" android:icon="@android:drawable/ic_menu_share" android:orderInCategory="1" android:title="Paylaş" app:showAsAction="always" /> <item android:id="@+id/ayarlar" android:icon="@android:drawable/ic_menu_preferences" android:orderInCategory="1" android:title="Ayarlar" app:showAsAction="never" /> <item android:id="@+id/gonder" android:icon="@android:drawable/ic_menu_send" android:orderInCategory="2" android:title="Gönder" app:showAsAction="ifRoom|withText" />
icon kısmında Android Studio’nun kendi iconlarından kullandık.
Title kısmı alt sekme veya üstüne basılı tutunca gözükecek yazıyı belirliyor.
OrderInCategory, menü ögelerinin ActionBar üzerinde hangi sırayla duracağını belirtiyor. 0 ilki olmak üzeri 1, 2, 3… diye devam eder.
ShowAsAction, menü ögelerinin ActionBarın üzerinde mi görüneceği yoksa alt menüde mi görüneceğini belirtiyor. Always, her zaman görüneceğini belirtiyor. Never sadece alt menüde görünecek. ifRoom, ActionBar üzerinde yer varsa görünecek. ifRoom|withText, yer varsa metin olarak gözüksün demek.
Kodların son durumu:
menu_main.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/paylas" android:icon="@android:drawable/ic_menu_share" android:orderInCategory="1" android:title="Paylaş" app:showAsAction="always" /> <item android:id="@+id/ayarlar" android:icon="@android:drawable/ic_menu_preferences" android:orderInCategory="1" android:title="Ayarlar" app:showAsAction="never" /> <item android:id="@+id/gonder" android:icon="@android:drawable/ic_menu_send" android:orderInCategory="2" android:title="Gönder" app:showAsAction="ifRoom|withText" /> </menu>
MainActivity.Java
package com.osmananilozcan.nasilyapilirornekleri; //import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id){ case R.id.paylas: return true; case R.id.ayarlar: return true; case R.id.gonder: return true; default: return super.onOptionsItemSelected(item); } } }
Merhabalar. Menü bende normal kullanmak istediğim .xml dosyasında gözükmüyor. gözükmesi için sanki bir iki koda daha gerek var ya da neyi yanlış yapıyor olabilirim?
Merhaba Yusuf,
Anladığım kadarıyla Menu.xml dosyasını oluşturmadınız. Yazının içerisinde nasıl yapılacağı yazmaktadır.
İyi günler.
Teşekkürler. Çok faydalandım.
Teşekkürler.