Kaynaklar ve Kaynaklara Erişim


İyi bir android uygulaması oluştururken bir sürü şey kullanabilirsiniz. İyi bir kodun iyi bir algoritmanın yanında kullandığınız bir sürü kaynak olabilir, örneğin: resimler, renkler, layoutlar, kullanıcı arayüzü karekter dizileri,  sesler, videolar, animasyonlar ve çok daha fazlası.

Bu dersimizde size android projenizdeki kaynaklarınızı nasıl organize edeceğinizi, alternatif kaynakları nasıl belirleyeceğinizi ve uygulamalarınızda kaynaklara nasıl erişeceğinizi anlatmaya çalışacağım.

Kaynakları Hazırlamak, Düzenlemek, Organize Etmek

Her bir kaynak projedeki res/ klasörü altına kaydedilir. Bu klasör altında çeşitli alt klasörler vardır. Kaynak hangi klasöre uygun ise o klasöre kaydedilir. Örneğin basit bir android projesinin res/ klasörü hiyerarşisi aşağıdaki gibi olabilir.

Gördüğünüz gibi res klasörü altında çeşitli kaynaklar için alt klasörler var. Mesela yukarıdaki örnekte drawable-hdpi klasörü altında ic_launcher.png isimli uygulama launcher simgesini görüyoruz. layout klasörü altında iki tane layout xml dosyası görülmektedir. Yine values klasörü altında da bazı xml dosyaları görmektesiniz. Şimdi res/ klasörü altında desteklenen alt klasörler ve işlevlerinden bahsedelim.

anim/ klasörü : bu klasör altında özellik animasyonları tanımlayan xml dosyaları bulunur. Buradaki dosyalara kod içinden R.anim sınıfı kullanılarak ulaşılır.

color/ klasörü : bu klasör altında bazı renkleri liste halinde tanımlayan xml dosyaları bulunur. Buradaki kaynaklara kod içinden R.color sınıfı kullanılarak ulaşılır.

drawable/ klasörü : imaj dosyaları .png, .jpg, .gif gibi, ya da daha sonra derlenerek bitmap oluşturulacak xml dosyaları, durum listeleri, şekiller, çizilebilir animasyonlar. Bunlar res/drawable klasörü altına kaydedilir ve kod içinden R.drawable sınıfı ile erişilir.

layout/ klasörü : kullanıcı arayüzü planı/yerleşimi tanımlayan xml dosyaları. Bunlar res/layout klasörü altına kaydedilir ve bunlara R.layout sınıfı ile erişilir.

menu/ klasörü : menü tanımlayan xml dosyaları örneğin: options menu, context menu veya sub menu. Bunlar res/menu klasörü altına kaydedilir ve bunlara R.menu sınıfı ile erişilir.

raw/ klasörü : raw formundaki herhangi bir dosya. Bunlar res/raw klasörü altına kaydedilir. Bu tür dosyaları açmak için aşağıdaki metodu uygun kaynak idsi ile çağırmalısınız.

Resources.openRawResource(id) , id şu formatta olmalıdır : R.raw.dosya_adi

values/ klasörü : basit değerler içeren xml dosyaları örneğin: strings(karekter dizileri), renkler, tam sayılar gibi. Aşağıda bu klasör altında oluşturabileceğiniz xml dosyaları hakkında kısaca bilgi verilmiştir.

arrays.xml —> dizi değerli kaynaklar için , R.array sınıfı ile erişilir.

integers.xml —> tam sayı değerli kaynaklar için, R.integer sınıfı ile erişilir.

bools.xml —> boolean değerli kaynaklar için, R.bool sınıfı ile erişilir.

colors.xml —> renk değerli kaynaklar için, R.color sınıfı ile erişilir.

dimens.xml —> boyut değerler için, R.dimen sınıfı ile erişilir.

strings.xml —> karekter dizisi değerleri için, R.string sınıfı ile erişilir.

styles.xml —> stiller için, R.style sınıfı ile erişilir.

xml/ klasörü : sıradan xml dosyaları. Bunlar uygulama çalışırken çağrılabilir. Bu dosyaları uygulama çalışırken okumak için Resources.getXML() metodunu kullanırız.

Alternatif Kaynaklar

