Android

Android Navigation Drawer ile Slide Menü – 3

Selamlar herkese, serinin üçüncü yazısında menümüze son özelliklerini vereceğiz. Ve artık bu yazıyla menü serisini sonlandırmış olacağız. Şimdi gelelim meselemize. Buraya kadar menüyü oluşturup, sayfalar ekledik. Şimdi ise ufak bir özellik daha ekleyip, performans amaçlı bir ipucu ile bitirmiş olacağız.

İlk olarak menü öğelerine tıklanıldığında arkaplanlarının değişmesi özelliğini ekleyelim. Bunun için menü öğelerine normal hali ve basılı hali için birer arkaplan tasarlamamız gerekiyor. Öğenin normal hali için aşağıdaki dosyayı res–> drawable klasörünün altında oluşturuyoruz.

menu_item_normal.xml

Basılı hali için aşağıdaki dosyayı oluşturuyoruz.

menu_item_pressed.xml

Uygulamanın hangi arkaplanı seçeceğini anlaması için bir selector dosyasına ihtiyacımız var. Yine drawable klasörünün altında aşağıdaki dosyayı oluşturuyoruz.

menu_item_bg.xml

Daha önce hazırladığımız activity_main.xml dosyasının içindeki listview içine listSelector özelliğini ekliyoruz ve menu_item_bg.xml dosyasını selector olarak atıyoruz.

activity_main.xml

Son olarak menü öğelerinin tasarımını yaptığımız slidemenu_item.xml dosyasındaki arkaplanı @drawable/menu_item_bg olarak değiştiriyoruz.

Buraya kadar her şey tamam. Şimdi son bir özellikten daha bahsedelim. Menü öğelerimizin arasında bulunan çizgiler yani divider özelliği eğer custom listview tasarlarsanız kaybolabiliyor veya biz kendi istediğimiz gibi renk vermek isteyebiliyoruz.

device-2013-01-24-130601

Bunu yapmak için listview içerisinde bulunan divider özelliğini kullanacağız. activity_main.xml dosyamızı açıp aşağıdaki gibi güncelliyoruz.

activity_main.xml

Renk dosyamızı da aşağıdaki gibi güncelleyelim.

color.xml

Görsel olarak bir menüye verebileceğimiz en temel yetenekleri kazandırmış olduk. Son olarak aslında sadece menü ile alakalı olmayan, hatta menüde kullanılması zorunlu olmayan bir yapıdan bahsedelim. Bahsettiğim yapı “ViewHolder” tasarım deseni. Peki nedir ViewHolder?

ViewHolder tasarım deseni listview’e verinin yüklenmesi sırasında, yüklenme hızını artırmak için kullanılıyor.  Bunu nasıl sağlıyor diye sorarsak basitçe şöyle anlatabiliriz; Listview için her item yükleneceği sırada findViewById() ile bileşenleri yani view çağrılıp ve içine veriler yükleniyor ve ekrana basılıyor. Elimizde ne kadar veri varsa her seferinde bu işlem gerçekleşiyor. Bu durum elimizde binlerce veri olduğunda sıkıntı oluşturuyor ve performans kaybı yaşıyoruz. ViewHolder burada devreye giriyor ve her seferinde yeni bir view oluşturması yerine, eski view tekrar kullanılıyor ve veriler yüklenip ekrana basılıyor. Bu sayede ram şişmesi gibi bir problemden de kurtulmuş oluyoruz. Ancak burada şunu belirtmeliyim bizim menümüz veya yapacağınız 10 – 15 öğeli bir menü için bu yapı gözle görülür bir performans artışı sağlamaz. Bu yapıyı hem diğer listview yapılarınızda hem de material design menü de kullanacığımız için tanıtmak istedim.

ViewHolder desenini Adapter dosyamızın içine yerleştirelim.

SlideMenuAdapter.java

Öncelikle statik bir ViewHolder sınıfı oluşturuyor ve bileşenlerimizi burada tanımlıyoruz. holder nesnemizi tanımlayıp bileşenleri bu nesne üzerinden çağırıp, oluşturuyoruz. Burada setTag() metodunu var olan holder nesnesini kontrol etmek için kullanıyoruz.

Menü yazılarımızın sonuna geldik. Tüm sorularınızı ve önerilerinizi buradan beklerim.

Ekran Görüntüleri

Fullscreen_27_06_15_18_59

Kaynak Kodlar

Projenin tümüne GitHub dan ulaşabilirisiniz.

Bir sonraki yazıda görüşmek üzere 🙂

 

Önceki Yazı

Android Navigation Drawer ile Slide Menü – 2

İstanbul’un amatör seyyahı. Kod yazmak hayat felsefesi. Android, Java, C# ve Javascript’le yakından, tüm teknoloji dünyasıyla uzaktan ilgileniyor. Drone meraklısı ama sahibi değil.
  • mkatr34

    Merhaba,
    Bir tane sol bir tane sağ ekleniyor peki sol tarafa 2 adet slider menu eklemek mümkün mü?