layout etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
layout etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Ders 5: Android XML ile Arayüz Tasarımına Giriş

25 Ocak 2012 Çarşamba
Bana sorarsanız, ara yüz tasarımı projede büyük önem taşıyor.

Ara yüz tasarımını XML dosyası içinden veya Java kodu içinden yapmak mümkün. Ancak statik ara yüzler için Java kullanmanın hiçbir anlamı yoktur.

Ara yüz tanımlamaları ‘res’ klasörü altında bulunan ‘layout’ klasörü içindeki main.xml dosyasında yapılır.
Hemen cup diye tasarıma atlamadan önce, gene her zamanki gibi neyin ne işe yaradığına bakalım:

  • Layout: Android uygulamalarının kullanıcı tarafından görüntülenen kısmıdır. Layout üzerindeki her bir nesne,(TextView,Button gibi) hazır Android sınıfları ve Layout oluştururken de nesnelere verilen id’ler ile kontrol edilir.
  • EditView: Kullanıcıdan veri almak için kullanılır. EditView sınıfı ile kontrol edilir.
  • Button.: Adı üstünde buton oluşturmak için kullanılır. Button sınıfı ile kontrol edilir.
  • TextView: Bir layout nesnesidir ve yazı göstermek için kullanılır. TextViewlerin içeriği ve özellikleri fonksiyonlar aracılığıyla değiştirilebilir. TextView sınıfı ile kontrol edilir. Javadaki karşılığı Labeldir.
İlk açtığımız uygulamada, main.xml içerisinde şöyle bir alan bulunmaktadır:


<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
Şimdi bakalım buradakiler ne demek oluyor?

  • “android:layout_width” = Text yazılacak alanın genişliğini gösterir.
  • “android:layout_height”= Text yazılacak alanının yüksekliğini gösterir.


Not 1: layout_width ve layout_height özelliklerine “fill_parent” demek anne objenin(bu durumda ekranın) tamamını kapla demektir. Buna alternatif olan “wrap_content” değeri de sadece ara yüz içeriğinin gerektirdiği kadar yer kapla anlamına gelir.”fill_parent” ve “wrap_content” dışında bir de “match_parent” mevcuttur. Genellikle bir parçacığın yanına bir başka parçacık yerleştirilirken kullanılır. Durumun böyle olduğunu varsayarsak; önceden var olan parçacıktan kalan yatay ya da dikey alan içinde bulunduğu layoutun sınırlarını tamamlar.

Not  2: “fill_parent”, ekranda sadece saati ya da takvimi gösteren uygulamalar için idealdir.
  • “android:text”= Text alanında neyin yazılacağını gösterir.
  • “android:id”= Kodun içinden çağırarak müdahele hakkı veren kimliktir.

Not 3: Bilindiği üzere, textview,edittext ve buton gibi nesnelere programlama dilinde component diyoruz. Genelde, componentlere ID vermemiz gerekiyor. @+id/id_adı ifadesi componentlere ID verirken kullanılan standart bir sentaks. Burada componente “id_adı” ID’sini vermiş oluruz. Bir componentin text özelliğine de @string/blabla diyebiliriz. Bu sentaks, kaynak klasöründeki string.xml dosyasına git ve oradaki “blabla” adlı değişkenin değerini al anlamına gelir.

Ders 1: Android Klasör Yapısı

23 Ocak 2012 Pazartesi

Androidin klasör yapısını bilmek, android öğrenmenin en baş kuralı olsa gerek. Neyin nerede olduğunu bildikten sonra işler daha kolay, kod yazmak da öyle.

Androidin klasör yapısı şöyle oluşuyor:

·         src: Uygulamamızın kaynak kodlarını içeren klasör. Adı üstünde ‘source’ kısmı. Yazdığımız tüm java kodları, bu dizin altında paketler içinde bulunuyor. Aslına bakarsak, Eclipse, kaynak kodlarının bulunması/konumlandırılması için tek bir dizin sınırlandırması yapmıyor. Pek çok dizin kaynak kodu dizini olarak kullanılabilir, düzenlenebilir. Ama geleneksel olarak src altında tutulur. Bilinen kalıp budur.

·         gen: Eclipse ADT(Ada Development Tools)  tarafından otomatik olarak oluşturulan ve bizim içeriklerini değiştirmememiz gereken dosyaları içeren klasördür. İçeriğini değiştirmemiz, kodlarımızın bozulmasına, çalışmamasına sebebiyet verebilir. Bu klasör res (adı üstünde gene, resources) klasörü içine koyacağımız kaynak dosyalarına ait sabit değişkenler içeren R sınıfını barındırıyor sadece. Biz uygulamaya yeni kaynaklar ekledikçe bu sınıf da ADT tarafından otomatik olarak güncelleniyor. Bu sınıf, appt(Android Asset Packing Tool) tarafından oluşturuluyor. Eclipse ile uygulama geliştirenlerin appt’yi kullanmalarına gerek yok. Ayrıca R.java kodları üzerinde kullanıcının değişiklik yapması engellenmiştir.

