Merhaba, bir önceki yazımızda Android için şehir isimlerinden oluşan basit bir liste hazırlamıştık. Sonrasında ise listemize biraz daha aktivite katmak amacıyla "ItemClick" olayı tanımlayıp bu olay içinde seçilen öğenin (Item) ismini alarak ekranda göstermiştik. Bu örneğimizde ise yine bu listemizi kendi isteklerimiz doğrultusunda nasıl geliştirebileceğimizi göstermek amacıyla her bir öğeye bir resim ekleyerek bir resimli liste oluşturacağız.
Android ve şu sıralar yoğun bir şekilde ilgilendiğim WPF tabanlı uygulamalarda listbox, combobox gibi birleşenler artık eskisi gibi statik bir yapıdan ziyade sadece genel bir çerceveye, ana hatlara sahip birer birleşen halini aldılar. Yani hem Android arayüzünde olsun hemde WPF arayüz tasarımında olsun birleşenlerin içiçe kullanılması mantığı eskiden kullandığımız birleşenlerin çok daha esnek ve farklı formlarda tasarlanabilmelerine olanak sağladı. Bu söylediklerimi şimdi yapacağımız liste örneğinde çok daha iyi anlayacaksınız.
Ben bir önceki yazımda geliştirdiğim ListeTest projesi üzerinden devam ediyor olacağım, dolayısıyla önceki kodları görmek için bir önceki yazıyı okuyabilirsiniz. Bir önceki yazımıda liste hazırlamış ve ekranda göstermiştik. Bu kodlar şunlardı;
ArrayAdapter adaptor = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Sehirler);
this.setListAdapter(adaptor);
Bu listeyi oluştururken "android.R.layout.simple_list_item_1" isimli bir görünüm (layout) kullanmıştık. Bu görünüm (layout) bizim satırlarımız için hazır olarak bulunan öntanımlı bir görünümdür. Şimdi ise listemiz için satır görünümünü biz kendimiz oluşturacağız ve listemizi hazırlarken satırların bu görünümü kullanmasını sağlayacağız. Bu sayede aslında listemizin satırlarını nasıl istersek öyle dizayn edebileceğimiz görmüş olacağız. Şİmdi işe listemiz için satır görnümünü taımlayarak başlayalım. Bunun için projemizde bulunan "layout" klasörüne "satir.xml" isimli yeni bir Android XML dosyası (layout) ekliyoruz. Ardından liste satirimiz için istediğimiz dizaynı bu dosyada gerçekleştiriyoruz. Benim dosyamın kodları şu şekilde;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/imgResim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src ="@drawable/resim"
android:padding="5px"
/>
<TextView
android:id="@+id/txtSatir"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10px"
android:textSize="22px"
android:textStyle="bold"
/>
</LinearLayout>
Bu kodlardandan anlaşılacağı üzere LinearLayout tipindeki taşıyıcı üzerine bir ImageView ve birde TextView bileşenleri eklenmiştir. ImageView ve TextView birleşeninin gerekli özellikleri ayarlamıştır. ImageView kaynağı (src) olarak "@drawable/resim" öğesi gösterilmiştir. Sizdeki klasörlerde "drawable" isimli bir klasör yoksa bunu projenize ekleyebilirsiniz. Bunun dışında resim ve yazının yanyana olması için LinearLayout taşıyıcısının orientation özelliği "horizontal" olarak ayarlanmıştır. Tüm bu işlemlerden son listemizin satırı bitmiş ve kullanıma hazırdır.
Artık yapmamız gereken listemizi oluştururken Android tarafından ön tanımlı görünümü kullanmak yerine bizim oluşturduğumuz satır görünümünü kullanarak listeyi oluşturmaktır. Bunun için kodumuzu şu şekilde değiştirmemiz yeterli olacaktır.
ArrayAdapter<String> adaptor = new ArrayAdapter<String>(this, R.layout.satir, R.id.txtSatir, Sehirler);
this.setListAdapter(adaptor);
Bu şekilde listemizi oluştururken görmüş olduğunuz gibi kendi oluşturduğumuz satir isimli görünümü kullandık. Böylece Android listemizi oluştururken her satır için bizim hazırladığımız görünümü bir şablon gibi kullanarak her bir veri için listenin satırlarını oluşturacak, listemizin son hali ise şöyle görünecek;

Gördüğünüz gibi birleşenlerin içiçe kullanılabilmesi ilk bakışta basit gibi görünsede çok daha farklı ve güzel tasarımlar yapabilmemize olanak sağlıyor ve bunu yapmayı oldukça kolaylaştırıyor. Ayrıca yazımın başında da belirttiğim gibi daha önce kullanılan birleşenler artık sadece birer çerçeve görevi görüyor. Bu birleşenlerin içlerini tasarlamak ise tamamen sizin hayal gücünüze kalıyor. Bir başka yazıda görüşmek üzere sağlıklı ve başarıyı günler dilerim.