Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Android'e Giriş Eğitimleri 2_2

662 vues

Publié le

Android işletim sistemine mobil uygulama geliştirirken kullanılacak en temel programlama dili Java'dır. Java ile ilgili genel bilgilere buradan ulaşabilirsiniz.
Android tüm bileşenleriyle son derece geniş bir ekosistemdir. Bu ekosistemin anlatımında aşağıdaki başlıklar temel alınmıştır:
 Android’e Giriş 1 eğitiminde, temel Java bilgisine sahip olmanız ve basit Java uygulamalarını bilgisayarınızda çalıştırabilmeniz hedeflenmektedir. Java dünyasıyla ilk kez tanışacaklar için hem dilin temel kavramları hem de uygulamaya yönelik kod örnekleriyle birlikte bir anlatım esas alınmıştır.
 Android’e Giriş 2 eğitiminde, Android platformunun detaylarına ve geliştirme ortamına değinilmiştir. Platform özelinde bilgiler, cihazların özellikleri ve Android için geliştirme ortamının kurulumu yer almaktadır.

Publié dans : Technologie
  • Login to see the comments

  • Soyez le premier à aimer ceci

Android'e Giriş Eğitimleri 2_2

  1. 1. Android‘e Giriş Eğitimi Dökümanları 2/2 Android Uygulama Geliştirme Ortamının İncelenmesi Bilgi Teknolojisi Eğitim Programları Bu Çalışma Univerist Materyal geliştirme ekibi tarafından Bilgi Teknolojileri Eğitimleri için derlenmiştir. Dökümanla ilgili kaynaklar makalenin sonunda “Kaynakça” kısmında detaylı bir şekilde belirtilmiştir.
  2. 2. 1 8.GÖRSEL KOMPONENTLER Uygulamalarımızı tasarlarken gereksinim duyabileceğimiz görsel öğeler bize Google tarafından sağlanmıştır. Android SDK ile gelen ve layout dosyalarında kullanacağımız temel öğeleri aşağıdaki gibi sıralayabiliriz; TextView Metin değerlerini ekranda göstermek için kullanılır. EditText Kullanıcıdan alınacak metin ya da numara gibi girdileri kaynak kod tarafına iletmek için kullanılır. HTML’deki input benzeri bir davranış gösterir. Kullanıcı giriş yaparken gireceği değere göre klavye tipi seçilebilir. ImageView Resimleri ekranda göstermek için ImageView’dan faydalanırız. ImageView drawable klasöründe yer alan dosyaları ya da başka bir kaynaktan elde edilen resimleri görüntülemek için uygundur. Button Düğme oluşturmak için Button öğesi kullanılabilir. Kullanıcı düğmeye bastığında kod içerisinde oluşturulan bir dinleyici (onClickListener) içindeki kod çalıştırılarak düğmeye bir eylem atanabilir. ListView Satırlardan oluşan bir tablo oluşturmak için kullanılır. Belirli bir kaynaktan (veritabanı ya da web servis) çekilen veriyi göstermek için uygundur. Uygulamalarda en sık kullanılan görsel öğelerin başında gelir. Özellikle, satır tasarımlarının özel layout dosyaları ile değiştirilebilmesi esnek bir kullanım sağlar. WebView Uygulama içerisinde bir HTML tabanlı web sitesi göstermek için kullanılır. Bu web sitesi uzak bir sunucuda olabileceği gibi uygulamanın içinde saklanan HTML dosyaları da olabilir. Hibrid bir uygulama hazırlamak için uygun bir yapıdır. Spinner Kullanıcının karşısına çoktan seçmeli bir menü getirmek için kullanılır. select HTML etiketiyle karşılaştırılabilir. Kullanıcı Spinner öğesine bastığında karşısına geliştiricinin belirlediği bir menü açılır ve burada seçim yapması beklenir. Yapılan seçimin cevabı kaynak kod içerisinde bir Listener yardımıyla alınır. MapView Uygulamalara kolaylıkla Google Maps entegrasyonu yapmak için kullanılır. Google’dan alınan bir API anahtarı yardımıyla uygulamamızda Google haritalarda yer alan bütün özellikleri MapView yardımıyla kullanabiliriz. Konum tabanlı uygulamaların vazgeçilmez parçasıdır. ProgressBar
  3. 3. 2 Kullanıcının karşısına bir durum çubuğu gelmesini sağlar. Yapılan uzun süreli bir işlemin (örn. web servis çağırma, veritabanı güncelleme vb.) ne kadar süreceğine dair kullanıcı dostu bir mesaj vermek için kullanır. AsyncTask konusu içerisinde daha detaylı anlatılacaktır. SeekBar Kullanıcının sağa ve sola çekebileceği bir çubuk oluşturur. Bu şekilde kullanıcı bir ses dosyasında ileri geri gidebileceği gibi bir renk cetvelinde özel renkler belirleyebilir. Kullanıcının yaptığı değişim bir Listener metodu uyarır ve kaynak kod içerisinde ilgili işlemlerin yapılmasını sağlar. CheckBox Kullanıcının evet / hayır değeri verebileceği bir kutu oluşturur. 9.LISTVIEW KULLANIMI Mobil cihazlarda kullanıcılara birbiriyle ilişkili verileri listeyle vermek çok tercih edilen bir yöntemdir. Kullanıcı listedeki veriler içinde tek parmağıyla yukarı-aşağı sürükleme yaparak dolaşabilir. Android'te listeleme işlemleri yapabilmek için ListView isimli görsel öğe kullanılır. ListView, kendi içinde satır satır TextView öğeleri bulunduran bir yapıdır. Bunun gibi birçok View'dan oluşan görsel öğeler ViewGroup olarak da sınıflandırılır. Aşağıdaki örnekte bir ListView'ı birkaç ülke ismiyle dolduracağız. Ardından listede üzerine dokunulan ülkenin adını bir diyalog penceresinde göstereceğiz. 9.1.Yerleşim Dosyalarını Düzenleme Öncelikle ListView'ı üzerinde tutacak olan Activity'nin (MainActivity.java) tasarımını çıkaralım. Bunun için res/layout/ altındaki activity_main.xml dosyasını kullanıyoruz. 1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2. xmlns:tools="http://schemas.android.com/tools" 3. android:layout_width="match_parent" 4. android:layout_height="match_parent" 5. android:paddingBottom="@dimen/activity_vertical_margin" 6. android:paddingLeft="@dimen/activity_horizontal_margin" 7. android:paddingRight="@dimen/activity_horizontal_margin" 8. android:paddingTop="@dimen/activity_vertical_margin" 9. tools:context=".MainActivity" > 10. 11. <ListView 12. android:id="@+id/listView1" 13. android:layout_width="match_parent" 14. android:layout_height="wrap_content"
  4. 4. 3 15. android:layout_alignParentLeft="true" 16. android:layout_alignParentTop="true" > 17. </ListView> 18. 19. </RelativeLayout> Gördüğünüz gibi ListView'ı bir RelativeLayout içinde tutuyoruz. Kodların kalabalık olması bu yüzden. Burada asıl önemli şey android:id="@+id/listView1" satırı. Burada ListView'ımıza listView1 ismini veriyoruz. XML üzerinde bir view nesnesine isim verirken o nesnenin android:id özelliğine @+id/ ön ekini ve ardından da istediğimiz ismi veriyoruz. Bu ismi (id) daha sonra Java sınıfımız içinde ListView'a erişmek için kullanacağız. 9.2.Gösterilecek Verileri Ayarlama Şimdi listemizde göstereceğimiz ülke isimlerini taşıyan bir String dizisi tanımlayalım. Bunu MainActivity sınıfımızın bir alanı olarak tanımlıyoruz. Böylece bu Activity oluşturulduğu an elimizde bir ülke listesi olacak. 1. //Dosya Adı : MainActivity.java 2. 3. package org.gelecegiyazanlar.ornek.listview; 4. 5. import android.os.Bundle; 6. import android.app.Activity; 7. 8. public class MainActivity extends Activity { 9. 10. private String[] ulkeler = 11. {"Türkiye", "Almanya", "Avusturya", "Amerika","İngiltere", 12. "Macaristan", "Yunanistan", "Rusya", "Suriye", "İran", "Irak", 13. "Şili", "Brezilya", "Japonya", "Portekiz", "İspanya", 14. "Makedonya", "Ukrayna", "İsviçre"}; 15. 16. @Override 17. protected void onCreate(Bundle savedInstanceState) { 18. super.onCreate(savedInstanceState); 19. setContentView(R.layout.activity_main);
  5. 5. 4 20. } 21. } Bu basit String dizi tanımlamasından sonra artık yukarıda sözünü ettiğimiz Java sınıfı içinde ListView'a erişmeyi ve onu yönetmeyi gerçekleştirelim. Bunun için şu üç adımı gerçekleştirmelisiniz.  (A) Kullanıcıya gösterilen ListView'a ulaşabilmek için onun bir referansını almak  (B) ListView'ımızı verilerle (ülke adları) buluşturacak olan Adapter'ı tanımlamak  (C) ListView'ımıza, bağlanacağı Adapter'ı belirtmek 9.3.ArrayAdapter nedir? Adapter bir veri kaynağıyla, veriye ihtiyacı olan nesneyi birbirine bağlamaya yarayan yapılardır. ListView gibi bir dizi veriyi içinde bulunduran yapılara, bu verileri ArrayAdapter aracılığıyla veririz. ArrayAdapter bir veri kaynağındaki verileri (kısaca, veri modelini) görsel öğelerde kullanmaya uygun hale getirir. Bunun görsel anlatımı şu şekildedir: Prizdeki elektrik, telefonumuzun kullanacağı elektrikten farklı olduğu için bir dönüşüme ihtiyaç duyar. Bu dönüşümü adaptör aracılığıyla yaparız. Adaptör, şebekeden gelen elektriği alır ve telefonun kullanacağı türe çevirir.
  6. 6. 5 9.4.Verileri Gösterme ArrayAdapter'ın veri ile görsel öğe arasındaki görevini inceledikten sonra kodumuza (MainActivity.java) geri dönelim: 1. //Dosya Adı: MainActivity.java 2. 3. package org.gelecegiyazanlar.ornek.listview; 4. 5. import android.os.Bundle; 6. import android.widget.ArrayAdapter; 7. import android.widget.ListView; 8. import android.app.Activity; 9. 10. 11. public class MainActivity extends Activity { 12. 13. private String[] ulkeler = 14. {"Türkiye", "Almanya", "Avusturya", "Amerika","İngiltere", 15. "Macaristan", "Yunanistan", "Rusya", "Suriye", "İran", "Irak", 16. "Şili", "Brezilya", "Japonya", "Portekiz", "İspanya", 17. "Makedonya", "Ukrayna", "İsviçre"}; 18. 19. @Override 20. protected void onCreate(Bundle savedInstanceState) { 21. super.onCreate(savedInstanceState); 22. setContentView(R.layout.activity_main); 23. 24. //(A) adımı 25. ListView listemiz=(ListView) findViewById(R.id.listView1); 26. 27. //(B) adımı 28. ArrayAdapter<String> veriAdaptoru=new ArrayAdapter<String> 29. (this, android.R.layout.simple_list_item_1, android.R.id.text1, ulkeler); 30. 31. //(C) adımı 32. listemiz.setAdapter(veriAdaptoru); 33.
  7. 7. 6 34. } 35. } Ana kodumuzu Activity'nin onCreate() metoduna yazıyoruz. Böylelikle Activity oluşturulur oluşturulmaz verilerimizi ArrayAdapter yardımıyla ListView'da göstermiş oluyoruz. Activity'nin her onCreate() oluşunda çalışacak kodları şöyle açıklayabiliriz:  (A) adımında, önce liste öğemize (listemiz) bir referans değişkeni tayin ediyoruz ki artık o öğemizi bir değişken ile kullanabilelim. findViewById() ile XML'de android:id ile isim verdiğimiz öğelere erişiriz.  (B) adımında, new deyimiyle bir ArrayAdapter oluşturuyoruz. Oradaki <String>, ArrayAdapter'ın içinde tutacağı verilerin türünü belirten bir deyim. ArrayAdapter'ın yapılandırıcı metodundaki parametrelerse şu anlama geliyor: o this: Context. Yani bağlam. Bu this deyimiyle değer olarak Activity'nin kendisinin dönmesini sağlıyoruz (Activity sınıfının içindeyiz). ArrayAdapter, çalıştığı yerle ilgili bilgiyi Context'e ulaşarak bulur. o android.R.layout.simple_list_item_1: resource. Bu parametre, kullanıcının göreceği listenin yerleşim dosyasıdır. Listemiz bu layout dosyasından bina edilecektir. o android.R.id.text1: textViewResourceId Bu parametre, layout dosyasındaki TextView'ın adını (id) verdiğimiz yerdir. Her bir veri buradaki bir TextView'a basılır.  (C) adımında artık ayarlamalarını bitirdiğimiz ArrayAdapter'i listemize gösteriyoruz. Şu an uygulamamızı çalıştırdığımızda şöyle bir görüntü elde ederiz:
  8. 8. 7 9.5.Tıklama Olaylarını Yakalama Sıra geldi listeye dokunulduğunda/tıklandığında olacaklara. Bunun için liste öğesine bir tıklama dinleyici tayin etmemiz gerekiyor. Bu tıklama dinleyici ile tıklanan öğenin sırasını alıp, aynı sırayı ulkeler isimli dizide indis olarak kullanacağız. Bu yolla ülke adını alıp ekrana diyalog olarak göstereceğiz. NOT: Aşağıdaki kodu onCreate() metodunun içine ve listemiz.setAdapter()'dan sonra yazmalısınız.
  9. 9. 8 1. //Dosya Adı: MainActivity.java 2. 3. listemiz.setOnItemClickListener(new OnItemClickListener() { 4. 5. @Override 6. public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, 7. long id) { 8. 9. AlertDialog.Builder diyalogOlusturucu = 10. new AlertDialog.Builder(MainActivity.this); 11. 12. diyalogOlusturucu.setMessage(ulkeler[position]) 13. .setCancelable(false) 14. .setPositiveButton("Tamam", new OnClickListener() { 15. @Override 16. public void onClick(DialogInterface dialog, int which) { 17. dialog.dismiss(); 18. } 19. }); 20. diyalogOlusturucu.create().show(); 21. 22. } 23. }); NOT: Liste için tıklama/dokunma olaylarını dinlediğiniz setOnItemClickListener metodunun doğru çalışması için kodunuzun başında import android.widget.AdapterView.OnItemClickListener; ifadesi bulunmalıdır. listemiz.setOnItemClickListener() metodu, parametre olarak öğe tıklamalarını yakalamak için oluşturulmuş bir arayüz (interface) alıyor. new ile hemen anonim bir setOnItemClickListener oluşturuyoruz ve girilmesi zorunlu metotları Eclipse IDE yardımıyla (setOnItemClickListener'ın altını kırmızı çizgiyle çizecektir; "add unimplemented methods"a tıklamanız yeterli) ekliyoruz. Listedeki bir öğeye tıklandığında onItemClick() metodu çalıştırılır.Bu metod bize hangi View'a (burada ListView) tıklandığını, kaçıncı sıradaki (position) öğeye tıklandığını ve o öğenin adının (id) bilgisini verir. Kodumuzdaki önemli nokta AlertDialog oluşturucuyu tanımladıktan sonraki
  10. 10. 9 diyalogOlusturucu.setMessage(ulkeler[position]) kısmı. Burada oluşturacağımız diyalogun göstereceği yazıyı ayarlıyoruz. Parametre olarak ulkeler dizisinin position indisli öğesini veriyoruz. position, onItemClick() metoduyla bize geliyor. Tıklanan öğenin listedeki sırasını elde etmiş oluyoruz. Diyalog kutusunu oluştururken bu sefer setPositiveButton(text, listener) metodunda, gösterilecek düğmede yazacak metni ve tıklandığında olacakları yazıyoruz. İkinci parametre olarak yine bir tıklama dinleyiciye ihtiyacımız var. Bununla bu düğmeye tıklandığında (onClick) olacakları yazıyoruz. Buna göre diyalog kutumuzu kapatıyoruz. Sonuç Tıklama/dokunma dinleme işlemi için yazdığımız anonim sınıflardan oluşan bu kod yoğunluğu gözümüzü korkutmamalı. Genelde sık sık tekrar edilen kodlardan oluşuyor. Üstelik bu kodu yazarken editörün yardımını da alıyoruz. Dokunma olayları için yazdığımız koddan sonra uygulamamızda bir listeye tıklandığında şöyle bir görüntü elde ediyoruz: Bu eğitim içeriğinde basit bir ListView gösterimini gerçekleştirdik. Ayrıntılı bir ListView örneği için Android 301 eğitimlerindeki ListView Özelleştirmesi dersine bakabilirsiniz. 10.ANDROIDMANIFEST.XML AndroidManifest.xml dosyası, herhangi bir Android projesinin olmazsa olmaz dosyasıdır. Bu dosya xmlformatında oluşturulduğu için hem makina hem de insan tarafından okunabilir. Ayrıca Android Geliştirme Ortamı - ADT'nin sağladığı özelliklerle birlikte, görsel arayüzü ile uygulamalarınızda istediğiniz değişiklikleri kolayca yapabilmenizi sağlayan bir yapıya da bürünmüştür.
  11. 11. 10 Aşağıdaki ekran görüntüsünde görebileceğiniz gibi ADT içinde AndroidManifest.xml dosyası 5 farklı sekmeye ayrılmıştır. Şimdi tek tek bunların ne anlama geldiklerini ve bunlarla neler yapabileceğinize bakalım: 10.1.Manifest Manifest sekmesinde uygulamamızın paket adı, versiyon numaraları dahil başlıca özellikleri değiştirebiliyoruz. Hemen altında yer alan "Manifest Extras" bölümünde ise, uygulamamızda yer alacak kütüphaneler, kullanılabilecek ekran boyutları gibi bazı temel özellikler de eklenebilir. Örneğin, burada yer alan Uses Sdk seçeneği ile uygulamamızın çalışmasını istediğimiz minimum SDK sürümü ve hedeflediğimiz ana SDK sürümünü seçebiliyoruz:
  12. 12. 11 10.2.Application Application sekmesinde uygulamamızın temel değişkenlerini ayarlayabiliyoruz. Uygulamanın tema, simge, logo, açıklama ve gereken izinler gibi özelliklerini buradan ayarlayabileceğimiz gibi çoğu zaman kodlama gerektirecek donanım hızlandırma, kullanıcı alanının yönetimi, yedekleme (backup) gibi bazı özellikler için de görsel arayüzü kullanabiliyoruz. Örneğin, aşağıdaki ekran görüntüsünde görebileceğiniz gibi Hardware accelerated (Donanım hızlandırma) = true şeklinde ayarladığımız uygulama, artık bu özelliğe sahip oluyor. Kod çıktısını ise AndroidManifest.xml sekmesinde gözlemleyebiliriz: 10.3.Instrumentation Instrumentation sekmesinde uygulamanıza ek "enstrümanlar" ekleyebilirsiniz. Enstrümanlar, uygulamanızın çalıştığı süreçten (process) ayrı olarak uygulamanızla ilgili testleri yerine getiren, onun yaşam döngüsüne karışan ve onu takip eden Android bileşenleridir. Daha çok fonksiyonel testler yazdığınızda burayı kullanacaksınız.
  13. 13. 12 10.4.AndroidManifest.xml Tüm bu yukarıda saydığımız bileşenlerin kodda görüntülendiği ortam AndroidManifest.xml'dir. Burada isterseniz görsel arayüzde yaptığınız değişikliklerin yansımalarını görebilirsiniz, isterseniz de hiç görsel arayüze bulaşmadan doğrudan xml kodu da yazabilirsiniz: İpucu: Application sekmesinde donanım hızlandırmayı görsel arayüzden etkin duruma getirmiştik, yukarıdaki ekran görüntüsünde bu durumun xml kodundaki yansımasını görebilirsiniz 11.DESTEKLEME KÜTÜPHANESİ'NİN (SUPPORT LİBRARY) KURULUMU Android'te farklı API seviyeleri için uygulama geliştirirken bazı özelliklerin eski sürümlerde olmadığını fark etmişsinizdir. İşte bu noktada devreye Support Library yani Destekleme Kütüphanesi
  14. 14. 13 devreye girer. Android destekleme kütüphanesi, Andorid API'lerinin geriye dönük uyumluluğunu sağlayan bir takım kod kütüphanerinden oluşur. Her destekleme kütüphanesi belli Android API seviyesi için geriye dönük uyumluluk sağlar. Geliştirdiğiniz projeye Android Destekleme Kütüphaneleri'ni nasıl kuracağınız, kullanmayı istediğiniz özelliklere ve destek vermek istediğiniz Android sürüm yelpazesinin genişliğine bağlıdır. Bu eğitim içeriği Destekleme Kütüphanesi (Support Library) paketinin indirilmesinden projeye eklenmesine kadar olan kısımlarda size rehberlik edecektir: 1. Destekleme Kütüphanesi'nin (Support Library) indirilmesi 2. Destekleme Kütüphanesi'nin seçimi 3. Destekleme Kütüphaneleri'nin eklenmesi 1. Kütüphanelerin ek kaynaklar (Resources) olmadan eklenmesi 2. Kütüphanelerin ek kaynaklarıyla birlikte eklenmesi 4. Destekleme Kütüphanesi API'lerinin kullanımı 1. Manifest dosyasındaki ilan (Declaration) değişiklikleri 5. Kod Örnekleri 11.1..Destekleme Kütüphaneleri'nin (Support Library) İndirilmesi Android Destekleme Kütüphanesi paketi Android SDK'ya ek olarak sunulur ve Android SDK Yönetici (Android SDK Manager) aracılığıyla ulaşılabilir. Destekleme Kütüphanesi dosyalarını edinmek için aşağıdaki talimatları takip edin: 1. Android SDK Manager'ı açın. 2. SDK Manager penceresindeyken listeyi aşağı kaydırın ve Extrac dizinine gelin. 3. Android Support Library öğesini seçin. NOT: Eğer Android Studio kullanıyorsanız bunun yerine Android Support Repository'yi seçin ve kurun. 4. Sağ alttaki Install Packages... düğmesine tıklayın.
  15. 15. 14 Resim 1: Android SDK Manager ve seçili Android Support Library öğesi. Kütüphane dosyaları Android SDK dizininin olduğu yere inecektir. SDK dizininizin altındaki/extras/android/support/ dizininde bulabilirsiniz. 11.2.Destekleme Kütüphaneleri'nin Seçimi Bir destekleme kütüphanesini uygulamanıza eklemeden önce hangi özellikleri uygulamanıza eklemek istediğinize ve destekleyeceğiniz en düşük Android sürümünün ne olacağına karar vermelisiniz. Farklı destekleme kütüphanelerinin sağladığı özellikler hakkında daha fazla bilgi almak için Destekleme Kütüphanesi Özellikleri (Support Library Features) belgesine bakınız. 11.3.Destekleme Kütüphaneleri'nin Eklenmesi Bir Destekleme Kütüphanesi'ni kullanmak için projenizin CLASSPATH bağımlılıklarını ona uygun düzeltmeniz gerekir. CLASSPATH bağımlılıkları, projenizin doğru geliştirilmesi, derlenmesi ve çalıştırılması için gerekli bağımlılıklara ilişkin bilgileri tutar. Bu işlemi kullanmak istediğiniz her Destekleme Kütüphanesi için gerçekleştirmeniz de gerekiyor.
  16. 16. 15 Eğer bir kütüphanenin kaynak (resource) içerdiğinden emin değilseniz Destekleme Kütüphanesi Özelliklerisayfasına bakınız. Sıradaki bölümler kaynaklarla veya kaynaklar olmadan destekleme kütüphanesini projenize nasıl ekleyeceğinizi açıklıyor. 11.3.Kütüphanelerin Ek Kaynaklar (Resources) Olmadan Eklenmesi Eclipse kullanıyorsanız: 1. Android SDK Manager kullanarak Android Support Library'yi indirdiğinizden emin olun. 2. Projenizin ana dizininde /libs isimli bir dizin oluşturun. 3. Android SDK kurulum dizinindeki ilgili JAR dosyasını (Örn: /extras/android/support/v4/android- support-v4.jar dizininde) projenizin /libs dizinine kopyalayın. 4. JAR dosyasına sağ tıklayın ve Build Path > Add to Build Path öğesini seçin. Android Studio kullanıyorsanız: 1. Android SDK Manager kullanarak Android Support Repository'yi indirdiğinizden emin olun. 2. Uygulamanızın build.gradle dosyasını açın. 3. dependencies bölümüne destekleme kütüphanesini ekleyin. Örneğin "v4 support" kütüphanesini eklemek için şu satırları ekleyebilirsiniz: 1. dependencies {<br /> 2. &nbsp; &nbsp; ...<br /> 3. &nbsp; &nbsp; compile "com.android.support:support-v4:20.0.+"<br /> 4. } Kütüphanelerin ek kaynaklarıyla birlikte eklenmesi Bir destek kütüphanesini uygulamanıza kaynaklarıyla beraber (örneğin Action Bar için v7 appcompat gibi) eklemek için şunları yapabilirsiniz: Eclipse kullanıyorsanız: Öncelikle destek kütüphanesi temelli bir kütüphane projesi oluşturmalısınız: Kütüphane Projesi nedir? Bir Android kütüphane projesi paylaşılan Android kaynak kodlarını ve kaynaklarını (resources) bir arada tutan projedir. Diğer Android projeleri kütüphane projelerini referans alabilir ve derleme zamanında onun derlenmiş kaynaklarını kendi .apk dosyasına dahil edebilir. Birçok uygulama projesi aynı kütüphaneye referans verebilir. Aynı zamanda tek uygulama projesi de birden fazla kütüphane projesine referans verebilir. Daha fazla bilgi için buraya bakabilirsiniz.
  17. 17. 16 1. Android SDK Manager kullanarak Android Support Library'yi indirdiğinizden emin olun. 2. Bir kütüphane projesi oluşturun ve gerekli JAR dosyalarının projenin Build Path'inde olduğuna emin olun: 1. File menüsünden Import'u seçin. 2. Existing Android Code Into Workspace seçeneğini seçin ve Next'e basın. 3. SDK kurulum dizinine ve ardından destekleme kütüphanesi dizinine göz atın. Örneğin birappcompat projesi ekliyorsanız /extras/android/support/v7/appcompat/ dizinine bakmalısınız. 4. Proje eklemeyi bitirmek için Finish düğmesine basın. v7 appcompat projesi için android-support-v7- appcompat isimli bir proje görüyor olmalısınız. 5. Bu yeni kütüphane projenizde /libs dizinine girip tüm JAR dosyalarının üzerine gelip sağ tıklayarak Build Path > Add to Build Path seçeneğini seçmelisiniz. Örneğin v7 appcompat projesi eklediğinizde libs dizinindeki android-support-v4.jar ve android-support-v7- appcompat.jar dosyalarını Build Path'e ekleyin. 6. Kütüphane projenizin dizinine sağ tıklayın ve Build Path > Configure Build Path öğesini seçin. 7. Order and Export sekmesindeyken az önce Build Path'e eklediğiniz .jar dosyalarını işaretleyin ki bu kütüphane projesine bağımlı olan projeler için kullanılabilir olsun. Örnekteki appcompat projesi için android-support-v4.jar ve android-support-v7-appcomat.jar dosyalarının ikisini de dışarı aktarımı (export) gerekiyor.
  18. 18. 17 8. Android Dependencies öğesinin işaretini kaldırın. 9. Değişiklikleri tamamlamak için OK düğmesine basın. Artık bir ya da birden fazla uygulama projesinde kullanabileceğiniz, seçtiğiniz destekleme kütüphanesini sağlayan bir kütüphane projeniz var. Bu kütüphane projesini uygulama projenize ekleyebilirsiniz: 1. Project Explorer'da iken projenize sağ tıklayın ve Properties'i seçin. 2. Soldaki Android öğesini seçin. 3. Library bölümündeki Add düğmesini seçin. 4. Açılan pencereden kütüphane projesini seçin ve OK düğmesine basın. Örneğin appcompat projesi android-support-v7-appcompat olarak listeleniyor olmalı. 5. OK düğmesine basın.
  19. 19. 18 NOT: Eğer android-support-v7-mediarouter destekleme kütüphanesini kullanıyorsanız onun android-support-v7-appcompat kütüphanesine bağımlılığı olduğuna dikkat ediniz. android-support- v7-mediarouter kütüphanesini derlemek istiyorsanız çalışma alanınıza (workspace) iki projeyi de import etmelisiniz. Bunun ardından v7 appcompat projesini bir kütüphane olacak şekilde v7 mediarouter kütüphane projesine ekleyebilirsiniz. Android Studio kullanıyorsanız: 1. Android SDK Manager kullanarak Android Support Repository'yi indirdiğinizden emin olun. 2. Uygulamanızın build.gradle dosyasını açın. 3. dependencies bölümüne destekleme kütüphanesi ile ilgili ibareyi ekleyin. Örneğin appcompatprojesini dahil etmek için compile "com.android.support:appcompat- v7:18.0.+" satırını ekleyin: 1. dependencies {<br /> 2. &nbsp; &nbsp; ...<br /> 3. &nbsp; &nbsp; compile "com.android.support:appcompat-v7:18.0.+"<br /> 4. } 11.4.Destekleme Kütüphanesi API'lerinin Kullanımı Destekleme Kütüphanesinin mevcut Android framework API'leri için destek sağlayan sınıflarının, framework sınıflarına benzeyen tipik isimleri vardır fakat android.support paketinde yer alırlar veya *Compat son ekiyle isimlendirilmişlerdir. Uyarı: Destekleme kütüphanesinden sınıflarla çalıştığınızda doğru paketten doğru sınıfı import ettiğinizden emin olmalısınız. Örneğin ActionBar sınıfı üzerinde çalışırken: • Destekleme kütüphanesi kullanıyorken android.support.v7.app.ActionBar • API 11 ve üst sürümleri için geliştiriyorken android.app.ActionBar sınıflarını import ettiğinizden emin olmalısınız. NOT: Uygulama projenize destekleme kütüphanesini dahil ettikten sonra, uygulamanızın APK dosyasını yayıma (release) hazırlayan ProGuard isimli aracı kullanmanızı ısrarla öneriyoruz. Kaynak kodunuzu koruma işlevine ek olarak ProGuard, uygulamanıza eklediğiniz her kütüphanedeki kullanılmayan sınıfları kaldırır ve bu sayede uygulamanızın indirme boyutunu mümkün olduğu kadar küçültür. Daha fazla bilgi için ProGuard belgelerine bakınız.
  20. 20. 19 11.5.Manifest Dosyasındaki İlan (Declaration) Değişiklikleri Uygulamanızın geriye dönük uyumluluğunu destekleme kütüphanesi kullanarak artırıyorsanız, uygulamanızın manifest dosyasını da güncellediğinizden emin olmalısınız. Özellikle <uses-sdk> etiketinin android:minSdkVersion elementini güncellemelisiniz. Örneğin: 1. &lt;uses-sdk 2. &nbsp; &nbsp; &nbsp; android:minSdkVersion="7" 3. &nbsp; &nbsp; &nbsp; android:targetSdkVersion="20" /&gt; Bu değişiklik Google Play Store'a uygulamanızın Android 2.1 (API 7) ve üstü Android sürümü kurulu cihazlara kurulabileceğini söyler. NOT: Eğer v4 support ve v7 appcompat kütüphanelerini uygulamanıza dahil ediyorsanız minimum SDK sürümünü "7" olarak ("4" değil) tanımlamalısınız. Uygulamanıza eklediğiniz en yüksek destekleme kütüphanesinin seviyesi, üzerinde çalışabileceği en düşük API sürümünü belirler. Kod Örnekleri Her destekleme kütüphanesi destek API'lerini kolaylıkla kullanmaya başlayabilesiniz diye kod örnekleri içerir. Bu kodlar SDK Manager'dan indirdiğiniz paketin içinde yer alır ve Android SDK kurulum dizininde bulunurlar:  4. sürüm için örnekler: /extras/android/support/samples/Support4Demos/  7. sürüm için örnekler: /extras/android/support/samples/Support7Demos/  13. sürüm için örnekler: /extras/android/support/samples/Support4Demos/  App Navigation örnekleri: /extras/android/support/samples/SupportAppNavigation/ Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır. Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Support Library Setup 12.ACTİON BAR EKLEMEK Action Bar, uygulamanızın Activity'leri için gerçekleyebileceğiniz en önemli tasarım elementlerinden birisidir. Diğer Android uygulamalarıyla tutarlı bir arayüz sağlanmasına yardımcı olacak ve uygulamanızı kolayca alışılabilir kılacak birkaç önemli kullanıcı arayüzü özelliği sağlar. Ana işlevleri şunlardır:  Uygulamanıza bir kimlik veren ve kullanıcının uygulamanızdaki yerini belli eden ayrılmış bir alan
  21. 21. 20  Önemli eylemlere (Arama gibi) tahmin edilebilir bir yolla erişim  Navigasyon ve görüntü değiştirme desteği (sekmelerle veya açılır listelerle) Bu eğitim içeriği ve altındakiler Action Bar'ın temellerine hızlı bir geçiş niteliğinde olacak. Sıradaki Konular  Action Bar'ı Ayarlamak: Basit bir Action Bar'ı Activity'nize nasıl ekleyeceğinizi öğrenebilirsiniz. (Android Support Library kullanarak)  Eylem Düğmelerini Eklemek: Action Bar'a nasıl kullanıcı eylemi ekleyebileceğinizi ve tepki verdireceğinizi öğrenebilirsiniz.  Action Bar'ı Biçimlendirmek: Action Bar'ınızın görünümünü nasıl özelleştireceğinizi öğrenebilirsiniz.  Action Bar'ı Kaplama Olarak Kullanmak: Action Bar'ı layout'unuzun önüne kaplama olarak eklemeyi ve gizlerken geçişleri kullanıcıya fark ettirmeden yapmayı öğrenebilirsiniz. Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır. Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Adding the Action Bar 12.1.Action Bar'ı Ayarlamak En temel haliyle Action Bar, Activity'nin başlığını ve uygulamanın simgesini (solda) gösterir. En basit halinde bile kullanıcılara nerede olduklarını bildirmek ve uygulamanızın kimliğini tutarlı kılmak için kullanışlıdır. Örnek 1: Activity başlığı ve uygulama simgesiyle birlikte örnek bir Action Bar Action Bar'ı eklemek için Action Bar'a izin veren bir temayı kullanan Activity gerekiyor. Böyle bir temanın nasıl isteneceği uygulamanızın desteklediği en düşük Android sürümüne bağlıdır. Bu nedenle bu eğitim içeriği desteklenebilecek en düşük Android sürümüne bağlı olarak iki parçaya ayrılmıştır.
  22. 22. 21 Android 3.0 Ve Üstünü Desteklemek Android 3.0 (API level 11) ile birlikte Theme.Holo temasını kullanan tüm Activity'lerin içine Action Bar yerleştirilmiş oldu. Theme.Holo teması targetSdkVersion veya minSdkVersion değerlerini "11" veya yukarısı yaptığınızda varsayılan olarak etkin olan bir temadır. Kısacası Activity'lerinize Action Bar eklemek istiyorsanız, basitçe her iki değeri 11 ve üstü yapmanız yeterli. Örnek: 1. &lt;manifest ... &gt;<br /> 2. &nbsp; &nbsp; &lt;uses-sdk android:minSdkVersion="11" ... /&gt;<br /> 3. &nbsp; &nbsp; ...<br /> 4. &lt;/manifest&gt; Not: Eğer kendiniz bir tema oluşturduysanız, onun Theme.Holo temasını ebeveyni (parent) olarak kullandığından emin olmalısınız. Artık Theme.Holo teması, uygulamanıza ve tüm Activity'lerine Action Bar gösterilebilmesini sağlayacaktır. Android 2.1 Ve Üstünü Desteklemek Android 3.0'dan aşağıdaki (Android 2.1'e kadar) sürümlerde Action Bar eklemek için uygulamanıza Android Support Library'yi eklemeniz gerekiyor. Başlamak için "Support Library Kurulumu" belgesini okumanız ve v7 appcompat kütüphanesini kurmanız gerekiyor. Projeniz ile Support Library entegrasyonunu tamamladıysanız devam edebilirsiniz: 1. Activity'nizi ActionBarActivity sınıfından türeyecek şekilde güncelleyin. Örneğin: public class MainActivity extends ActionBarActivity { ... } 2. Manifest dosyasında <application> elemanını veya her <activity> elemanını Theme.AppCompat temasını kullanacak şekilde güncelleyin. Örneğin: &lt;activity android:theme="@style/Theme.AppCompat.Light" ... &gt; NOT: Eğer kendiniz bir tema oluşturduysanız, onun Theme.AppCompat temasını ebeveyni (parent) olarak kullandığından emin olmalısınız. Ayrıntılar için Action Bar'ı Biçimlendirmek içeriğine bakabilirsiniz. Artık Activity'niz Android 2.1 (API 7) ve üzerindeki sürümlerde Action Bar ile birlikte gelecektir. Manifest dosyasında uygulamanızın API seviyesini de uygun şekilde belirtmeniz gerektiğini bir kez daha hatırlatmış olalım:
  23. 23. 22 1. &lt;manifest ... &gt; 2. &nbsp; &nbsp; &lt;uses-sdk android:minSdkVersion="7" &nbsp;android:targetSdkVersion="18" /&gt; 3. &nbsp; &nbsp; ... 4. &lt;/manifest&gt; Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır. Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Setting Up the Action Bar 12.2.Eylem Düğmeleri Eklemek Action Bar, uygulamanızın o anki bağlamıyla ilgili önemli işlemleri düğme olarak üzerinize eklemenize olanak sağlar. Bu düğmeler bir simge ve/veya metin ile doğrudan Action Bar'ın üzerinde görünür. Bundan sonra bu düğmeleri "Eylem düğmeleri" olarak anacağız. Action Bar'a sığmayan veya yeterince önemli olmayan eylemler bir yere gizlenir. Bu yere da taşan eylemler bölümü (actions overflow) ismini veriyoruz. Resim 1. Arama için bir eylem düğmesi ve ek eylemleri bulunduran "taşan eylemler" bölümüyle (sağdaki üç nokta) bir Action Bar. Bu belgede şu başlıkları bulacaksınız: 1. Eylemlerin XML İçinde Tanımlanması 2. Eylemlerin Action Bar'a Eklenmesi 3. Eylem Düğmelerinin Tepki Vermesi 4. Alt Seviyedeki Activity'ler için Yukarı Düğmesinin Eklenmesi 12.3.Eylemlerin XML içinde Tanımlanması Tüm eylem düğmeleri ve taşan eylemler bölümündeki diğerleri bir XML menü kaynağı olarak tanımlanır. Eylem düğmelerini Action Bar'a eklemek için projenizin res/menu dizininde yeni bir XML dosyası oluşturun. İçine de eklemek istediğiniz her eylem için bir <item> öğesi ekleyin. Örneğin: res/menu/main_activity_actions.xml 1. &lt;menu xmlns:android="http://schemas.android.com/apk/res/android" &gt;<br /> 2. &nbsp; &nbsp; &lt;!-- Arama, eylem düğmesi olarak görülebilir&nbsp;--&gt;<br />
  24. 24. 23 3. &nbsp; &nbsp; &lt;item android:id="@+id/action_arama"<br /> 4. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:icon="@drawable/ic_action_arama"<br /> 5. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:title="@string/action_arama"<br /> 6. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:showAsAction="ifRoom" /&gt;<br /> 7. &nbsp; &nbsp; &lt;!-- Ayarlar, daima&nbsp;taşan eylemler bölümünde durabilir&nbsp;-- &gt;<br /> 8. &nbsp; &nbsp; &lt;item android:id="@+id/action_ayarlar"<br /> 9. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:title="@string/action_ayarlar"<br /> 10. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:showAsAction="never" /&gt;<br /> 11. &lt;/menu&gt; Bu şekilde bir kod ile arama eylemi eğer Action Bar'da yeterli alan varsa eylem düğmesi olarak görüntülenir. Fakat Ayarlar eylemi daima taşan eylemler bölümünde görünür. (Varsayılan olarak tüm eylemler taşan eylemler bölümünde görünür fakat daha iyisi, önemli her eylemi açıkça göstermektir) NOT: Android'in ikonografisi ile en iyi uyumu yakalamak için Action Bar Simge Seti içinde sunulan simgeleri kullanmalısınız. "icon" özelliği için bir görselin kaynak ID'sini vermeniz gerekiyor. Projenizin res/drawable dizinine kaydettiğiniz bitmap görselinin isminin @drawable/ ile başlaması gerekir. Örneğin "@drawable/ic_action_arama" ifadesi ic_action_arama.png dosyasına karşılık gelir. Benzer şekilde "title" özelliği de projenizin res/values/ dizinindeki XML dosyasında tanımlı bir string kaynağını kullanır. Bu konuyu daha sonra Basit Kullanıcı Arayüzleri Oluşturma (Building a Simple User Interface) başlığı altında inceleyeceğiz. NOT: Uygulamanızın simgesini veya diğer bitmap görsellerini oluştururken en önemli nokta, bu kaynakların farklı ekran yoğunluklarına uygun farklı sürümlerini de oluşturmanızdır. Bu konu Farklı Ekranları Desteklemek hakkındaki içerikte daha sonra ayrıntılı olarak ele alınacak. Uygulamanız Android 2.1 gibi düşük sürümlerle uyumluluk için Support Library kullanıyorsa, showAsAction özelliği android: isim uzayında kullanılamayacaktır. Support Library tarafından sağlanan bu özellik yerine kendi XML isim uzayını tanımlamalısınız ve bunu showAsAction özelliğinin ön eki olarak kullanmalısınız. (Elle verilmiş bir XML isim uzayı uygulamanızın ismine uygun olmalıdır fakat istediğiniz herhangi bir isim de olabilir. Bu isim sadece onu ilan ettiğiniz dosyanın kapsamında geçerli olacaktır) Örneğin: res/menu/main_activity_actions.xml
  25. 25. 24 1. &lt;menu xmlns:android="http://schemas.android.com/apk/res/android"<br /> 2. &nbsp; &nbsp; &nbsp; xmlns:uygulamaismi="http://schemas.android.com/apk/res-auto" &gt;<br /> 3. &nbsp; &nbsp; &lt;!-- Arama, eylem düğmesi olarak görülebilir --&gt;<br /> 4. &nbsp; &nbsp; &lt;item android:id="@+id/action_search"<br /> 5. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:icon="@drawable/ic_action_search"<br /> 6. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:title="@string/action_search"<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uygulamaismi:showAsAction="ifRoom" &nbsp;/&gt;<br /> 8. &nbsp; &nbsp; ...<br /> 9. &lt;/menu&gt; 12.4.Eylemlerin Action Bar'a Eklenmesi Menü öğelerini Action Bar'a yerleştirmek için Activity'nizin onCreateOptionsMenu() isimli callback metodunu gerçeklemeniz gerekir. Bu metotla Menu nesnesi içinde verilen menü kaynağını gösterime hazır edebilirsiniz (inflate). Örneğin: 1. @Override 2. public boolean onCreateOptionsMenu(Menu menu) { 3. &nbsp; &nbsp; // Action Bar içinde kullanılacak menü öğelerini inflate edelim 4. &nbsp; &nbsp; MenuInflater inflater = getMenuInflater(); 5. &nbsp; &nbsp; inflater.inflate(R.menu.main_activity_actions, menu); 6. &nbsp; &nbsp; return super.onCreateOptionsMenu(menu); 7. } 12.5.Eylem Düğmelerinin Tepki Vermesi Kullanıcı eylem düğmelerine veya taşan eylemler bölmesindeki diğer öğelere tıkladığında, sistem Activity'nizin onOptionsItemSelected() isimli callback metodunu çağırır. Bu metotdaki gerçekleştiriminiz (implementasyonunuz) ise metodun verdiği MenuItem üzerinden getItemId() metodunu çağırır ve böylece kullanıcının bastığı öğesi belirlersiniz. Dönen ID değeri, sizin tanımladığınız <item> elementinin içindekiandroid:id özelliğinin değeri olacaktır. 1. @Override 2. public boolean onOptionsItemSelected(MenuItem item) { 3. &nbsp; &nbsp; // Action Bar öğelerindeki basılmaları idare edelim 4. &nbsp; &nbsp; switch (item.getItemId()) { 5. &nbsp; &nbsp; &nbsp; &nbsp; case R.id.action_search:
  26. 26. 25 6. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; openSearch(); 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true; 8. &nbsp; &nbsp; &nbsp; &nbsp; case R.id.action_settings: 9. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; openSettings(); 10. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true; 11. &nbsp; &nbsp; &nbsp; &nbsp; default: 12. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return super.onOptionsItemSelected(item); 13. &nbsp; &nbsp; } 14. } 12.6.Alt Seviyedeki Activity'ler için Yukarı Düğmesinin Eklenmesi Uygulamanıza ana giriş noktası sağlamayan ("ana" ekran olmayan Activity'ler) tüm ekranlar, kullanıcıya mantıksal olarak ebeveyni olan ekrana geçebilmesi için Action Bar'daki yukarı düğmesi yardımıyla uygulamanızın hiyerarşisi içinde gezinme yolunu sunmalıdır. Resim 2. Gmail'deki Yukarı düğmesi. Android 4.1 ve üzerinde çalışırken veya Support Library'deki ActionBarActivity'yi kullanırken, "yukarı" gezinmeyi sağlamak için manifest dosyasında Activity'ye ebeveyn olan Activity'yi basitçe tanımlamalı ve o alttaki Activity'de Action Bar için "yukarı" düğmesinin etkin olmasını sağlamalısınız. Aşağıdaki örnekte, bir Activity'nin ebeveyn Activity'sini manifest dosyasında nasıl tanımlayacağınızı görebilirsiniz: 1. &lt;application ... &gt;<br /> 2. &nbsp; &nbsp; ...<br /> 3. &nbsp; &nbsp; &lt;!-- Ana (main) Activity&nbsp;(Ebeveyni olmayan) --&gt;<br /> 4. &nbsp; &nbsp; &lt;activity<br /> 5. &nbsp; &nbsp; &nbsp; &nbsp; android:name="org.tcellgy.android.ornek1.MainActivity" ...&gt;<br /> 6. &nbsp; &nbsp; &nbsp; &nbsp; ...<br /> 7. &nbsp; &nbsp; &lt;/activity&gt;<br /> 8. &nbsp; &nbsp; &lt;!-- MainActivity'nin bir çocuğu&nbsp;--&gt;<br /> 9. &nbsp; &nbsp; &lt;activity<br /> 10. &nbsp; &nbsp; &nbsp; &nbsp; android:name="org.tcellgy.android.ornek1.DetayActivity"<br />
  27. 27. 26 11. &nbsp; &nbsp; &nbsp; &nbsp; android:label="@string/title_activity_detay"<br /> 12. &nbsp; &nbsp; &nbsp; &nbsp; android:parentActivityName="org.tcellgy.android.ornek1.MainActivity" &gt;<br /> 13. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- 4.0 ve aşağısını desteklemek için ebeveyn Activity meta- datası&nbsp;--&gt;<br /> 14. &nbsp; &nbsp; &nbsp; &nbsp; &lt;meta-data<br /> 15. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:name="android.support.PARENT_ACTIVITY"<br /> 16. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:value="com.example.myfirstapp.MainActivity" /&gt;<br /> 17. &nbsp; &nbsp; &lt;/activity&gt;<br /> 18. &lt;/application&gt; Ardından setDisplayHomeAsUpEnabled() metodunu çağırarak uygulama simgenizin Yukarı düğmesi gibi çalışmasını sağlayabilirsiniz: 1. @Override 2. public void onCreate(Bundle savedInstanceState) { 3. super.onCreate(savedInstanceState); 4. setContentView(R.layout.activity_displaymessage); 5. 6. getSupportActionBar().setDisplayHomeAsUpEnabled(true); 7. // minSdkVersion değerini 11 ve üstüyse bunu kullanın: 8. // getActionBar().setDisplayHomeAsUpEnabled(true); 9. } Sistem MainActivity'yi DetayActivity'nin ebeveyni bildiği için kullanıcı Yukarı düğmesine bastığında uygun ebeveyn Activity gösterilecektir - sizin Yukarı düğmesi için bir şey yapmanıza gerek kalmayacaktır. Yukarı gezinme hakkında daha fazla bilgi için Yukarı Gezinmeyi Sağlamak (Providing Up Navigation) belgesine bakınız. Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır. Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Adding Action Buttons
  28. 28. 27 12.7.Action Bar'ı Biçimlendirmek Action Bar, kullanıcının uygulamanıza aşina olmasını ve gerçekleştireceği eylemleri daha kolay tahmin etmesini sağlar. Fakat bu durum, uygulamanızdaki Action Bar'ın diğer uygulamalardakiyle aynı olması gerektiği anlamına gelmiyor. Action Bar'ı ürününüzü daha iyi yansıtacak ya da çağrıştıracak şekilde biçimlendirmek isterseniz, kolaylıkla Android'in stil ve tema kaynaklarını kullanabilirsiniz. Android'in "dark" ve "light" Action Bar stili içeren birkaç tane Activity teması kendiliğinden vardır. Action Bar'ınızın görünümünü değiştirmek istediğinizde bu temalardan yeni tema türetebilirsiniz. NOT: Action Bar için Support Library API'lerini kullanıyorsanız, stillerinizde mutlaka Theme.AppCompat tema ailesini kullanmalısınız. Böyle yaptığınızda stillerinizde ilan ettiğiniz stil özelliklerini iki kere ilan etmiş olmanız gerekecek: biri platformun stil özelliklerini (android: isim uzayındaki özellikler) kullanarak ilan edilecek, diğeri Support Library içindeki stil özelliklerini kullanarak ilan edilecek. Bu cümle kafanızı karıştırmasın. Support Library kullanan örneklerdeki bu iki seferlik kullanımı aşağıdaki örneklerde bulabilirsiniz. Bu belgede Action Bar Biçimlendirme ile ilgili şu başlıkları bulacaksınız: 1. Yerleşik Android Temasının Kullanılması 2. Arkaplanın Özelleştirilmesi 3. Metin Renginin Özelleştirilmesi 4. Sekme Göstergesinin (Tab Indicator) Özelleştirilmesi 12.8.Yerleşik Android Temasının Kullanılması Android'in Action Bar renklerine uygulanabilecek iki temel Activity teması var:  Theme.Holo isimli "dark" yani "karanlık" bir tema  Theme.Holo.Light isimli "light" yani "aydınlık" bir tema
  29. 29. 28 Bu temaları tüm uygulamanıza veya birbirinden bağımsız olarak Activity'lerinize uygulamak için manifest dosyanızdayken android:theme özelliğini <application> veya <activity> elementlerinde ilan edebilirsiniz. Örnek: &lt;application android:theme="@android:style/Theme.Holo.Light" ... /&gt; Theme.Holo.Light.DarkActionBar temasını ilan ederek Activity'nin geri kalanı aydınlık temayı kullanırken Action Bar'ınızın karanlık temayı kullanmasını da sağlayabilirsiniz. Eğer Support Library kullanıyorsanız, Theme.AppComat temalarını kullanmanız gerekiyor:  Karanlık tema için Theme.AppCompat teması  Aydınlık tema için Theme.AppCompat.Light teması  Aydınlık tema ve karanlık Action Bar için Theme.AppCompat.Light.DarkActionBar teması
  30. 30. 29 Action Bar'daki simgelerinizin Action Bar renkleriyle uyumlu ve seçilebilir olduğundan emin olmalısınız. Yardımcı olması açısından Holo Light ve Holo Dark Action Bar temaları için kullanabileceğiniz Action Bar Simge Seti'ne göz atmalısınız. 12.9.Arkaplanın Özelleştirilmesi Action Bar'ın arkaplanını değiştirmek için Activity'niz için özel (custom) bir tema oluşturmalı ve "actionBarStyle" isimli özelliği override (yeniden yazmalısınız) etmelisiniz. Bu özellik başka bir stili işaret edecek. Bu stilde de Action Bar arkaplanı için bir resim kaynağı (drawable resource) tanımlayabileceğiniz "background" özelliğini override edeceksiniz. Uygulamanız gezinme sekmeleri (navigation tabs) veya ayrılmış (split) Action Bar kullanıyorsa, bunlar için de arkaplan tanımlayabilirsiniz. Bunu yapmak için sırasıyla backgroundStacked ve backgroundSplit isimli özellikleri kullanabilirsiniz. Dikkat: Burada önemli olan şey özel temanızdan uygun bir ebeveyn temanın ve onun stillerinden uygun stillerin ilan (declaring) edilmesidir. Bir ebeveyn (parent) stil olmadığında Action Bar'ınız birçok stil özelliğinden mahrum kalacaktır - kendiniz onları tek tek ilan etmezseniz. Android 3.0 Ve Üst Sürümleri İçin Sadece Android 3.0 ve üst sürümlerini destekleyecekseniz, Action Bar'ınızın arkaplanını şuna benzer şekilde tanımlayabilirsiniz: res/values/themes.xml 1. &lt;?xml version="1.0" encoding="utf-8"?&gt; 2. &lt;resources&gt; 3. &nbsp; &nbsp; &lt;!-- uygulama veya Activity ye uygulanacak tema --&gt; 4. &nbsp; &nbsp; &lt;style name="OzelActionBarTemasi" 5. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@android:style/Theme.Holo.Light.DarkActionBar"&gt; 6. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarStyle"&gt;@style/OzelActionBarStili&lt;/item&gt;
  31. 31. 30 7. &nbsp; &nbsp; &lt;/style&gt; 8. 9. &nbsp; &nbsp; &lt;!-- Action Bar stili --&gt; 10. &nbsp; &nbsp; &lt;style name="OzelActionBarStili" 11. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"&gt; 12. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:background"&gt;@drawable/actionbar_background&lt;/item&gt; 13. &nbsp; &nbsp; &lt;/style&gt; 14. &lt;/resources&gt; Ardından temayı tüm uygulamaya veya bağımsız olarak Activity'lere uygulayabilirsiniz: &lt;application android:theme="@style/OzelActionBarTemasi" ... /&gt; veya &lt;activity android:theme="@style/OzelActionBarTemasi" ... /&gt; Android 2.1 Ve Üst Sürümleri İçin Support Library kullandığınızda yukarıdaki tema şu şekilde olmalıdır: res/values/themes.xml 1. </p> 2. 3. <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br /> 4. &lt;resources&gt;<br /> 5. &nbsp; &nbsp; &lt;!-- uygulama veya activity ye uygulanacak tema --&gt;<br /> 6. &nbsp; &nbsp; &lt;style name="OzelActionBarTemasi"<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Theme.AppCompat.Light.DarkActionBar"&gt;<br /> 8. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarStyle"&gt;@style/OzelActionBarStili&lt;/item&gt;</p> 9. 10. <p>&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Support Library uyumluluğu için --&gt;<br /> 11. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- dikkat edin android: ön eki yok --&gt;<br /> 12. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="actionBarStyle"&gt;@style/OzelActionBarStili&lt;/item&gt;<br /> 13. &nbsp; &nbsp; &lt;/style&gt;</p> 14.
  32. 32. 31 15. <p>&nbsp; &nbsp; &lt;!-- Action Bar stilleri --&gt;<br /> 16. &nbsp; &nbsp; &lt;style name="OzelActionBarStili"<br /> 17. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"&gt;<br /> 18. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:background"&gt;@drawable/actionbar_background&lt;/item&gt;</p> 19. 20. <p>&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Support Library uyumluluğu için --&gt;<br /> 21. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- dikkat edin android: ön eki yok --&gt;<br /> 22. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="background"&gt;@drawable/actionbar_background&lt;/item&gt;<br /> 23. &nbsp; &nbsp; &lt;/style&gt;<br /> 24. &lt;/resources&gt;</p> 25. 26. <p> Ardından temayı tüm uygulamaya veya bağımsız olarak Activity'lere uygulayabilirsiniz: &lt;application android:theme="@style/OzelActionBarTemasi" ... /&gt; veya &lt;activity android:theme="@style/OzelActionBarTemasi" ... /&gt; 12.10.Metin Renginin Özelleştirilmesi Action Bar'ın içindeki metnin rengini değiştirmek için her text elementinin farklı özelliklerini override etmelisiniz - yeniden yazmalısınız:  Action Bar başlık metni: "textColor" özelliği olan özel bir stil oluşturun ve oluşturduğunuz özel actionBarStyle stilinde kullanmak üzere titleTextStyle barındıran yeni bir stil tanımlayın. Not: titleTextStyle özelliğine uygulanan özel stil ebeveyn stil olarakTextAppearance.Holo.Widget.ActionBar.Title stilini kullanmalıdır.  Action Bar sekmeleri: Activity temanızda actionBarTabTextStyle'ı ezin.  Eylem düğmeleri: Activity temanızda actionMenuTextColor'ı ezin. Android 3.0 Ve Üst Sürümleri İçin Sadece Android 3.0 ve üstünü destekleyeceğimiz zaman şuna benzeyecek bir XML stil dosyası oluşturabilirsiniz: 1. </p>
  33. 33. 32 2. 3. <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br /> 4. &lt;resources&gt;<br /> 5. &nbsp; &nbsp; &lt;!-- uygulama veya activity ye uygulanacak tema --&gt;<br /> 6. &nbsp; &nbsp; &lt;style name="OzelActionBarTemasi"<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Theme.Holo"&gt;<br /> 8. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarStyle"&gt;@style/OzelActionBarStili&lt;/item&gt;<br /> 9. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarTabTextStyle"&gt;@style/OzelActionBarStiliTabText&lt;/item&gt;<br /> 10. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionMenuTextColor"&gt;@color/actionbar_text&lt;/item&gt;<br /> 11. &nbsp; &nbsp; &lt;/style&gt;</p> 12. 13. <p>&nbsp; &nbsp; &lt;!-- ActionBar stilleri --&gt;<br /> 14. &nbsp; &nbsp; &lt;style name="OzelActionBarStili"<br /> 15. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.Holo.ActionBar"&gt;<br /> 16. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:titleTextStyle"&gt;@style/OzelActionBarStiliTitleText&lt;/item&gt;<br /> 17. &nbsp; &nbsp; &lt;/style&gt;</p> 18. 19. <p>&nbsp; &nbsp; &lt;!-- Action Bar başlık metni --&gt;<br /> 20. &nbsp; &nbsp; &lt;style name="OzelActionBarStiliTitleText"<br /> 21. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/TextAppearance.Holo.Widget.ActionBar.Title"&gt;<br /> 22. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:textColor"&gt;@color/actionbar_text&lt;/item&gt;<br /> 23. &nbsp; &nbsp; &lt;/style&gt;</p> 24. 25. <p>&nbsp; &nbsp; &lt;!-- Action Bar sekme metinlerinin stilleri --&gt;<br /> 26. &nbsp; &nbsp; &lt;style name="OzelActionBarStiliTabText"<br /> 27. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.Holo.ActionBar.TabText"&gt;<br /> 28. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:textColor"&gt;@color/actionbar_text&lt;/item&gt;<br /> 29. &nbsp; &nbsp; &lt;/style&gt;<br />
  34. 34. 33 30. &lt;/resources&gt;</p> 31. 32. <p> Android 2.1 Ve Üst Sürümleri İçin Support Library kullandığınızda, XML stil dosyanızı şuna benzer şekilde oluşturabilirsiniz: 1. </p> 2. 3. <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br /> 4. &lt;resources&gt;<br /> 5. &nbsp; &nbsp; &lt;!-- uygulama veya activity ye uygulanacak tema --&gt;<br /> 6. &nbsp; &nbsp; &lt;style name="CustomActionBarTheme"<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Theme.AppCompat"&gt;<br /> 8. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarStyle"&gt;@style/MyActionBar&lt;/item&gt;<br /> 9. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarTabTextStyle"&gt;@style/MyActionBarTabText&lt;/item&gt;<br /> 10. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionMenuTextColor"&gt;@color/actionbar_text&lt;/item&gt;</p> 11. 12. <p>&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Support Library uyumluluğu için --&gt;<br /> 13. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- dikkat edin android: ön eki yok --&gt;<br /> 14. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="actionBarStyle"&gt;@style/MyActionBar&lt;/item&gt;<br /> 15. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="actionBarTabTextStyle"&gt;@style/MyActionBarTabText&lt;/item&gt;<br /> 16. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="actionMenuTextColor"&gt;@color/actionbar_text&lt;/item&gt;<br /> 17. &nbsp; &nbsp; &lt;/style&gt;</p> 18. 19. <p>&nbsp; &nbsp; &lt;!-- Action Bar stilleri --&gt;<br /> 20. &nbsp; &nbsp; &lt;style name="MyActionBar"<br /> 21. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.AppCompat.ActionBar"&gt;<br /> 22. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:titleTextStyle"&gt;@style/MyActionBarTitleText&lt;/item&gt;</p> 23.
  35. 35. 34 24. <p>&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Support Library uyumluluğu için --&gt;<br /> 25. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- dikkat edin android: ön eki yok --&gt;<br /> 26. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="titleTextStyle"&gt;@style/MyActionBarTitleText&lt;/item&gt;<br /> 27. &nbsp; &nbsp; &lt;/style&gt;</p> 28. 29. <p>&nbsp; &nbsp; &lt;!-- Action Bar başlık metni --&gt;<br /> 30. &nbsp; &nbsp; &lt;style name="MyActionBarTitleText"<br /> 31. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"&gt;<br /> 32. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:textColor"&gt;@color/actionbar_text&lt;/item&gt;<br /> 33. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- textColor, Support Library ile geriye uyumlu bir özelliktir --&gt;<br /> 34. &nbsp; &nbsp; &lt;/style&gt;</p> 35. 36. <p>&nbsp; &nbsp; &lt;!-- Action Bar sekmelerinin metni --&gt;<br /> 37. &nbsp; &nbsp; &lt;style name="MyActionBarTabText"<br /> 38. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.AppCompat.ActionBar.TabText"&gt;<br /> 39. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:textColor"&gt;@color/actionbar_text&lt;/item&gt;<br /> 40. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- textColor, Support Library ile geriye uyumlu bir özelliktir --&gt;<br /> 41. &nbsp; &nbsp; &lt;/style&gt;<br /> 42. &lt;/resources&gt;</p> 43. 44. <p> 12.11.Sekme Göstergesinin (Tab Indicator) Özelleştirilmesi Gezinme sekmelerinde (navigation tabs) kullanılan göstergelerde (aşağıdaki örnekte seçili sekmenin altında beyaz çizgiyi görüyorsunuz) değişiklik yapmak için actionBarTabStyle özelliğini override eden bir Activity teması oluşturmalısınız. actionBarTabStyle özelliğinde "background" özelliğini ezdiğiniz başka bir stil kaynağını işaret etmelisiniz. Bu stil kaynağında state-list olarak andığımız ve farklı durumlara ilişkin tanımlamaları içeren bir drawable olmalı.
  36. 36. 35 Not: State-list'ler yani durumların listesini bulunduran drawable kaynakları önemlidir. O an seçilen sekmeyi diğer sekmelerden ayırabilmeniz için arkaplanını değiştirebilirsiniz. Bir düğmenin birden fazla durumunu yöneteceğiniz drawable kaynakları nasıl oluşturacağınız hakkında daha fazla bilgi için Durum Listesi - State List belgesini okuyunuz. Aşağıdaki örneğimizde bir Action Bar sekmesinin farklı durumları için belli arkaplan görselleri göstermenize yarayan state-list drawable kaynağını görebilirsiniz: res/drawable/actionbar_tab_indicator.xml 1. </p> 2. 3. <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br /> 4. &lt;selector xmlns:android="http://schemas.android.com/apk/res/android"&gt;</p> 5. 6. <p>&lt;!-- DÜĞMEYE BASIL/MA/DIĞINDAKİ DURUMLAR --&gt;</p> 7. 8. <p>&nbsp; &nbsp; &lt;!-- Odaklamasız-Non focused durumlar --&gt;<br /> 9. &nbsp; &nbsp; &lt;item android:state_focused="false" android:state_selected="false"<br /> 10. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="false"<br /> 11. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_unselected" /&gt;<br /> 12. &nbsp; &nbsp; &lt;item android:state_focused="false" android:state_selected="true"<br /> 13. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="false"<br /> 14. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_selected" /&gt;</p> 15. 16. <p>&nbsp; &nbsp; &lt;!-- Odaklı-Focused durumlar (d-pad veya fare ile üzerine gelip odaklandığında gibi) --&gt;<br /> 17. &nbsp; &nbsp; &lt;item android:state_focused="true" android:state_selected="false"<br /> 18. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="false"<br />
  37. 37. 36 19. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_unselected_focused" /&gt;<br /> 20. &nbsp; &nbsp; &lt;item android:state_focused="true" android:state_selected="true"<br /> 21. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="false"<br /> 22. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_selected_focused" /&gt;</p> 23. 24. <p><br /> 25. &lt;!-- DÜĞMEYE BASILDIĞINDAKİ DURUMLAR --&gt;</p> 26. 27. <p>&nbsp; &nbsp; &lt;!-- Odaklamasız-Non focused durumlar --&gt;<br /> 28. &nbsp; &nbsp; &lt;item android:state_focused="false" android:state_selected="false"<br /> 29. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="true"<br /> 30. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_unselected_pressed" /&gt;<br /> 31. &nbsp; &nbsp; &lt;item android:state_focused="false" android:state_selected="true"<br /> 32. &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="true"<br /> 33. &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_selected_pressed" /&gt;</p> 34. 35. <p>&nbsp; &nbsp; &lt;!-- Odaklı-Focused durumlar (d-pad veya fare ile üzerine gelip odaklandığında gibi) --&gt;<br /> 36. &nbsp; &nbsp; &lt;item android:state_focused="true" android:state_selected="false"<br /> 37. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="true"<br /> 38. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_unselected_pressed" /&gt;<br /> 39. &nbsp; &nbsp; &lt;item android:state_focused="true" android:state_selected="true"<br /> 40. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:state_pressed="true"<br /> 41. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; android:drawable="@drawable/tab_selected_pressed" /&gt;<br /> 42. &lt;/selector&gt;</p> 43. 44. <p>
  38. 38. 37 Android 3.0 Ve Üst Sürümleri İçin Sadece Android 3.0 ve üstünü desteklediğinizde XML stil dosyanız şuna benzer bir şey olacaktır: res/values/themes.xml 1. </p> 2. 3. <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br /> 4. &lt;resources&gt;<br /> 5. &nbsp; &nbsp; &lt;!-- uygulama ya da activity ye uygulanacak tema --&gt;<br /> 6. &nbsp; &nbsp; &lt;style name="OzelActionBarTemasi"<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Theme.Holo"&gt;<br /> 8. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarTabStyle"&gt;@style/OzelActionBarSekmeleri&lt;/item&gt;<br /> 9. &nbsp; &nbsp; &lt;/style&gt;</p> 10. 11. <p>&nbsp; &nbsp; &lt;!-- Action Bar sekme stilleri --&gt;<br /> 12. &nbsp; &nbsp; &lt;style name="OzelActionBarSekmeleri"<br /> 13. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.Holo.ActionBar.TabView"&gt;<br /> 14. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Sekme belirticileri - tab indicators --&gt;<br /> 15. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:background"&gt;@drawable/actionbar_tab_indicator&lt;/item&gt;<br /> 16. &nbsp; &nbsp; &lt;/style&gt;<br /> 17. &lt;/resources&gt;</p> 18. 19. <p> Android 2.1 Ve Üst Sürümleri İçin Support Library kullandığınızda XML stil dosyanız şuna benzer bir şey olacaktır: res/values/themes.xml 1. </p> 2. 3. <p>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br /> 4. &lt;resources&gt;<br /> 5. &nbsp; &nbsp; &lt;!-- uygulama ya da activity ye uygulanacak tema --&gt;<br />
  39. 39. 38 6. &nbsp; &nbsp; &lt;style name="OzelActionBarTemasi"<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Theme.AppCompat"&gt;<br /> 8. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:actionBarTabStyle"&gt;@style/OzelActionBarSekmeleri&lt;/item&gt;</p> 9. 10. <p>&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Support library uyumluluğu için --&gt;<br /> 11. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- android: ön eki olmadığına dikkat edin --&gt;<br /> 12. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="actionBarTabStyle"&gt;@style/OzelActionBarSekmeleri&lt;/item&gt;<br /> 13. &nbsp; &nbsp; &lt;/style&gt;</p> 14. 15. <p>&nbsp; &nbsp; &lt;!-- Action Bar sekme stilleri --&gt;<br /> 16. &nbsp; &nbsp; &lt;style name="OzelActionBarSekmeleri"<br /> 17. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;parent="@style/Widget.AppCompat.ActionBar.TabView"&gt;<br /> 18. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Sekme belirticileri - tab indicators --&gt;<br /> 19. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="android:background"&gt;@drawable/actionbar_tab_indicator&lt;/item&gt;</p> 20. 21. <p>&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- Support library uyumluluğu için --&gt;<br /> 22. &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- android: ön eki olmadığına dikkat edin --&gt;<br /> 23. &nbsp; &nbsp; &nbsp; &nbsp; &lt;item name="background"&gt;@drawable/actionbar_tab_indicator&lt;/item&gt;<br /> 24. &nbsp; &nbsp; &lt;/style&gt;<br /> 25. &lt;/resources&gt;</p> 26. 27. <p> Action Bar için tümden stiller üretmenize yarayan Android Action Bar Style Generator isimli aracı deneyebilirsiniz. Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır. Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Styling the Action Bar
  40. 40. 39 13.UYGULAMANIN CİHAZ ÜZERİNDE ÇALIŞTIRILMASI Uygulamayı Android yüklü bir cihazda çalıştırmak için tek yapmamız gereken, önce cihazınızın Ayarlar'ında USB hata ayıklama modunu devreye almanız, ardından da cihazı bilgisayara USB portundan bağlamanız gerekir. Eğer bilgisayarımızda cihazla ilgili sürücüler doğru şekilde yüklendiyse (Windows için) DDMS içerisinde cihazı görebilmemiz gerekir. Eğer cihaz görüntülenemiyorsa, o modele ait sürücüleri üretici sayfasından yüklememiz gerekir (Device Drivers). Sürücülerin yüklenmesi bittikten sonra DDMS cihazımızı tanıyacaktır. NOT : Bazen Eclipse’i yeniden başlatmak gerekebilir. Cihaz görüntülendikten sonra tek yapmamız gereken tıpkı sanal makinada olduğu gibi projede Run As...seçeneğini tıklayıp uygulamayı cihazda başlatmaktır. Bu aşamadan sonra APK dosyası hazırlanır ve uygulama cihaza atılır. Cihazın konsol mesajları (log) aynı sanal makinada olduğu gibi LogCat altından görüntülenebilir. 14.UYGULAMANIN PAKETLENMESİ VE İMZALANMASI Yazdığınız Android uygulamasının cihaz üzerinde ya da sanal makinadaki testlerinden sonra, Google Play'de yayınlanmaya hazır olduğunu düşünüyorsanız sonraki iki adımda, önce uygulamanızın çalıştırılabilir paketinin oluşturulması ve sonrasında imzalanması gerekecektir.
  41. 41. 40 14.1.Android Uygulama Paketi (.apk) .apk dosyaları Android Application Package File olarak adlandırılır ve uygulama kodlarının paketlenerek çalıştırılabilir hale gelmesini sağlar. Uygulama paketleri aslında her işletim sistemi için farklı yapılarda ve isimlerde de mevcuttur: Windows ortamında .msi, Mac OS ortamında .dmg, Linux ortamında ise .rpm, .debvb. Android'de biten projemizi Google Play'de yayınlamak için ADT'de geliştirilmiş bir araç bulunmaktadır. Projemizde AndroidManifest.xml dosyasını açalım ve aşağıdaki ekran görüntüsünde olduğu gibi Manifestsekmesi'nde "Use the Export Wizard" linkine tıklayalım: Bu link, eskiden Android'de Eclipse üzerinden son derece karmaşık ve uzun olan bu onay sürecini epey hızlandıran güzel bir araçtır. Linke tıkladığımızda karşımıza aşağıdaki ekran görüntüsü gelecektir. Burada projemizin oluşturulacağı adı belirleyip ilerliyoruz:
  42. 42. 41 Şimdi uygulamamızın anahtarının tutulacağı klasörü belirlememiz gerekiyor. Eğer ilk kez bu klasörü oluşturacaksak, Create new keystore seçeneğini, mevcut uygulamamızı güncelliyorsak Use existing keystore seçeneğini kullanmalısınız. Burada dikkat etmemiz gereken en önemli nokta, yeni belirleyeceğimiz parolamızdır. İleride işimize yarayacak olan bu parolayı kaybetmemiz durumunda geri dönüş mümkün olmayabilir:
  43. 43. 42 Parolamızı ve klasörümüzü belirledikten sonra uygulamamızın bazı detaylarını belirtmemiz gereken bir ekrana yönlendirileceğiz. Yine burada ilgili yerleri doldurarak ilerleyelim: Son olarak ekrana oluşturulan ve imzalanan .apk dosyasını konumlandırmamızı istediğimiz kısım gelecektir. Buradan istediğimiz yeri seçerek imzalı .apk dosyamızı oluşturarak bu süreci tamamlıyoruz:
  44. 44. 43 15.GOOGLE PLAY'E UYGULAMA YÜKLEME VE GÜNCELLEME Android uygulamamızı yazdık, imzaladık ve paketledik. Artık kullanıcılarla buluşturma vakti. Her Android cihazında mevcut gelen Google Play uygulama mağazasına, yazdığımız uygulamayı göndermek için yine Google tarafından sunulan Google Play Developer Console kullanmamız gerekiyor. Google Play Store üzerinde uygulama yayınlayabilmek için Google hesabınızla Play Store'a kaydolmanız gerekmektedir. Bunun için senelik 25 Amerikan doları gibi bir ücret ödemelisiniz. Geliştirici hesabımızla Google Play Store'un uygulama yayınlama sayfası girdiğimizde karşımıza geliştirici kontrol paneli gelir ve varsa mevcut uygulamalarımız aşağıda olduğu gibi listelenir: Ancak biz ilk kez bir uygulama yayınlayacaklar için ekranın boş gelmesi normaldir. O halde hemen uygulamamızı yayınlamaya başlayalım.
  45. 45. 44 Google Play Geliştirici Konsolu'nu açtığımızda karşımıza gelen ilk ekranda Yeni uygulamalar ekleyindüğmesini kullanarak sürece başlıyoruz: Yeni uygulamalar ekleyin dedikten sonra karşımıza aşağıdaki gibi ufak bir pencere gelecektir. İstersek önceden hazırladığımız APK dosyasını karşı tarafa yüklebilir, istersek de Mağaza Girişi için gerekli sunumları hazırlarız. Ancak burada uygulamamızın dilini ve başlığını yazmamız gerekiyor: APK yüklemek için bilgisayarımızda bulunan ve önceden oluşturduğumuz imzalı ve paketlenmiş APK dosyasını yüklüyoruz. Konsol'da bize üç sekme sunulur: Üretim, Beta Testi ve Alfa Testi şeklinde. Bu bölümler aslında uygulamamızı son hale getirene kadar (kullanıcıyla buluşmaya hazır)
  46. 46. 45 süreç takibi yapmamızı sağlamak içindir. Eğer uygulamamızın kullanıcıya sunulmasına hazır olmadığını düşünüyorsanız henüz, alfa yada beta testine alabilirsiniz. Bu durumunda bazı özellikleri mevcuttur aslında. Örneğin, beta testinde olan uygulamanızı yalnızca belirli kullanıcılarla (sizin tanımlayabileceğiniz de dahil) buraya yükleyerek de paylaşabilirsiniz. Eğer uygulamanız kullanıcılarla buluşmaya hazırsa, direkt üretim kısmına APK dosyamızı yükleyerek süreci tamamlayalım: Sol navigasyondan görebileceğiniz gibi APK sekmesinin altında Mağaza Girişi vardır. Onu açtığımızda ise Mağaza'da uygulamamızın nasıl görüneceğini belirleyeceğiz. İlk olarak karşımıza aşağıdaki gibi bir ekran görüntüsü çıkacaktır. Burada uygulamamızın yayınlanmasını istediğimiz dilleri ve her biri için uygulamamızın adını, mağaza açıklamasını ve istersek tanıtım metni ve uygulamada yaptığımız son değişiklikleri kullanıcıların da haberdar olabilmeleri için girebiliriz:
  47. 47. 46 Sayfanın altına doğru ilerlediğimizde uygulamamızdan çektiğimiz ekran görüntülerini koyabileceğimiz yer geliyor. Burası kullanıcıların uygulamayla ilgili markette ekran görüntülerini görebildikleri ve uygulamamız hakkında fikir sahibi olabilecekleri bir yer olduğundan, geliştiricilerin uygulamalarını göterebilmeleri açısından son derece önemlidir: Ekran görüntülerinin altında mağazada uygulamamızın yer almasını istediğimiz kategoriyi belirlememiz ve kullanıcıların bize ulaşabilecekleri geliştirici mailimizi paylaşmamız da yarar var:
  48. 48. 47 Mağaza Girişi'ni tamamladıktan sonra, sol navigasyon menüsünde yer alan fiyatlandırma seçeneğine tıklayalım. Burada uygulamamızı hangi ülkelerde ve ne kadara yayınlamak istediğimize karar veriyoruz: Bütün bu işlemleri gerçekleştirdikten sonra, eğer bir yerde hata almamışsak, konsolda sağ üstte yer alan taslak düğmesi yayınla halini alacaktır. Uygulamamız artık yayınlayabiliriz.
  49. 49. 48 15.1.Uygulama Güncellemesi Mevcut uygulamalarımızı geliştirici konsolunu açtığımızda görüntüleyebiliyoruz. Burada yer alan uygulamalardan hangisinde işlem yapmak istiyorsak onu tıkladığımızda karşımıza aşağıdaki ekran görüntüsü gelecektir: Bu panelde, mevcut uygulamanızın indirilme istatistiklerine, hangi Android sürümü dahil, ulaşabilirsiniz. Aldığı oyların ve yorumların detaylarına, varsa yaşanan kilitlenmeleri görüntüleyebilirsiniz. Sol navigasyon menüsünde yer alan diğer seçeneklerle ise mevcut uygulamanızı güncelleme de kullancağınız yeni APK dosyasını ve gerek duyarsanız yenilemek istediğiniz mağaza giriş bilgilerini de güncelleyebilirsiniz. Burada dikkat etmeniz gereken en önemli nokta ise; güncelleyeceğiniz uygulamanın sürüm numarasının mevcut uygulamanızın sürüm numarasından büyük olması gerektiğidir. Unutmayın: Örneğin, mevcut uygulamanızın sürüm numarası 1.1.0 ise yeni güncelledğiniz APK dosyasında sürüm numaranızı 1.2.0 yapın! 16.ANDROID İÇİN SIK SORULAN SORULAR Eclipse’de yeni bir plugin nasıl yüklerim? Eclipse IDE içerisinde yeni bir eklenti yüklemek için Help menüsü altında Install New Software seçeneğini seçmeniz gerekmektedir.
  50. 50. 49 Bu sayede karşınıza yeni bir eklenti yükleme sihirbazı gelir ve siz de buradan eklentiyi yükleme fırsatı bulabilirsiniz. Yapmanız gereken, Add düğmesine tıklayarak karşınıza gelen pencereye eklentinin isimini (Name) ve yükleme adresini (Location) yazmak olacaktır. Geçerli bir web adresi girdikten sonra Ok düğmesine bastığınızda adres taranır ve Eclipse ile uyumlu bir eklenti bulunursa listelenir.
  51. 51. 50 Yeni bir sanal makinayı nasıl oluştururum? Uygulamanızı mutlaka cihaz üzerinde denemek zorunda değilsiniz. Eğer farklı Android sürümlerinde cihazlarınız yoksa, bunun yerine sanal bir emülatör üzerinde uygulamanızı çalıştırabilirsiniz. Bunun için yapmanız gereken, Android Virtual Device Manager’ı çalıştırarak yeni bir cihaz eklemek olacaktır. Eclipse uygulamamı otomatik olarak bir sanal makinada açıyor. Bunu nasıl değiştiririm? Projenizi başlatırken hangi sanal veya gerçek cihazda çalıştıracağınızı değiştirmek için proje üzerine sağ tuşla tıklayarak, Run As.. altında Run Configurations menüsüne tıklayınız.
  52. 52. 51 Run Configurations ekranı içerisinde Target sekmesine geldiğinizde uygulamanın nerede çalıştırılmasını istiyorsanız, bunu ayarlayabilirsiniz. Always prompt to pick a device seçeneği projeyi her çalıştırdığınızda cihaz seçimi yapabileceğiniz bir ekran getirecektir Yeni bir Activity nasıl başlatırım? Yeni bir Activity başlatmak için yapmanız gereken, yeni bir Intent yaratmak ve bu Intent’i startActivity metodu ile çalıştırmak olacaktır. Örneğin, bir düğmeye basıldığında yeni bir ekran çalıştırmak için aşağıdaki kod parçasını kullanabilirsiniz. 1. Button done = (Button) findViewById(R.id.add_note_button);<br /> 2. &nbsp; &nbsp; &nbsp; done.setOnClickListener(new OnClickListener() {<br /> 3. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@Override<br /> 4. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public void onClick(View v) {<br /> 5. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Intent intent = new Intent(MainActivity.this,SecondActivity.class);<br /> 6. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startActivity(intent);<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br /> 8. &nbsp; &nbsp; &nbsp; });Buradaki kodda MainActivity mevcut Activity sınıfını, SecondActivity ise yeni açılacak Activity sınıfını belirtmektedir.
  53. 53. 52 Yeni bir Activity ile parametre nasıl gönderilir? Yeni bir Activity oluştururken bir parametre göndermek isterseniz, Intent sınıfı altında gelen putExtrametodundan faydalanabilirsiniz. putExtra metodu yeni oluşturulan Activity ile birlikte istenilen değişkenlerin paslanmasına yardımcı olacaktır. 1. Button done = (Button) findViewById(R.id.add_note_button);<br /> 2. &nbsp; &nbsp; &nbsp; done.setOnClickListener(new OnClickListener() {<br /> 3. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@Override<br /> 4. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public void onClick(View v) {<br /> 5. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Intent intent = new Intent(MainActivity.this,SecondActivity.class);<br /> 6. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent.putExtra("yas", 29);<br /> 7. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent.putExtra("isim", "Ahmet");<br /> 8. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startActivity(intent);<br /> 9. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br /> 10. &nbsp; &nbsp; &nbsp; });Yukarıdaki kodda gördüğünüz gibi 29 ve Ahmet değerleri yas ve isim anahtarıyla Intent içerisine eklendi ve bir sonraki Activity’e ulaştırıldı. Yeni oluşturulan Activity içerisinde bu değişkenlere ulaşmak için yapmanız gereken ise aşağıdaki gibidir; 1. Bundle bundle = getIntent().getExtras();<br /> 2. int yas = bundle.getInt("yas");<br /> 3. String isim = bundle.getString("isim"); Bir Intent ile birlikte gönderilen değişkenleri almak için getExtras metodunu kullanırız. Daha sonra verdiğimiz anahtar değerine karşılık gelen değeri get.... metodlarından birisi ile alarak bir değişkene atayabiliriz. SharedPreferences ile bir değer nasıl saklarım? SharedPreferences uygulamanızdaki çeşitli değerleri anahtar - değer mantığı ile saklamanıza yardımcı olur. Bu şekilde uygulamanıza özel tutulması gereken çeşitli parametreleri ya da kullanıcıdan talep ettiğiniz bazı ayarları ya da bilgileri kolayca saklayıp gerektiğinde geri çağırabilirsiniz. SharedPreferences’ı kullanmak için yapmanız gereken getSharedPreferences metodu ile uygulamaya özel saklama yerine kayıt yapacağımızı belirtmemiz gerekir. Bir değeri yazmak için ise SharedPreferences.Editor sınıfından faydalanırız.
  54. 54. 53 1. SharedPreferences sp = getSharedPreferences("MyApp", Context.MODE_PRIVATE);<br /> 2. SharedPreferences.Editor spEditor = sp.edit();<br /> 3. spEditor.putBoolean("ilkCalisma", true);<br /> 4. spEditor.commit(); Yukarıdaki kod parçacağında SharedPreferences.Editor ile yeni bir düzenleyici açılmış ve putBooleanmetodu ile “ilkCalisma” anahtar değeriyle bir boolean değer saklanmıştır. Saklanmak istenen değerler putmetodları ile eklendikten sonra commit metodu ile yazma işlemi tamamlanır ve değerler saklanmış olur. Context.MODE_PRIVATE ise bu değişkenlerin sadece bizim uygulamamız tarafından okunması sağlar. SharedPreferences ile saklanan bir değeri nasıl çağırırım? SharedPreferences ile saklamış olduğumuz bir değere ulaşmak içinse tek yapmamız gereken,getSharedPreferences metodunu çağırmak ve get metodlarını kullanarak değişkenimizi almak olacaktır. 1. SharedPreferences sp = getSharedPreferences("MyApp", Context.MODE_PRIVATE);</p> 2. 3. <p>boolean ilkCalisma = sp.getBoolean("ilkCalisma", false); Burada kullanılan get metodlarında ilk parametre olarak sakladığınız değerin anahtarı, ikinci değer olarak bu değişkenin bulunamadığı takdirde alması gereken değer istenir.
  55. 55. 54 Kaynakça https://developer.android.com/index.html http://source.android.com/ http://www.yazilimcilardunyasi.com/p/mobil-programlama.html http://www.programlamadefteri.com/android-programlama- dersleri https://gelecegiyazanlar.turkcell.com.tr/konu/android

×