Android : Kaynaklar, Kaynaklar, Kaynaklar…

   Giderek ilerlediğimiz Xamarin.Android makale serisinde elimizi iyice koda bulaştırmadan önce hala öğrenmemiz gereken detaylar var. Bir önceki makalemizde arayüz tasarımcısını incelerken hatırlarsanız Android kaynaklarına hızlı bir bakış atmıştık. Bu makalemde Android kaynak kullanımını daha derinlemesine inceleyeceğim.

   Bir Android uygulamasında yer alan resim dosyaları, film dosyaları, ses dosyaları yani kısaca kaynak kodunuz dışında yer alan ve uygulamanız ile birlikte son kullanıcının cihazında bulunması gereken her şey kaynak olarak adlandırılır. Android’de özel olarak yönetilen kaynaklar yazılımcıların kod ve sunulan içerik bileşenlerini net bir şekilde ayırt edebilmesini sağlarken, diğer yandan da bir çok farklı donanım özelliğine sahip olan Android cihazlarının uygulamamızca desteklenebilmesine de olanak vermektedir.

Solution Explorer

   Xamarin Android uygulamalarında kaynak dosyaları için resource adıyla özel bir klasör ayrılmıştır. Resource klasörü altında yer alan kaynaklar türlerine göre gruplanarak klasörlenirler. Imaj dosyalarına ait klasörler Drawable-XX şeklinde isimlendirilirken, arayüz’e ait tanım dosyaları da Layout klasörü altında yer almaktadır. Bir başka çok sık kullanacağız kaynak ise Values klasörü altında yer alan Strings.xml olacaktır. Strings, uygulamanızı yerelleştirirken kullanacağınız bir kaynaktır.

   Resources klasörü altında yer alan bir başka önemli dosya da Resource.Designer.cs dosyasıdır. Xamarin.Android tarafından yönetilen ve otomatik olarak üretilen bu dosya tanımladığımız her bir kaynağa ait tekil id bilgilerini barındırmaktadır. Bu sayede ek bir işlem yapmamıza gerek kalmaksızın uygulama kodumuz içerisinden kaynaklara ulaşabiliriz. Bir önceki makalemde de gördüğünüz gibi tanımlanan kaynaklara resource.designer.cs  sayesinde programsal olarak ulaşabildiğiniz gibi, arayüz tanım xml’leri içerisinden bildirimli olarak da ulaşabilmeniz mümkün.

Strings.xxml dosyasının özelliklerine bakarak build action olarak AndroidResource kullanıldığını görebiliriz   Kaynak dosyalarının büyüsü aslında  Xamarin.Android kurulumu ile birlikte gelen AndroidResource build action’ında gizli. Oluşturduğumuz kaynak dosyalarının AndroidResource build action’ı ile ilişkilendirilmesi sonrasında herhangi bir kaynak dosyasında yapılan değişiklik yukarıda belirttiğim resource.designer.cs dosyasının içeriğini de güncelleyecektir. AndroidResource build action uygulamanın derlenmesi sırasında da devreye girerek dosyanızın oluşan apk dosyasının içerisinde kaynak olarak yer almasını da sağlayacaktır.

   Oluşan bu kaynaklara uygulama kodunuz içerisinden erişebilmek için öncelikle kaynağa atanan id’yi biliyor olmalısınız. Kaynaklarınızın id’leri ,dahil oldukları gruplara göre, Resource sınıfına bağlı alt sınıflar içerisinde sabit değer olarak tanımlanacaklardır. Buna göre, örneğin string “Merhaba Dünya” ifadesini Strings.xml dosyasındaki id’si Resource.String.Hello olacaktır.

   Tabi ki kaynaklarının id değerlerini biliyor olmak kodumuz içerisinde kullanabilmemiz için yeterli değil. Yapmamız gereken, bu id ile kaynak dosyasında ilgili değeri getirmek olmalı. Bu noktada yine Resources sınıfı yardımımıza geliyor. Kaynakları değerlerini çekebilmemiz için Resources sınıfı içerisine yer alan yardımcı fonksiyonları kullanabiliriz. Çok sık başvurulan bir sınıf olması nedeniyle Resources sınıfı yine aynı isimle ContextWrapper sınıfı altında bir değişken olarak tanımlanmıştır. Kullandığımız Activity sınıfı da en nihayetinde ContextWrapper sınıfından kalıtıldığı için bu değişkeni kullanabiliyoruz. Konuyu bir örnekle toparlayacak olursak; Strings.xml dosyası içerisinde yer alan “Merhaba Dünya” string ifadesini programsal olarak aşağıdaki şekilde okuyabiliriz;

