Anasayfa Mobil Android Programlama Ders 12: Menü, Gruplar, Sıralama, MenuInflater ve Xml Menu

Android Programlama Ders 12: Menü, Gruplar, Sıralama, MenuInflater ve Xml Menu

Android Programlama Ders 12’de Menü, gruplar, sıralama, MenuInflater ve Xml menü seçeneklerini oluşturmayı öğrenerek devam ediyoruz…

Android programlama öğrenmeye devam ediyoruz. Bu derste Id’leri kullanarak menü seçenekleri oluşturmayı öğreneceğiz. Sonra seçenekleri gruplanması ve sınıflandırmayı öğrenerek devam edeceğiz.

Geçen derste add(CharSequence title) metodu kullanarak basit bir menü oluşturmayı öğrendik. Add metodu giriş değişkenleri  olarak metinleri kullanıyor. Add metodunun farklı kullanım imkanları da vardır. add(int groupId, int itemId, int order, CharSequence title) bu biçimde add metodu dört giriş parametresi kullanıyor :

–          groupId – grubun belirleyici (ID’si), menü bu grubun parçasıdır

–          itemId  –  menü seçeneklerinin ID’sini belirliyor

–          order – menü seçeneklerinin gösterme sırasını belirleniyor

–          title – metinleri gösteriyor

Bu parametreleri kullanmak için yeni bir proje oluşturalım. Uygulamanın ekranındaki TextView ve CheckBox nesnelerini kullanacağız.

–          TextView:  Bunu kullanarak, menünün istediğimiz seçeneği yansıtmasını sağlayacağız.

–          CheckBox: Bunu kullanarak basit veya gelişmiş menü seçenekleri arasından seçim yapacağız. Bu özelliği menü grupları kullanarak gerçekleşeceğiz.

Yeni bir proje oluşturalım:

  • Project name: P0012-MenuAdvn
  • Build Target:Android 4.2
  • Application name: MenuAdvn
  • Package name: tr.androidApp.MenuAdvn
  • Create Activity: MainActivity

Main.xml dosyasını açalım, TextView için ID’sini belirliyoruz ve CheckBox’u yaratıyoruz.

Aşağıdaki gibi bir kod olacak.

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<CheckBox
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:id=”@+id/chbExtMenu”
android:text=”gelismis menu”>
</CheckBox>
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:id=”@+id/textView”>
</TextView>
</LinearLayout>

MainActivity.java’yı açalım ve MainActivity klası aşağıdaki kodla dolduralım.

public class MainActivity extends Activity {

// ekranin nesneleri
TextView tv;
CheckBox chb;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// nesneleri buluyoruz
tv = (TextView) findViewById(R.id.textView);
chb = (CheckBox) findViewById(R.id.chbExtMenu);

}

// menu olusturuyoruz
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// menunun secenekleri ekliyoruz
menu.add(0, 1, 0, “add”);
menu.add(0, 2, 0, “edit”);
menu.add(0, 3, 3, “delete”);
menu.add(1, 4, 1, “copy”);
menu.add(1, 5, 2, “paste”);
menu.add(1, 6, 4, “exit”);

return super.onCreateOptionsMenu(menu);
}

// menunun yenilmesi
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// eger CheckBox isaretlidir,ID grubu = 1’in menu secenekleri gorebiliriz

menu.setGroupVisible(1, chb.isChecked());
return super.onPrepareOptionsMenu(menu);
}

// basilmasinin islenmesi
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();

//TextView bize menunun basılmıs secenegı bilgi verecektir
sb.append(“Item Menu”);
sb.append(“\r\n groupId: ” + String.valueOf(item.getGroupId()));
sb.append(“\r\n itemId: ” + String.valueOf(item.getItemId()));
sb.append(“\r\n order: ” + String.valueOf(item.getOrder()));
sb.append(“\r\n title: ” + item.getTitle());
tv.setText(sb.toString());

return super.onOptionsItemSelected(item);
}
}

Uygulamanın import bölümünü yenilemeyi unutmayalım (CTRL+SHIFT+O).

Yukarıdaki yazdığımız kodu ayrıntılı bir şekilde inceleyelim.

onCreateOptionsMenu – Bu metod ilk defa menü açıldığında çağrılıyor. Menü oluşuyor ve sonra kullanılmıyor. Burada menünün seçenekleri ekliyoruz.

onPrepareOptionsMenu –  Menü her açıldığında kullanılıyor. Burada daha önce oluştuğumuz menüde değişikleri yapabiliriz.

onOptionsItemSelected – Menü düğmeye basıldığı zaman çağrılıyor. Burada hangi seçeneği seçtiğinizi görebilirsiniz.

OnCreateOptionsMenu metodunda altı tane menü seçeneği ekliyoruz. Add metodunun parametreleri inceleyelim.