·         assets: Uygulamamız ile birlikte paketlenmesini istediğimiz dosyalar varsa(tar.gz gibi-tar.gz : genelde Linux ortamında kullanılan.rar uzantısı gibi bir uzantı.) bunları koymamız gereken klasördür. Bu dizin altındaki dosyalara sadece ‘java.io.InputStream’ aracılığı ile erişilebiliyor. Mp3 dosyaları, pdfler, csv formatındaki data dosyalarını bu dizin altına atıp InputStream aracılığı ile okuyabiliriz. Yani kısacası, bu dizindeki kaynaklara erişmek için ilave kod yazılması gerekmekte.

·         res: İçerisinde birden fazla klasör barındıran kaynaklar(resources) klasörü. İçerisindeki ‘layout’ klasörüne arayüz tanımlamalarını içeren XML dosyalarını, ‘values’ klasörüne renk, string, çeşitli diziler vs. içeren XML dosyalarını, ‘drawables’ klasörüne ise kullandığımız resim ve ikonları koyabiliriz. Burada yaratılmış olan klasörlere ek olarak kendimiz de yeni klasörler ve XML dosyaları yaratıp, istediğimiz kadar kaynak tanımlaması yapabiliriz ve R sınıfı aracılığı ile bunlara ulaşabiliriz. ‘drawables’ klasörü yerine, drawable-hdpi,drawable-mdpi ve drawable-ldpi  klasörleri olabilir.drawable-hdpi(high definition) yüksek çözünürlüklü resimler için, drawable-mdpi(medium definition) orta kalite resimler için, drawable-ldpi(low definition) ise düşük çözünürlüklü resimler için kullanılır.

·         Strings.xml: res/values dizini altında tanımlayabileceğimiz kaynaklar arasında en fazla kullanılanı budur. Uygulama içerisinde geçen tüm metinleri strings.xml dosyasına kaydedip, bu metinlere java kodu içinden R sınıfı aracılığı ile ulaşabiliriz. Strings.xml içinde sabit metinler dışında değişkenler de tanımlayabiliriz. Değişken tanımlarken ‘java.util.Formatter’ kurallarına uymamız gerekir.XML dosyası içinde metin ve/ya değişken tanımlamak, değişiklikleri tek bir yerden yönetmemize olanak sağlar. Örneğin; telefonlarının yerel dil ayarı ‘FR’(Fransızca) olan kullanıcılar için uygulamaya Fransızca desteği eklemek istersek, strings.xml dosyasının bir kopyasını oluşturup Türkçe metin ve/ya değişkenleri Fransızca karşılıkları ile değiştirmemiz gerekir. Metinlerin Fransızca karşılıklarını içeren strings.xml dosyasını da res/values-fr dizini altına koymamız gerekir. Dili Fransızca olan telefonlarda metinlerin Fransızca karşılıklarını gösterme işini Android platformu bizim için yapacaktır.

·         Main.xml: Tasarımımızı bu dosya içerisinde yaratırız.İster grafiksel ara yüzü kullanıp sürükle bırak şeklinde ekranın nasıl gözükeceğini ayarlar, istersek de kod yazarak istediğimizi oluşturabiliriz.

·         Proguard.cfg : Uygulama kodlarına bir dizi performans optimizasyonu yapar.Kodun şifrelenmesini ve lisanslanmasını da sağlar.

·         Default.properties / Project.properties: Uygulamanın derlenip cihaza gönderilmesi sırasında çalışan ‘Ant’ scripti tarafından kullanılan özellik dosyasıdır.Burada uygulamanın hangi SDK versiyonu ile çalışacağı tutulur. Yazdığımız uygulamanın cihaza gönderilip çalışması sırasında arka planda kullanılan dosyadır. Elle değiştirilmesi genelde tavsiye edilmez.

·         AndroidManifest.xml: Bir Android uygulaması “AndroidManifest.xml” dosyası içinde tanımlanmaktadır. Uygulama içindeki tüm aktiviteler, servisler, ortak yayın alıcılar ve içerik sağlayıcılar bu dosya içerisinde belirtilmelidir. Uygulamaya ait izinler de bu dosya içinde belirtilir. Örneğin; internet erişimi gerektiren bir uygulamaya ait izinler bu dosya içinde tanımlanmalıdır. Uygulamanın önemli dosyalarından biridir.

Andoriddeki klasör yapısı hemen hemen böyle. Eksiğim, aksağım varsa bir babayiğit çıksın, söylesin. Doğrusunu ben de öğreneyim. Yoksa bilmeyenlere destek, bilenlere tekrar olsun, benim de sefam olsun.