SlideShare a Scribd company logo
1 of 55
Download to read offline
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.
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
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"
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);
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.
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.
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:
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.
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
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.
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:
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.
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
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.
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.
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.
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.
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.
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.
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
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.
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:
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 />
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
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:
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
/>
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
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
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ı
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;
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.
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>
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 />
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.
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ı.
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 />
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>
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 />
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
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.
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:
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:
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:
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.
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)
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:
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:
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.
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.
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.
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.
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.
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.
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.
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

More Related Content

Viewers also liked

AAG Defense Solutions 2014 Ammunition Catalog
AAG Defense Solutions 2014 Ammunition CatalogAAG Defense Solutions 2014 Ammunition Catalog
AAG Defense Solutions 2014 Ammunition Catalogaagdefense
 
Finans E-Eğitimi
Finans E-EğitimiFinans E-Eğitimi
Finans E-EğitimiUniverist
 
Müşteri İlişkileri Yönetimi E-Eğitimi
Müşteri İlişkileri Yönetimi E-EğitimiMüşteri İlişkileri Yönetimi E-Eğitimi
Müşteri İlişkileri Yönetimi E-EğitimiUniverist
 
Zaman ve Toplantı Yönetimi E-Eğitimi
Zaman ve Toplantı Yönetimi E-EğitimiZaman ve Toplantı Yönetimi E-Eğitimi
Zaman ve Toplantı Yönetimi E-EğitimiUniverist
 
Kardeş Kıskançlığı
Kardeş KıskançlığıKardeş Kıskançlığı
Kardeş KıskançlığıUniverist
 
İkna Mühendisliği
İkna Mühendisliğiİkna Mühendisliği
İkna MühendisliğiUniverist
 
Temel Düzeyde Microsoft PowerPoint E-Eğitimi
Temel Düzeyde Microsoft PowerPoint E-EğitimiTemel Düzeyde Microsoft PowerPoint E-Eğitimi
Temel Düzeyde Microsoft PowerPoint E-EğitimiUniverist
 
Bireysel Motivasyon Teknikleri
Bireysel Motivasyon TeknikleriBireysel Motivasyon Teknikleri
Bireysel Motivasyon TeknikleriUniverist
 
Δραστηριότητες: Γραφές και Γλώσσες1
Δραστηριότητες: Γραφές και Γλώσσες1Δραστηριότητες: Γραφές και Γλώσσες1
Δραστηριότητες: Γραφές και Γλώσσες11odimsxoleio
 
Temel Düzeyde Microsoft Excel E-Eğitimi
Temel Düzeyde Microsoft Excel E-EğitimiTemel Düzeyde Microsoft Excel E-Eğitimi
Temel Düzeyde Microsoft Excel E-EğitimiUniverist
 
Yaşam Yönetimi
Yaşam YönetimiYaşam Yönetimi
Yaşam YönetimiUniverist
 
Başlangıç İngilizcesi E-Eğitimi
Başlangıç İngilizcesi E-EğitimiBaşlangıç İngilizcesi E-Eğitimi
Başlangıç İngilizcesi E-EğitimiUniverist
 
Stratejik Pazarlama E- Eğitimi
Stratejik Pazarlama E- EğitimiStratejik Pazarlama E- Eğitimi
Stratejik Pazarlama E- EğitimiUniverist
 
Gestalt Yaklaşımı
Gestalt YaklaşımıGestalt Yaklaşımı
Gestalt YaklaşımıUniverist
 
Uygulamalı Örneklerle Beden Dili Eğitimi-2
Uygulamalı Örneklerle Beden Dili Eğitimi-2Uygulamalı Örneklerle Beden Dili Eğitimi-2
Uygulamalı Örneklerle Beden Dili Eğitimi-2Univerist
 
Yaşam ve İnsan
Yaşam ve İnsanYaşam ve İnsan
Yaşam ve İnsanUniverist
 
C++ Programlamaya Giriş E-Eğitimi
C++ Programlamaya Giriş E-EğitimiC++ Programlamaya Giriş E-Eğitimi
C++ Programlamaya Giriş E-EğitimiUniverist
 
Beni Dinle Anla
Beni Dinle AnlaBeni Dinle Anla
Beni Dinle AnlaUniverist
 
Temel Düzeyde MySQL ve PHP Eğitimleri 1
Temel Düzeyde MySQL ve PHP Eğitimleri 1Temel Düzeyde MySQL ve PHP Eğitimleri 1
Temel Düzeyde MySQL ve PHP Eğitimleri 1Univerist
 

Viewers also liked (20)

