Options Menu Oluşturmak
Orijinal Döküman
Options Menu, ekranda görüntülenen activity içeriği ile (Search-Arama, Compose Mail-Mail Oluştur,Settings-Ayarlar gibi) alakalı işlemler ve diğer seçenekleri içeren menüyü ifade eder.
Options Menu, ekranda görüntülenen activity içeriği ile (Search-Arama, Compose Mail-Mail Oluştur,Settings-Ayarlar gibi) alakalı işlemler ve diğer seçenekleri içeren menüyü ifade eder.
Option Menu'de yer alan itemler, hangi platformda geliştirme yaptığınız ile ilgili olarak ekranda görünüm yeri değişiklik gösterebilir:
- Android 2.3 ve daha eski sürümler için geliştirme yapıyorsanız, options menünüze ait içerikler ekranın alt kısmında Menu butonuna basıldığında görünecektir. İlk görünme anında, seçeneklere ait ikonların yer aldığı kısım görünür. Eğer 6 dan fazla item tanımlanmış olan bir menünüz var ise, Android sistemi 6. menü simgesi yerine overflow ikonu görüntüler ve geri kalan itemler overflow menü olarak kullanıcı More ikonuna tıkladığında görünür.
Android 2.3 ve daha eski sürümlerde Options Menu
- Android 3.0 ve üzeri için uygulama geliştirdiğiniz de, options menu için tanımladığınız itemler action bar'da görüntülenir. Varsayılan olarak, sistem tüm actiondaki itemleri overflow olarak konumlandırır. Kullanıcı ekranın sol üst kısmında yer alan overflow ikona tıklayarak veya eğer varsa Menü butona tıkladığında bu itemler görünür. Önemli işlemlere hızlı erişime imkan tanımak için, <item> elemanı içerisinde android:showAsAction="ifRoom" niteliğini ekleyerek bir kaç itemi actionbar'da görünebilir yapabilirsiniz.
Honeycomb (Android 3.0) galerisinden, Action Bar görünümü
Options Menü için aktivitinizin subclass'ından veya bir Fragment subclass'dan item deklare edebilirsiniz. Eğer aktiviti ve fragment subclass'larınızın her ikiside options menu için item tanımlıyorsa, bunlar UI'de kombine edilir. Aktiviti itemleri ilk görünür ve ardından fragmentlerin aktivitiye eklenme sırasıyla oluşan sıralama ile her bir fragment için menü görüntülenmesi birbirini takip eder. Gerekli görülürse menu itemlerini android:orderInCategory niteliği ile yeniden sıralayabilirsiniz.
Bir aktiviti için options menu tanımlamak için, onCreateOptionsMenu() Override(Fragmentler kendi onCreateOptionsMenu() geri dönüş metotlarına sahiptir.) edilir. Bu yöntemde, XML ile tanımlanmış menu resourcenizi geri dönüş metodunda sağlanan Menu içinde inflate edebilirisiniz.
Örnek Kod: Bu kod bloğu Android Stüdyo ile veya diğer Android IDE'lerde otomatik oluşturulur.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.game_menu, menu);
return true;
}
add() metodu yardımıyla menu itemleri ekleyebilir ve bu itemlere findItem() ile erişip bu itemlerin özelliklerini revize edebilirsiniz. Bunu yapmak için MenuItem API'yi kullanmanız gerekir.
Android 2.3 ve daha eski sürümler için uygulama geliştiriyorsanız, sistem kullanıcının ilk defa menüye erişmesi durumunda options menüyü oluşturmak için onCreateOptionsMenu() çağırır. Eğer Android 3.0 ve daha yeni sürümler için geliştirme yaptığınızda ise, aktiviti başlatıldığı anda onCreateOptionsMenu() metodu sistem tarafından çağırılır ve sıralarına göre menü itemleri action bar'da gösterilmeye başlanır.
Tıklama Olaylarını Ele Almak
Kullanıcı Options menu'den bir item seçtiği zaman, (action bar'daki action itemler dahil), sistem aktivitinizdeki onOptionsItemSelected() metodunu çağırır. Bu metot seçili MenuItem'i parametre olarak alır. Menu itemler için benzersiz ID'leri döndüren getItemId() metodunu çağırarak( menu resource içinde"android:id" niteliği ile veya add() metodu ile verilen int değerler) menü itemlerini belirleyebilirsiniz. Edinilen bu ID'ler ile bilinen menü itemlerini eşleştirerek uygun işlemi gerçekleştirebilirsiniz.
Örnek Kod:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.new_game:
newGame();
return true;
case R.id.help:
showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Eğer menu itemi başarılı bir şekilde ele alabilirseniz true değeri döndürülür, aksi durumda onOptionsItemSelected() metodu superclass ile implemente edilir. ( varsayılan dönüş değeri false'dir)
Aktivitinizde fragmentler var ise, sistem ilk olarak aktiviti için ardından da her aktiviti için onOptionsItemSelected() metodunu true döndürene kadar veya tüm fragmentler çağırılana kadar çalıştırılır.(fragmentler her zaman olduğu gibi eklenme sırasıyla işleme alınır)
Tavsiye:
Android 3.0 XML'de tanımlanan menu itemleri için on-click davranış tanımlamasını android:onClick niteliği ile tanımlama yeteneğini sizin için sağlıyor. Nitelik için belirlenen isim değeri aktiviti içinde tanımlanan metot ile aynı isimde olmalıdır. Bu metot public olmalı ve sistem bu metodu çağırdığında sadece MenuItem parametresini almalıdır. Menü seçildiğinde bu parametre alınmalıdır. Daha fazla bilgi için Menu Resource kaynağı incelenebilir.
Tavsiye:
Eğer uygulamanız birden fazla aktiviti içeriyor ve bu aktivitilerin bazıları aynı Options menüyü kullanıyorsa, onCreateOptionsMenu() ve onItemSeleceted() dışında hiç bir şey içermeyen bir aktiviti oluşturmayı düşünebilirsiniz. Ardından aynı menüyü kullanmayı düşündüğünüz aktivitileri bu sınıftan türeterek aynı Options menüyü paylaşmış olursunuz. Bu yöntem ile, menü işlemlerini ele alan bir kod setini ve oluşturulan bu class'ın soyundan miras alınan her menü davranışını yönetme yeteneği kazanırsınız. Eğer aktiviti soyunda yer alan herhangi bir aktiviti için menu itemi eklemek isterseniz, bu aktiviti içindeki onCreateOptionsMenu() metodunu override etmelisiniz. super.onCreateOptionsMenu(menu) metoduna çağrı yaptığınızda, menu.add() ile eklenmiş olan menu itemler yerine orijinal oluşturulan menü itemleri getirilir. Tabii ki tam tersi durum yani, super calss davranışlarını override ederek kişisel menü itemlerinizi kullanmakta mümkündür.
Çalışma Zamanında Menü İtemlerini Değiştirme
onCreateOptionsMenu() sistem tarafından çağırıldıktan sonra, doldurmak istediğiniz bu Menu örneğini korur ve onCreateOptionsMenu() metodunu bazı nedenlerden dolayı menu geçersiz olmadıkça da çağırmaz. Fakat, ilk menü durumunu oluştururken ve aktiviti lifecycle'de değişiklik yapmak istemediğinizde onCreateOptionsMenu() metodunu kullanmalısınız.
Aktiviti lifecycle sırasında meydana gelen olayları temel alarak Options Menu'de değişiklik yapmak isterseniz, onPrepareOptionsMenu() metodunu kullanabilirsiniz. Bu metot size (add-eklemek, remove-silmek veya menu itemlerini disable-pasif etmek gibi) varolan Menu Nesnelerini sağlar ve bunları değiştirme (modify) imkanı verir.(Fragmentler içinde bu metot sağlanır.)
Android 2.3 ve daha eski sürümler için sistem onPrepareOptionsMenu() metodunu, kullanıcı her Menu butonuna tıklayıp Options Menu'yu açtığında tekrar tekrar çağırır.
Android 3.0 ve daha yeni sürümleri için menü itemleri action bar'da sunulduğu andan itibaren sürekli açık olarak düşünülebilir. Bir olay gerçekleştiğinde ve menüyü güncellemek için invalidateOptionsMenu() metoduna istekte bulunduğunuzda sistem onPrepareOptionsMenu() metodunu çağırır.
NOT: Mevcut ekranda görülen View temelli Options Menülerde itemleri asla değiştirmemelisiniz. Kullanıcının trackball veya d-pad kullanmadığı In-Touch modunda viewler dikkat çekmez, bu nedenle options menüde yer alan itemleri değiştirmek için odaklanmayı teme olarak asla kullanmamalısınız. View'ler için Context Menü hassasiyetine sahip menü itemleri tanımlanmak istiyorsanız Context Menu'yü kullanmalısınız.
Bir Sonraki bölümde ise Context Menu'leri ve Bu meüleri oluşturmayı inceleyeceğiz.
Soru ve Görüşleriniz için : AndroidVeJava