Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Giriş

Kayıt Ol

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi adipiscing gravdio, sit amet suscipit risus ultrices eu. Fusce viverra neque at purus laoreet consequa. Vivamus vulputate posuere nisl quis consequat.

Android Butter Knife Kullanımı

Merhaba arkadaşlar bu dersimizde sizlere ; son zamanlarda Android dünyasına yönelik geliştirmiş olduğu kütüphaneler ile ( Picasso, ActionBarSherlock, Retrofit vb. ) öne çıkan Square şirketinin ortaya çıkardığı Butter Knife isimli kütüphanenin nasıl kullanılacağını anlatacağım.

Butter Knife bir View Injector kütüphanesidir bu kütüphane sayesinde ön yüzde kullandığımız android bileşenlerini annotation’lar kullanarak uygulamamızda direkt olarak erişebilmemizi sağlıyor. Aynı zamanda uygulamalarımızda kullandığımız view lere, verdiğimiz tıklanma event lerini de, projemize daha pratik bir şekilde eklememize yardımcı oluyor. Bu kütüphanenin temel amacı kod tekrarını azaltmak ve yazılımcılara daha hızlı ve daha pratik çözümler sunmaktır.

Butter Knife kütühanesini Android Studio da kullanabilmemiz için AndroidManifest.xml dosyamızda build.gradle kısmına aşağıdaki kod bloğunu yapıştırıyoruz.

* Bu kütüphane bizlere ; her bir view tanımladıktan sonra o view lere erişmek için kullandığımız findViewById methodu yerine daha kısa bir çözüm yolu sunuyor

*  Oluşturulan çoklu view leri listelerde yada array lerde gruplandırabildiğimiz gibi, tek bir komut ile view leri şekillendirebilmemizi sağlıyor. ( ACTION, SETTERS vb. interface yapıları kullanarak )

*  Kod tekrarı yapmaktan kurtuluyoruz.

3 tane button yarattık ve buttonlara ayrı ayrı tıklandığı zaman Toast mesajı ekrana bastırmak istiyoruz diyelim: Butter Knife kütüphanesi olmadan bu işlemi nasıl gerçekleştiriyoruz : Aşağıdaki kod bloğunda gördüğünüz gibi tanımladığımız üç butona da erişmek için findViewById methodunu kullandık ve setOnClickListener eventini her butona ayrı ayrı verirken de uzun bir şekilde kodlamamızı yaptık.

MainActivity.java

Şimdi ise Butter Knife kütüphanesi kullanarak yukarıdaki işlemleri nasıl yaptığımıza bakalım : aşağıdaki kodlama yapısına baktığımız zaman findViewById lerin yerine @Bind ile buttonları tanımladığımızı göreceksiniz. Ayrıca yukarıda kullandığımız setOnClickListener methodu yerine de @OnClick ile bu işlemi yaptığımızı göreceksiniz. İşte bu şekilde hem kod fazlalığını azaltmış olduk hemde daha basit bir hale getirdik. İki örnek kodlama da karşınızda sizde inceleyip hangisinin daha kolay olduğunu görebilirsiniz.

MainActivity.java

Uygulamamızın görsel kısmı da aşağıdadır.

activity_main.xml

Ayrıca, String , Color, Drawable gibi android kaynaklarını da aynı şekilde oluşturarak kod tekrarları yapmaktan kurtulmuş oluyoruz. Örnek kodlama yapısı aşağıdadır:

Peki bu yapı nasıl çalışıyor şimdi ise ona bakalım; derleme işleminin aşamalarından birisi olan Annotation Processing sayesinde bu işlemler hızlıca gerçekleşir. Uygulamalarımızın runtime sırasında daha annotation lar oluşmamıştır. Uygulamayı derlediğimiz zaman Annotation Processor yapısı ortaya çıkarak projedeki tüm  .java uzantılı sınıfları tarayarak annotationları bularak kod satırına çevirir. Butter Knife kütüphanesinin yaptığı işte budur; annotation ları bularak ide tarafından okunabilir kodlara çevirir. Sizde Butter Knife gibi bir View Injector kütüphanesi oluşturabilirsiniz bunun için de kendi Annotation Processor sınıfını oluşturmanız gerekmektedir.

Bu dersimiz için hazırlamış olduğum uygulamayı indirip kaynak kodlarını incelerseniz sizin için daha faydalı olacaktır. Comment içine aldığım methodlarıda açarak hangi kodun ne için yazıldığını anlayabilirsiniz.