AAG Defense Solutions 2014 Ammunition Catalog
AAG Defense Solutions 2014 Ammunition CatalogAAG Defense Solutions 2014 Ammunition Catalog
AAG Defense Solutions 2014 Ammunition Catalog
 
Finans E-Eğitimi
Finans E-EğitimiFinans E-Eğitimi
Finans E-Eğitimi
 
Müşteri İlişkileri Yönetimi E-Eğitimi
Müşteri İlişkileri Yönetimi E-EğitimiMüşteri İlişkileri Yönetimi E-Eğitimi
Müşteri İlişkileri Yönetimi E-Eğitimi
 
Zaman ve Toplantı Yönetimi E-Eğitimi
Zaman ve Toplantı Yönetimi E-EğitimiZaman ve Toplantı Yönetimi E-Eğitimi
Zaman ve Toplantı Yönetimi E-Eğitimi
 
Kardeş Kıskançlığı
Kardeş KıskançlığıKardeş Kıskançlığı
Kardeş Kıskançlığı
 
İkna Mühendisliği
İkna Mühendisliğiİkna Mühendisliği
İkna Mühendisliği
 
Çoklu Zeka
Çoklu ZekaÇoklu Zeka
Çoklu Zeka
 
Temel Düzeyde Microsoft PowerPoint E-Eğitimi
Temel Düzeyde Microsoft PowerPoint E-EğitimiTemel Düzeyde Microsoft PowerPoint E-Eğitimi
Temel Düzeyde Microsoft PowerPoint E-Eğitimi
 
Bireysel Motivasyon Teknikleri
Bireysel Motivasyon TeknikleriBireysel Motivasyon Teknikleri
Bireysel Motivasyon Teknikleri
 
Δραστηριότητες: Γραφές και Γλώσσες1
Δραστηριότητες: Γραφές και Γλώσσες1Δραστηριότητες: Γραφές και Γλώσσες1
Δραστηριότητες: Γραφές και Γλώσσες1
 
Temel Düzeyde Microsoft Excel E-Eğitimi
Temel Düzeyde Microsoft Excel E-EğitimiTemel Düzeyde Microsoft Excel E-Eğitimi
Temel Düzeyde Microsoft Excel E-Eğitimi
 
Yaşam Yönetimi
Yaşam YönetimiYaşam Yönetimi
Yaşam Yönetimi
 
Başlangıç İngilizcesi E-Eğitimi
Başlangıç İngilizcesi E-EğitimiBaşlangıç İngilizcesi E-Eğitimi
Başlangıç İngilizcesi E-Eğitimi
 
Stratejik Pazarlama E- Eğitimi
Stratejik Pazarlama E- EğitimiStratejik Pazarlama E- Eğitimi
Stratejik Pazarlama E- Eğitimi
 
Gestalt Yaklaşımı
Gestalt YaklaşımıGestalt Yaklaşımı
Gestalt Yaklaşımı
 
Uygulamalı Örneklerle Beden Dili Eğitimi-2
Uygulamalı Örneklerle Beden Dili Eğitimi-2Uygulamalı Örneklerle Beden Dili Eğitimi-2
Uygulamalı Örneklerle Beden Dili Eğitimi-2
 
Yaşam ve İnsan
Yaşam ve İnsanYaşam ve İnsan
Yaşam ve İnsan
 
C++ Programlamaya Giriş E-Eğitimi
C++ Programlamaya Giriş E-EğitimiC++ Programlamaya Giriş E-Eğitimi
C++ Programlamaya Giriş E-Eğitimi
 
Beni Dinle Anla
Beni Dinle AnlaBeni Dinle Anla
Beni Dinle Anla
 
Temel Düzeyde MySQL ve PHP Eğitimleri 1
Temel Düzeyde MySQL ve PHP Eğitimleri 1Temel Düzeyde MySQL ve PHP Eğitimleri 1
Temel Düzeyde MySQL ve PHP Eğitimleri 1
 

Similar to Android'e Giriş Eğitimleri 2_2

Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android ProgrammingAnıl Sözeri
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciSinan Bozkuş
 
Javascript - from past to present
Javascript - from past to present Javascript - from past to present
Javascript - from past to present Kubilay TURAL
 
Java ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamakJava ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamakTayfun Çelik
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008mtcakmak
 
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaGirişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaFatih Sokmen
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 
ASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişSinan Bozkuş
 
Spring framework
Spring frameworkSpring framework
Spring frameworkayhanugurlu
 
Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7İbrahim ATAY
 

Similar to Android'e Giriş Eğitimleri 2_2 (16)

Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android Programming
 