Uygulamanız belirli özelliklere ve konfigrasyonlara sahip cihazları desteklemek için alternatif kaynaklar sağlamalıdır. Örneğin: uygulamanızda kullandığınız stringlerin(karekter dizilerinin) farklı dillere sahip cihazlarda uygun dil ile görünmesini istiyorsanız bunun için alternatif kaynaklar sağlamalısınız. Mesela diyelim ki bir uygulamanız türkçe dilinde ve bu dil varsayılan dili olsun. İngilizce dilini de desteklemek istiyorsanız values/ dizini gibi yeni bir dizin açmalı ve adına da values-en demelisiniz. Burada sonda bulunan “en” eki ingilizce dilini temsil etmektedir.

Android herhangi bir uygulamayı açarken cihazın konfigurasyonlarına, özelliklerine bakar ve ona göre apk den gerekli, uygun ve doğru kaynakları çeker. Yani dil desteği için yukarıdaki gibi bir yolu izlemeniz yeterlidir gerisini android halleder.

Şimdi başka bir örneğe bakalım. Alternatif kaynaklar resimler, grafikler için de geçerlidir. Mesela aşağıdaki resim basit bir android projesinden alınmıştır.

alternative-resources-alternatif-kaynaklar

Resime baktığınızda drawable ve drawable-… kasörlerinin hepsinin altında aynı ic_launcher.png dosyasının olduğunu göreceksiniz. Ancak bunlar ismen aynı olsalar da birbirlerinde boyut olarak farklılar. Burada uygulama simgesi olarak kullanılmak istenen varsayılan dosya drawable klasörü altındadır. Yüksek çözünürlüğe sahip cihazarda kullanılacak olan kaynak(ic_launcher.png den bahsediyoruz) drawable-hdpi klasörü altındadır. Diğerlerini de siz tahmin edebilirsiniz :).

Farklı konfigurasyonlara sahip cihazları desteklemek için detaylı bilgiye şu sayfadan ulaşabilirsiniz.

Farklı ekran çözünürlüğüne sahip cihazları desteklemek için gerekli çoğu şey ile alakalı detaylı bilgiye şu sayfadan ulaşabilirsiniz.

Farklı dillere sahip cihazları desteklemek için detaylı bilgiye şu sayfadan ulaşabilirsiniz.

Farklı android  versiyonlarına sahip cihazları desteklemek için detaylı bilgiye şu sayfadan ulaşabilirsiniz.

Kaynaklara Erişim

Uygulamanızı geliştirirken tanımladığınız kaynaklara kod içinden ve/veya xml dosyalarınızdan ulaşmanız gerekecek. Şimdi bu işin nasıl olduğunu açıklamaya çalışalım.

Kod İçinden Kaynaklara Erişim

Android uygulamanız derlendiğinde bir R sınıfı üretilir, bu R sınıfı res/ dizini altındaki bütün kaynaklar için idler(kimlik numaraları) içerir. Kaynaklara kod içinden R sınıfını kullanarak erişebilirsiniz. Şimdi birkaç kod parçasıyla örnek verelim.

Bu kod parçası örneğinde drawable dizinlerinin altındaki bir myimage adlı resime R sınıfını kullanarak R.drawable.myimage kodu ile ulaşıyoruz.

XML İçinden Kaynaklara Erişim

Örnek kod parçası ile başlayalım.

Gördüğünüz gibi burada da basitçe kaynak hangi dosyada ise @dosya_ismi/kaynak_ismi şeklinde ulaşıyoruz. Yani yukarıdaki kod parçasında blue adlı colors.xml içindeki renk kaynağına @color/blue kodu ile, first_string adlı strings.xml içindeki string(karekter dizisi) kaynağına @string/first_string kodu ile erişiyoruz.

Bu dersimizde öğreneceklerimiz bu kadar yeni bir android dersinde yeni bir günde görüşmek üzere iyi çalışmalar..


Mustafa Demir

Elektronik, linux, android, ios, matlab, latex, python, C, ve C++ meraklısıyım. Profesyonel Android Uygulama Geliştiricisi olma yolunda ilerliyorum. Ubuntu 15.04 kullanıcısıyım. Merakımın peşinden koşmayı severim.

Şunlar da ilginizi çekebilir

2 yorum

  • ahmet okudan
    3 Mart 2015 at 09:05

    Merhaba,

    Visual Basic ile yaptığımız ve şirket için kullandığımız bir programı android telefonlara da uyarlamak istiyoruz bu konuda yardım edebilir misiniz.

    Teşekkürler

    • MUSTAFA DEMİR
      12 Mart 2015 at 01:30

      merhaba Ahmet bey,

      program hakkında bilgi verebilirseniz önerilerde bulunmaya çalışırım. Buraya yazmak istemiyorsanız isterseniz mustafademir604@gmail.com email adresime email atabilirsiniz.

      İyi Çalışmalar.

LEAVE A COMMENT