ButterKnife.Action ve ButterKnife.Setter methodlarınıda uygulamada kullandım. Action methodunda ilk butona tıklandığı anda çalışması gereken kod bloğu yer almaktadır. Kısaca anlatacak olursam; uygulamadaki birinci butona tıkladığımız anda Butter Knife kütüphanesinin Action methodu devreye giriyor ve çalışıyor bu method Button tipinde android bileşenlerini barındıran bir Liste ile birlikte methodun kendi ismini alıyor. Daha sonra aldığımız Liste de yer alan butonların index lerine göre renklerini değiştiriyor. Zaten kaynak kodlarını incelersek yorum şeklinde açıklamalar yaptığımı göreceksiniz.

Button tipinde android bileşenlerini barındıran bir List yapısı oluşturmak için bunu yapıyoruz: ( Aşağıda gördüğünüz gibi ; bu uygulamada 3 adet buton kullandığımız için o butonların id lerini tanımladık ve buttons_list adını verdiğimiz List yapısını oluşturduk. )

Oluşturduğumuz butonların renklerini değiştirmek için de yukarıda bahsetmiş olduğum ButterKnife.Action yapısından faydalandık. ( Aşağıda gördüğünüz gibi changeColor adını verdiğimiz Action yapısını oluşturduk ve butonlara renklendirme işlemini tamamladık. )

Yukarıda yazmış olduğumuz Action methodunu çalıştırmak için de birinci butonumuzu yine Butter Knife kütüphanesine bağlı olan apply komutu ile tetikledik.

Action ve Setter methodlarının da bulunduğu kodlarımızın bütününe bakacak olursak :

MainActivity.java

Evet arkadaşlar bu dersimizin de sonuna geldik. Özetleyecek olursam, Butter Knife sayesinde kod tekrarından kurtulduğumuz gibi pratik çözümlere de ulaşmış oluyoruz. Özellikle List yapısında view leri gruplayıp kullanabileceğimiz gibi, her view in tıklama eventini kontrol edebiliyoruz. Ayrıca, Activity dışında bir yapıyı oluştururken olsun (örnek: Fragment ) , Adapter yapısını oluştururken olsun her yerde Butter Knife kütüphanesinin özelliklerini kullanabiliriz.

Bu kütüphane ile ilgili ayrıntılı bilgiye ulaşmak isterseniz aşağıdaki linklerden faydalanabilirsiniz.

https://github.com/JakeWharton/butterknife ,  http://jakewharton.github.io/butterknife/  )

Ders hakkında soru ve önerilerinizi çekinmeden yorum bırakabilirsiniz. Bol Android’li günler sizin olsun 🙂

Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir. Diğer dersimde görüşmek üzere kendinize iyi bakın..

Yazar Hakkında

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014) Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)
  • ali

    çokta gerekli değil

    • Alper Beyler

      kullanıp kullanmamak size kalmış sonuçta adamlar böyle bir kütüphane ortaya çıkarmışlar bence kullanışlı ve kolay

    • Selim Emre Toy

      Tabi alışkanlıkları terk etmek kolay değil, şimdilik bende sizin gibi düşünüyorum 🙂

  • mustafa_basli

    ben projemde kullanmıştım bahsettiğiniz gibi kod fazlalığından kurtarıyor , performans açısından normal şekilde kullanmaya göre daha hızlı olduğunu duymuştum doğru mudur ?

    • Alper Beyler

      yukarıda belirtmiş olduğum gibi run-time sırasında annotation lar daha oluşmamış oluyor ve annotation processor ile kütüphane işlemindeki @Bind vb. işlemler tetikleniyor hem kod fazlalığının atılması hem de çalışma prensibi yüzünden de performans olarak daha hızlı

  • hasanbayraktar

    hocam dersiniz için teşekkürler sitenizi severek takip ediyorum , bir sorum olacak square in çıkarmış olduğu Retrofit kütüphanesi ile ilgili bir ders yayınlayabilir misiniz ?

    • Alper Beyler

      Merhabalar, Retrofit ile ilgili bir ders yayınlamayı düşünüyorum en kısa zamanda, ilginiz için saolun

      • hasanbayraktar

        Siz saolun hocam sabırsızlıkla bekliyorum dersinizi