Tag Archive for android

Swipe özellikli Android uygulaması nasıl yazılır?

Swipe, ekranda sağa yada sola doğru parmak vuruşuna verilen isim. Uygulamalarda ekranlar arasındaki geçiş bu hareketle sağlanabiliyor. Bir çok güncel uygulama bu özelliği kullanıyor. Google+ yada Android Market, bu uygulamalara örnek olarak verilebilir. Yeni Android Design sitesinde Swipe görünümlerinin nasıl uygulanması gerektiği konusunda daha çok bilgi edinilebilir.

Aslında bu görünümün nasıl uygulanacağı konusunda geliştirici blogunda bir yazı yayınlanmıştı ama yeni başlayanlar için biraz daha açıklamalı yazılabileceğini düşündüm.

Örnek Uygulamamızda iki ekran olacak. Her ekranın xml dosyasını normal bir layout olarak hazırlıyoruz.

Ekranları normalde activity ile oluştururduk ama swipe görünümünde aslında tek activty çalışır. Ekranlarımızı bu tek activty içinde gösterebilmek için Android 3.0 ile gelen fragment türünde oluşturmamız gerekiyor. Fragment yine activty’ye benzediği için kullanımında bir sorun olmamalı.

Fragment kullanan uygulamamızın daha eski android sürümlerinde çalışabilmesi için android-support-v4.jar kütüphanesini projemize eklememiz gerekiyor.  Bu kütüphane android sdk içinde  extras dizininde bulunur. Yani eğer sdk dizini /home/w3blog/android-sdks ise kütüphane /home/w3blog/android-sdks/extras içinde olacaktır.  Project->Properties menüsüne tıklıyoruz.

Gelen pencerede Java Build Path->Libraries->Add External Jars butonuna tıklıyoruz ve dosyamızı seçiyoruz.

Artık fragment oluşturulabilir proje içerisinde. Fragment sınıfından kendi ekranlarımızın yer alacağı sınıfları türetmemiz gerekiyor. Fragment görünümü ilk defa onCreateView(LayoutInflater l, ViewGroup v, Bundle b) methodu içersinde oluşturulur. XML dosyası bu method içerisinde kullanılarak bir ekran haline getiriliyor. Bunun için LayoutInflater türünde bir nesne gerekiyor. Inflate’in kelime anlamı şişirmektir. XML dosyası şişirilerek bir ekran haline getiriliyor gibi düşünülebilir.

Ekranlar ayrı ayrı oluşturduktan sonra artık bunların içerisinde çalışacağı activity oluşturulabilir. Bu ekranda sadece fragmentları gösterecek bir ViewPager elemanı bulunacak. Bu eleman ile ekranlarımız arasındaki ilişkiyi FragmentPagerAdapter sınıfından türettiğimiz özel bir adapter ile sağlayacağız. İlk önce activity’i oluşturalım.

Şimdi adapter sınıfımızı oluşturalım. Burada sadece mantığının anlaşılması için uygulamadaki tüm ekranları bir arraylist içerisinde tutan, gerektiğinde ekranları bu arraylist içerisinden alarak kullanan bir adapter kullanıldı ama performans açısından pek sağlıklı bir yöntem değil. Eğer performansın önemli olduğu bir uygulamada kullanılacaksa alternatif uygulamalar araştırmak daha iyi olacaktır.

Bu sınıf her swipe haraketinde gereken ekranı ViewPager elemanına gönderecektir. Adapter sınıfımızı oluşturduktan sonra activty içerisindeki ViewPager ile artık bunu ilişkilendirmek gerekiyor. Bunun için sınıfımız aşağıdaki gibi değiştirilmeli.

Bu son değişiklikle birlikte swipe kullanan basit bir uygulama tamamlanmış oldu. Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

Android uygulamalarında 9 Patch PNG kullanımı

Android cihazların ekran boyutları modelden modele değiştiği için tasarımda belli bir kaliteyi yakalamak için bazı çözümlere başvurmamız gerekir. Örneğin uzunluk birimi olarak px yerine dip yada dp kullanmak bunlardan biridir. Bunlardan bir diğeri ise kullanılacak arkaplan resimlerinin içinde bulunduğu elemana yada ekrana göre boyut değiştirebilecek şekilde ayarlanmasını sağlayan 9 patch png formatının kullanılmasıdır.

9 patch png oluşturmak için gerekli aracı aslında Android geliştirme araçlarıyla birlikte yüklemiştik. draw9patch adındaki araç android-sdks/tools dizini altından bulunabilir.

Eğer bir gnu/linux dağıtımı kullanılıyorsa dosyayı açmak istediğinizde aşağıdaki pencere ile karşılaşacaksınız. Run yada Çalıştır butonuna tıklayın.