Birinci parametre – grubun ID’sidir. İlk üç seçenekte bu parametre sıfıra eşittir, kalan üç tanesinde ise bir değerine eşittir. Yani copy, paste ve exit seçeneklerinin ID’si bire eşittir. Grubun ID’sini onPrepareOptionsMenu metodunda kullanacağız.

İkinci parametre – menü seçeneklerin ID’si. İşletici hangi menü seçeneğini seçtiğinizi öğrenmek için kullanıyor. Bu parametreyi onOptionsItemSelected metodunda kullanacağız.

Üçüncü parametre – menü seçeneğinin pozisyonu belirleniyor. Sıralama küçüğünden büyüğe gerçekleşiyor.

Dördüncü parametre – menünün seçeneklerde gözüken yazısıdır.

onPrepareOptionsMenu metoduna Menu nesnesi gönderilir ve bu nesneyi kullanabiliriz. Örneğimizde setGroupVisible metodu kullanıyoruz. Bu metod, menü seçeneklerini saklama veya gösterme özelliği sunuyor. İki parametre mevcut, birinci parametre grubun ID’sidir ve ikinci parametre ise boolean değeridir. Grubun ID’si olarak “1” yazıyoruz (Copy, paste ve exit grubu), boolean parametrelerinde CheckBox değeri kullanacağız. CheckBox işaretlediği zaman ekranda ID = 1 grubu göreceğiz. İşaret yoksa görmeyeceğiz.

Kaydedelim ve çalıştıralım.

“Basit” menü:

basit menu

 

“Gelişmiş” menü:

gelismis menu

CheckBox durumuna göre menü 3 veya 6 tane seçenek gösteriyor. Sıralama order parametresine göre yapılıyor. Eğer order değeri birkaç parametrede aynıysa, sıralama kodlarda (onCreateOptionsMenu metodunun içinde) pozisyona göre yapılıyor.

Bir menü seçeneklere basıldığında onOptionsItemSelected metodu bu eylemi işletiyor. Bu metod TextView kullanarak basılmış olan seçenek hakkında bilgi veriyor.

Programı daha iyi anlamak için yeni menü seçenekleri ekleyebilirsiniz ve ekranda hangi pozisyonları alacaklarını araştırabilirsiniz.

 XML – Menü

Menü oluşturmak için daha kullanışlı bir yöntem mevcut. Bu yöntemde layout’taki gibi xml dosyaları kullanacağız. Aynı menüyü oluşturmak için res/menu klasöründe yeni mymenu.xml dosyasını oluşturuyoruz.

<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android">
<item
 android:id="@+id/menu_add"
 android:title="add">
</item>
<item
 android:id="@+id/menu_edit"
 android:title="edit">
</item>
<item
 android:id="@+id/menu_delete"
 android:orderInCategory="3"
 android:title="delete">
</item>
<group
 android:id="@+id/group1">
<item
 android:id="@+id/menu_copy"
 android:orderInCategory="1"
 android:title="copy">
</item>
<item
 android:id="@+id/menu_paste"
 android:orderInCategory="2"
 android:title="paste">
</item>
<item
 android:id="@+id/menu_exit"
 android:orderInCategory="4"
 android:title="exit">
</item>
</group>
</menu>

Burada item – menünün seçeneği ve group – gruptur. Ekrandaki nesnelerde kullandığımız gibi ID parametreleri için @+id/<your_ID formülü kullanıyoruz. Eclipse otomatik olarak ID parametreler için R.java dosyasında ID’leri oluşturacak.

orderInCategory – menü seçeneklerin sıralanması ve title – metini belirleniyor.

onCreateOptionsMenu metodunda artık tek tek menü seçenekleri oluşturmaya gerek kalmadı. Yapacağımız tek şey Menu nesneyi xml-dosyayla bağlamaktır.

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.mymenu, menu);
    return super.onCreateOptionsMenu(menu);
  }

 

getMenuInflater metodu yardımıyla MenuInflater metodu kullanabiliriz. MenuInflater bize inflate metodu kullanmaya imkanları sağlıyor. İnflate iki tane giriş değişkeni kullanıyor. Birinci mymenu.xml ve ikinci menu nesne değişkeni. MenuInflater metodu mymenu.xml kullanarak menu nesnenin içeriğini dolduruyor. Yani mymenu.xml dosyasından menü seçenekleri menu nesnesine kopyalanıyor.

Grubu gizlemek için aynı setGroupVisible metodu kullanıyoruz. ID grubu burada R.id.group1 olarak gerçekleşiyor.

Xml-dosya’nın parametreleri daha ayrıntılı öğrenmek için burada  faydalanabilirsiniz.

Gördüğünüz gibi bu derste iki tane menü oluşturma yöntemleri öğrendik. Birinci yöntem (Programlama) daha esnektir, ikinci (XML) ise daha kısadır (Kodu yazmayı azalıyor).

Gelecek dersimizde içerik menüsü (Context Menu) oluşturmayı öğreneceğiz.