Ip2 vi̇ze2
Ip2 vi̇ze2Ip2 vi̇ze2
Ip2 vi̇ze2
 
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş SüreciASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
ASP.NET MVC'den ASP.NET Core MVC'ye Geçiş Süreci
 
Asp.net ajax
Asp.net ajaxAsp.net ajax
Asp.net ajax
 
Java script
Java scriptJava script
Java script
 
Javascript - from past to present
Javascript - from past to present Javascript - from past to present
Javascript - from past to present
 
Java ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamakJava ve axis2 framework ile web service yayınlamak
Java ve axis2 framework ile web service yayınlamak
 
Java EE Struts
Java EE StrutsJava EE Struts
Java EE Struts
 
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
 
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaGirişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
ASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a GeçişASP.NET MVC'den ASP.NET Core'a Geçiş
ASP.NET MVC'den ASP.NET Core'a Geçiş
 
Primeface
PrimefacePrimeface
Primeface
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7
 
Flex
FlexFlex
Flex
 

More from Univerist

Kariyer Yapma Yöntemleri
Kariyer Yapma YöntemleriKariyer Yapma Yöntemleri
Kariyer Yapma YöntemleriUniverist
 
İşletmelerde İnsan Kaynakları Yönetimi
İşletmelerde İnsan Kaynakları Yönetimiİşletmelerde İnsan Kaynakları Yönetimi
İşletmelerde İnsan Kaynakları YönetimiUniverist
 
Stratejik Yönetimin Faydaları
Stratejik Yönetimin FaydalarıStratejik Yönetimin Faydaları
Stratejik Yönetimin FaydalarıUniverist
 
Sertifika Eğitimi Zorunluluğu
Sertifika Eğitimi ZorunluluğuSertifika Eğitimi Zorunluluğu
Sertifika Eğitimi ZorunluluğuUniverist
 
6 Sigma Yöntemi
6 Sigma Yöntemi6 Sigma Yöntemi
6 Sigma YöntemiUniverist
 
Yaşam Koçuyla Daha Kolay Bir Hayat
Yaşam Koçuyla Daha Kolay Bir HayatYaşam Koçuyla Daha Kolay Bir Hayat
Yaşam Koçuyla Daha Kolay Bir HayatUniverist
 
Yaşam Koçuyla Çözüm Olun
Yaşam Koçuyla Çözüm OlunYaşam Koçuyla Çözüm Olun
Yaşam Koçuyla Çözüm OlunUniverist
 
Yaşam Koçuyla Çevrenizi Eğitin
Yaşam Koçuyla Çevrenizi EğitinYaşam Koçuyla Çevrenizi Eğitin
Yaşam Koçuyla Çevrenizi EğitinUniverist
 
Vizyonunuz Hedeflerinizi Oluştursun
Vizyonunuz Hedeflerinizi OluştursunVizyonunuz Hedeflerinizi Oluştursun
Vizyonunuz Hedeflerinizi OluştursunUniverist
 
Sürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 Adım
Sürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 AdımSürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 Adım
Sürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 AdımUniverist
 
Koçluk Hizmetiyle Değişim
Koçluk Hizmetiyle DeğişimKoçluk Hizmetiyle Değişim
Koçluk Hizmetiyle DeğişimUniverist
 
Koçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip Olun
Koçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip OlunKoçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip Olun
Koçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip OlunUniverist
 
Kelimelerinizi Güçlendirin
Kelimelerinizi GüçlendirinKelimelerinizi Güçlendirin
Kelimelerinizi GüçlendirinUniverist
 
Bir Yaşam Koçu İle Çalışmanın 6 Faydası
Bir Yaşam Koçu İle Çalışmanın 6 FaydasıBir Yaşam Koçu İle Çalışmanın 6 Faydası
Bir Yaşam Koçu İle Çalışmanın 6 FaydasıUniverist
 
İsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şey
İsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şeyİsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şey
İsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 ŞeyUniverist
 
Bir Koçla Çalışın
Bir Koçla ÇalışınBir Koçla Çalışın
Bir Koçla ÇalışınUniverist
 
Beyniniz Haklı Olmaya Bağımlı
Beyniniz Haklı Olmaya BağımlıBeyniniz Haklı Olmaya Bağımlı
Beyniniz Haklı Olmaya BağımlıUniverist
 
Personel,Özlük İşleri ve Bordrolama-5
Personel,Özlük İşleri ve Bordrolama-5Personel,Özlük İşleri ve Bordrolama-5
Personel,Özlük İşleri ve Bordrolama-5Univerist
 
Personel,Özlük İşleri ve Bordrolama-6
Personel,Özlük İşleri ve Bordrolama-6Personel,Özlük İşleri ve Bordrolama-6
Personel,Özlük İşleri ve Bordrolama-6Univerist
 