Araç açıldıktan sonra arkaplan olarak kullanmak istediniz resmi File->Open 9-patch menüsünden açın. Resminiz açıldığında arkaplanın hem yatayda hemde düşeyde uzatılacak kısımlarını seçmeniz gerekiyor. Seçimi resmin üstünde yada solunda hemen dışında alan seçerek yapabilirsiniz. Seçimi yaparken resmin dışında 1px genişliğinde bir alanı boyayacaktır. İstenirse alttaki Show Patches seçeneği ile seçilen alanlar daha rahat görülebilir. Alan seçildikçe sağ tarafta değişik boyutlandırmalarda resminizin nasıl görüntüleneceği gösterilecektir. Eğer yanlış bir alan seçerseniz shift tuşuna basarak yanlış alanı silebilirsiniz.

Daha sonra resminizi File->Save 9-patch menüsünden kaydedebilirsiniz. Artık resminizi kullanabilirsiniz. Resmin kullanımı normal bir resmin kullanımından farklı olmayacaktır. UNIwifi (eski BUwifi) kaynak kodlarından örnek verirsem /res/drawable/back.9.png resminin arkaplan olarak kullanımı aşağıdaki gibidir.

Burada @drawable/back ile direk resmin referansı verildi ve çerçevedeki siyah kısımlara içerik gelmesinin önlenmesi için 15dp boyutunda bir padding eklendi.

Android Derneği kurulmalı mı, kurulur mu?

Geçtiğimiz günlerde Muharrem Taç sosyal ağlardan ve forumundan Android derneği kurmak istediğini duyurdu ve yardım istedi. Muharrem Hocamın belirttiğine göre bir çok kanaldan destek mesajı gelmiş. Şu an çalışmaları ne alemde bilmiyorum ama en son belirttiğine göre daha önce dernek çalışmalarına başkan olarak katılmış biri destekleyecekti.

Bugün Aykut Taşdelen, Facebook üzerinde Android Programcıları Derneği adında bir grup kurup, bizi eklemiş. Henüz pek grup üyeleri sessizliklerini bozmasalar da android-tr mail grubuna benzer bir yapı olacağını seziyorum.

Peki böyle bir dernek kurulursa ne iş yapacak, Android ekosistemi içinde yerel bölgede görevleri neler olabilir? Mesleki dernekler içinde yer almadığım için sadece fikir yürütmeye çalışacağım.

Android, Microsoft’un, Apple’ın, Nokia’nın ve RIM’in mobil işletim sistemlerinden farklı olarak tam bir ekosistem oluşturmaya başladı. Gerek cihazlar, gerekse uygulamalar için herhangi bir marka bağımlılığı yok. Fotoğraf makinalarından, saatlere; gözlüklerden, televizyonlara bir çok farklı türde cihaz üzerinde Android işletim sistemi çalışabiliyor. Uygulamalar direk yüklenebiliyor, Android Market üzerinden yüklenebiliyor yada onlarca farklı uygulama mağazası üzerinden yüklenebiliyor. Çin’de örnekleri görüldüğü gibi isteyen kendi Android forkunu geliştirerek apayrı yönlere ilerleyebiliyor.

Android’in olabildiğince özgür bir platform olması, gerek geliştiriciler, gerek üretici, dağıtıcı yada satıcı firmalar, gerekse eğitim kurumları için birleştirici bir noktaya ihtiyaç duyulmasına neden oluyor. Örneğin üniversite toplulukları ve kulüpleri birbirinden habersiz sürekli benzer etkinlikler yapmaya başladı Android hakkında. Bu hem konuşmacılar hemde etkinlikleri takip eden katılımcılar için sürekli tekrar eden etkinlikler demek. Benzer şekilde Fatih Projesi için General Mobile üniversitelerden öğrenci talebinde bulundu ancak üniversitelerden dönecek yanıtlar belirsiz ve bu büyük bir projeye yönelmiş bir firma için zorlayıcı bir faktör.

Bu platform üzerine yoğunlaşan, kariyer yapan yada yapmak isteyen kişiler bir araya toplandığı taktirde, çalışanların ve öğrencilerin daha rahat edeceği kanısındayım. Yapılacak etkinler, eğitimler daha rahat konuşmacı ve katılımcı bulabilir, firmalar kendilerine danışılacak kişileri yada çalışanları daha rahat bulabilir, geliştirici ve tüketicilerin istekleri firmalara daha rahat iletilebilir. Özetlemek gerekirse böyle bir topluluk kurulması iyi olacaktır ancak Google Technology User Groups ile olan ilişki nasıl olacaktır yada bu derneğe ihtiyaç duyan yeterince insan var mı bakılması gerekir diye düşünüyorum.

Switch to our mobile site