Context Menü (İçeriğe has menü ) Oluşturmak
Orijinal Döküman
Menü kavramına giriş yaptığımız yazımızda kısaca değindiğimiz Context Menu kavramını bu bölümde daha detaylı olarak ele alacağız. Ben de sizler gibi bu konuyu en iyi öğrenebileceğim kaynak olan Developer.android.com adresini gün içinde defalarca ziyaret ederek hem kendim, hem de sizlerin bu kaynağın Türkçeleştirilmiş hâline erişerek bu işi öğrenmemizi amaçladığımı da tekrardan buradan aktarmak isterim.
Menü kavramına giriş yaptığımız yazımızda kısaca değindiğimiz Context Menu kavramını bu bölümde daha detaylı olarak ele alacağız. Ben de sizler gibi bu konuyu en iyi öğrenebileceğim kaynak olan Developer.android.com adresini gün içinde defalarca ziyaret ederek hem kendim, hem de sizlerin bu kaynağın Türkçeleştirilmiş hâline erişerek bu işi öğrenmemizi amaçladığımı da tekrardan buradan aktarmak isterim.
Contextual Menü, UI içindeki Context Frame veya belirli itemleri etkileyecek menü işlemleri sağlar. Herhangi bir View için Contextual Menü tanımlaması yapabilirsiniz ama, bu özellik sıklıkla kullanıcının her bir item için doğrudan işlem yapabileceği ListView ve GridView ya da diğer view koleksiyonları için kullanılır.
Contextual işlemleri sağlamak için 2 yöntem vardır. Bunlar;
- Floating Context Menü: Menü, kullanıcının uzun süreli dokunmaları sonucu diyaloglar ile benzer şekilde floating list menü şeklinde görünür. Kullanıcılar aynı anda sadece bir item için contextual işlem gerçekleştirebilir.
- Contextual Action Mode: Bu mod, ekranın üst kısmında seçili itemlerin etkileneceği işlem listesini görüntüleyen contextual action bar bir ActionMode uygulamasıdır. Bu mod aktif olduğunda (uygulamanız izin veriyorsa) aynı anda birden fazla seçili olan menü itemi için işlem yapılmasını sağlar.
NOT: Contextual Action Mod Android 3.0 ve daha yeni sürümler için sağlanır ve contextual actions gösterimi için tercih edilen bir tekniktir. Android 3.0'dan daha eski sürümler için bir uygulama geliştiriyorsanız, floating contextual menü özelliğini tercih etmeniz gerekir.
Floating Contextual Menü Oluşturmak
Floating Context Menü oluşturmak için,
- registerForContextMenu() metodu aracılığıyla ilişkilendirilmiş Context Menü View'ini Register edip ardından bunun View'e geçirmelisiniz. Aktivitiniz ListView veya GridView seçeneklerinden birini kullanıyorsanız ve her itemin aynı context menüyü sağlamasını istiyorsanız, Context Menü için tüm itemleri register edip ListView veya GridView'leri registerForContextMenu() 'ye parametre olarak geçmelisiniz.
- onCreateContextMenu() metodunu Aktivitinize veya Fragment'inize uygulayın. Register edilen view'ler uzun-tıklama olayını aldıklarında, sistem onCreateContextMenu() metodu sistem tarafından çağrılır. Bu metot her zaman menu resource'nin inflate edildiği ve menü itemlerinin tanımlandığı yerdir.
Örnek Kod:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
MenuInflater size, menu resource'de tanımlı olan context menüyü ekranda gösterme imkânı sağlar. Geri dönüş metodu parametreleri Context Menü'de yer alan ve kullanıcını seçtiği View'leri içerir. ContextMenuInfo nesnesi, seçili menü itemleri hakkında ek bilgiler sağlar. Eğer aktivitiniz'de yer alan viewlerın her biri farklı context menü sağlıyorsa, hangi context menü'nün gösterileceğine (inflate) karar verebilmek için bu parametreleri kullanmalısınız.
3. onContextItemSelected() metodunu uygulayın ( implemente edin). Kullanıcı menü itemini seçtiğinde, belirlemiş olduğunuz uygun işlemi gerçekleştirmek için sistem bu metodu çağıracaktır.
Örnek Kod:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.edit:
editNote(info.id);
return true;
case R.id.delete:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
getItemId() metodu, XML menü resource'de "android:id" niteliği ile belirlemiş olduğunuz ve seçilmiş olan menü itemi için benzersiz olan ID'yi sorgular. Menü itemi başarı ile ele aldığınızda, dönüş değeri true olur. Menü itemi ele alamadığımızda ise menü itemleri superclass implementetion'a geçirmelisiniz. Aktivitiniz fragment içeriyorsa, bu geri dönüşü ilk olarak aktiviti alır. Ele alınmadığı durumda superclass çağırdığımızda, herhangi bir anda true ya da false değeri dönene kadar sistem olayları her fragment için tek tek geçirir.
android.app.fragment ve Aktiviti için varsayılan dönüş değeri false'dir, bu nedenle Menü itemi başarılı bir şekilde ele alamadığınızda her zaman superclass metodunu çağırmalısınız.
Contextual Action Mode Aktif Etmek
Contextual Action Mode, contextual işlemler uygulayan kullanıcı işlemlerine odaklandığı ActionMode'un sistem uygulamasıdır. Kullanıcı, item seçerek bu modu aktif ettiğinde, contextual action bar ekranın üst kısmında görünür ve seçili item için kullanıcının gerçekleştirebileceği işlemleri sunar. Eğer geliştirici olarak izin sağlarsanız bu mod aktif olduğunda, kullanıcı birden fazla item seçmek, bırakmak ve aktiviti ile bunları taşımak (yine sizin müsade ettiğiniz kadarıyla) gibi işlemleri yapabilir. Action mode pasif olduğunda ve contextual action bar, kullanıcı seçmiş olduğu itmeleri bıraktığında veya BACK butona tıkladığında veya bar'ın sol tarafında yer alan Done işlemini seçtiğinde yukarıda kaybolur.
NOT: Contextual Action Bar, action bar ile ilişkilendirilmiş olmak zorunda değildir. Bu iki birim, contextual action bar, action barın üzerine gelse de birbirinden bağımsız çalışmaktadır.
Eğer Android 3.0 ve daha yeni sürümler için geliştirme yapıyorsanız, floating contextual menü yerine her zaman contextual işlemler için contextual action mod'u kullanmalısınız.
Contextual Actions sağlayan view'ler için, contextual action mod'u aşağıdaki durumlardan biri veya her ikisi için çağırmalısınız.
- Kullanıcı View'e uzun süre tıklama işlemini gerçekleştirirse.
- Kullanıcı View içerisinde check box'a veya benzer bir UI bileşenin işaretlerse.
Uygulamanızın contextual action mod'u nasıl çağıracağı ve her bir işlem için nasıl davranacağı sizin tasarımınıza bağlıdır. Temel olarak iki tasarım vardır:
- Kişisel, isteğe bağlı viewlerin contextual işlemleri için,
- ListView veya GridView içinde yer alan item gruplarında contextual işlemler yığını için. (kullanıcının birden fazla item seçmesine izin verip, tamamı için tek bir işlem yapmasını sağlamak için)
Bir sonraki Yazımızda ise her bir senaryo için gerekli düzenlemeleri tanımlamaktadır.
Görüşmek üzere..
Soru Ve Görüşlerinizi için: JavaVeAndroid