More from Univerist (20)

Kariyer Yapma Yöntemleri
Kariyer Yapma YöntemleriKariyer Yapma Yöntemleri
Kariyer Yapma Yöntemleri
 
İşletmelerde İnsan Kaynakları Yönetimi
İşletmelerde İnsan Kaynakları Yönetimiİşletmelerde İnsan Kaynakları Yönetimi
İşletmelerde İnsan Kaynakları Yönetimi
 
Stratejik Yönetimin Faydaları
Stratejik Yönetimin FaydalarıStratejik Yönetimin Faydaları
Stratejik Yönetimin Faydaları
 
Sertifika Eğitimi Zorunluluğu
Sertifika Eğitimi ZorunluluğuSertifika Eğitimi Zorunluluğu
Sertifika Eğitimi Zorunluluğu
 
E Sertifika
E SertifikaE Sertifika
E Sertifika
 
6 Sigma Yöntemi
6 Sigma Yöntemi6 Sigma Yöntemi
6 Sigma Yöntemi
 
Yaşam Koçuyla Daha Kolay Bir Hayat
Yaşam Koçuyla Daha Kolay Bir HayatYaşam Koçuyla Daha Kolay Bir Hayat
Yaşam Koçuyla Daha Kolay Bir Hayat
 
Yaşam Koçuyla Çözüm Olun
Yaşam Koçuyla Çözüm OlunYaşam Koçuyla Çözüm Olun
Yaşam Koçuyla Çözüm Olun
 
Yaşam Koçuyla Çevrenizi Eğitin
Yaşam Koçuyla Çevrenizi EğitinYaşam Koçuyla Çevrenizi Eğitin
Yaşam Koçuyla Çevrenizi Eğitin
 
Vizyonunuz Hedeflerinizi Oluştursun
Vizyonunuz Hedeflerinizi OluştursunVizyonunuz Hedeflerinizi Oluştursun
Vizyonunuz Hedeflerinizi Oluştursun
 
Sürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 Adım
Sürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 AdımSürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 Adım
Sürdürülebilir ve Tatmin Edici Başarıya Ulaşmak için 10 Adım
 
Koçluk Hizmetiyle Değişim
Koçluk Hizmetiyle DeğişimKoçluk Hizmetiyle Değişim
Koçluk Hizmetiyle Değişim
 
Koçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip Olun
Koçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip OlunKoçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip Olun
Koçluk Hizmetiyle 10 Kat Fazla Sevgiye Sahip Olun
 
Kelimelerinizi Güçlendirin
Kelimelerinizi GüçlendirinKelimelerinizi Güçlendirin
Kelimelerinizi Güçlendirin
 
Bir Yaşam Koçu İle Çalışmanın 6 Faydası
Bir Yaşam Koçu İle Çalışmanın 6 FaydasıBir Yaşam Koçu İle Çalışmanın 6 Faydası
Bir Yaşam Koçu İle Çalışmanın 6 Faydası
 
İsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şey
İsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şeyİsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şey
İsteğiniz Hayata Kavuşmak İçin Yapmanız Gereken 25 Şey
 
Bir Koçla Çalışın
Bir Koçla ÇalışınBir Koçla Çalışın
Bir Koçla Çalışın
 
Beyniniz Haklı Olmaya Bağımlı
Beyniniz Haklı Olmaya BağımlıBeyniniz Haklı Olmaya Bağımlı
Beyniniz Haklı Olmaya Bağımlı
 
Personel,Özlük İşleri ve Bordrolama-5
Personel,Özlük İşleri ve Bordrolama-5Personel,Özlük İşleri ve Bordrolama-5
Personel,Özlük İşleri ve Bordrolama-5
 
Personel,Özlük İşleri ve Bordrolama-6
Personel,Özlük İşleri ve Bordrolama-6Personel,Özlük İşleri ve Bordrolama-6
Personel,Özlük İşleri ve Bordrolama-6
 

Android'e Giriş Eğitimleri 2_2

  • 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. 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. 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. &lt;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" &gt; 10. 11. &lt;ListView 12. android:id="@+id/listView1" 13. android:layout_width="match_parent" 14. android:layout_height="wrap_content"
  • 4. 3 15. android:layout_alignParentLeft="true" 16. android:layout_alignParentTop="true" &gt; 17. &lt;/ListView&gt; 18. 19. &lt;/RelativeLayout&gt; 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. 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. 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&lt;String&gt; veriAdaptoru=new ArrayAdapter&lt;String&gt; 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.