Resources.GetString(Resource.String.Hello)

    Uygulamalarımızda tanımladığımız kaynaklarımıza arayüz xml’lerinde de ulaşabilmemiz mümkün. Bunun için xml içerisinde ilgili alana @ ile başlayan ve yukarıdakine benzer bir ifade vermemiz yeterli. Xml içerisindeki kullanımın farkı Resources’ın bulunmaması ve  . yerine / kullanılmasıdır. Yine yukarıda örneklediğimiz kaynak üzerinden gidecek olursak, aynı kaynağı xml içerisinde aşağıdaki şekilde belirtebiliriz;

@string/Hello

   Dikkat edecek olursanız burada string öncekinden farklı olarak küçük harf ile başladı…

   Android’de kaynak kullanımı ile ilgili önemli bir başka nokta da varsayılan kaynaklardır. Yeni bir proje oluşturduğunuzda hatırlayacak olursanız yukarıdaki klasörler yerine sadece drawable ve layout klasörleri yer almaktaydı. Bu klasörler ilgili kaynak grubu için varsayılan değerlerin tutulduğu klasörlerdir. Eğer Android uygulamanın çalıştığı cihaza özel bir kaynak bulamazsa bu varsayılan değerleri kullanacaktır.

   Yazımın başlarında yer alan ekran görüntüsüne dikkat edecek olursanız drawable türü için varsayılan kaynak kullanmak yerine cihaz çözünürlüklerine özgü  kaynaklara yer verdiğimiz görebilirsiniz. Alternatif kaynaklar olarak adlandırılan bu kaynaklar ilgili kaynağın varsayılan adının yanına “–“ ve devamında da tür bilgisinin gelmesiyle adlandırılırlar. Android uygulamanın çalıştığı cihaza göre hangi alternatif kaynağın kullanılacağına otomatik olarak karar vermektedir. Alternatif kaynak isimlendirmesindeki tür bilgisi olarak, bu örnekte olduğu gibi ekran çözünürlükleri kullanılabileceği gibi, “drawable-tr” gibi kullanıcının yereli de olabilir. Ayı durum diğer kaynaklar için de söz konusudur. Örneğin ekranın yatay ya da dikey olarak konumlandırılmış olmasına bağlı olarak farklı arayüzler sunabilmek için layout ve layout-land adıyla iki farklı kaynak klasörü kullanabilirsiniz.

    Kaynaklarla ilgili bir başka güzel özellik ise birden fazla tür bilgisini aynı anda kullanabilmeniz. Örneğin düşük çözünürlüklü Türkçe yerelli sistemlerde gösterilecek imajları drawable-ldpi-tr klasörü altına koyabilirsiniz.

   Android biz yazılım geliştiricilere oldukça geniş bir yelpazede kaynak tanımlama imkanı sunmaktadır. Kullanıcının yereli, ekran çözünürlüğü, ekran genişliği, ekran yüksekliği, ekran yönü… ve çok daha fazlası seçeneklerimiz arasındadır. Tüm bu alternatifler sayesine neredeyse tüm senaryoları/cihazları destekleyecek kombinasyonlar yapabilmemiz mümkün.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir