Android Custom View Component Oluşturma

Android Custom View Component Oluşturma

Bu yazıda Android uygulama geliştirirken kullandığımız viewlara benzer kendi custom view componentimizi yazmayı anlatacağım. Bu konu hakkında Türkçe kaynak neredeyse hiç yok. Olanlar ise onDraw() fonksiyonu içeren yolu gösteriyorlar. Eğer view içerisine şekil çizmeyecekseniz bu yol gereksiz. Detaylı bir şekilde okuyun kafanızda oturacaktır.

XML Tasarım Çalışma Mantığı

XML tasarımında kullandığımız her view yeni bir nesne aslında. Biz tasarımda android:id=”textview” ya da android:layout_width=”match_parent” gibi onlarca parametreyi bu classların constructor fonksiyonlarına gönderiyoruz. Fonksiyonlar içerisinde de bu parametreler parse edilip kullanılıyor.

Custom View Parametre Tanımlama

Projenizde res/values klasörü altına attrs.xml isimli bir dosya oluşturun. Bu dosya içerisine kendi viewimiz için gereken parametreleri aşağıdaki gibi tanımlayacağız. Formatlara intellisense yardımıyla bakabilirsiniz.

Yukarıda parametreleri tanımladıktan sonra aşağıdaki gibi name kısmına kendi class ismimizi yazarak componentimizin bu parametreleri alabileceğini belirtiyoruz.

Custom View Class Oluşturma

Projenizde bir Java classı oluşturun. Şu şekilde: CustomButton.java. View özelliklerini kullanabilmek için kendi sınıfımızı LinearLayout sınıfından türetiyoruz. Basit olması açısından LinearLayout’u seçtim. Buraya takılmayın. Amacımız Android’in hazır olarak verdiği View sınıfını LinearLayout üzerinden alıp kullanmak.

Üç adet constructor oluşturmamız gerekiyor. Bu constructor fonksiyonlar class üzerinden yeni bir nesne oluştuğunda çalışacak. init(), initViews() ve parseAttributes() adında üç adet fonksiyon oluşturun. parseAttributes() adında anlıyacağınız gibi viewe gönderdiğimiz parametreli çekmek için. init() fonksiyonu ise viewi render etmeye yarıyor. initViews() ise inflate ettiğimiz xml dosyasındaki nesneleri tanımladığımız yer.

Parametreleri çekerken herhangi bir crash yememek için try-catch içerisinde kullanın. Kullanmazsanız kesinlikle hata alacaksınız.

En önemli olan yer burası. Gördüğünüz gibi inflate kullanıyoruz. Daha önceden res/layout klasörü altında oluşturduğumuz button_custom.xml tasarımını kopyalamış oluyoruz aslında.

İşte bu kadar. Çok basit bir şekilde kendi custom view componentimizi oluşturduk. Artık projenizin her yerinde kullanabilirsiniz.

GitHub