Android Nedir?
Transkript
Android Nedir?
Android Nedir? Android, Google, Open Handset Alliance ve özgür yazılım topluluğu tarafından geliştirilen, Linux tabanlı, mobil cihaz ve cep telefonları için geliştirilmekte olan, açık kaynak kodlu bir mobil işletim sistemidir. Android, aygıtların fonksiyonelliğini genişleten uygulamalar yazan geniş bir geliştirici grubuna sahiptir. Android için halihazırda 250,000'den fazla uygulama bulunmaktadır. Google Play ise, Android işletim sistemi uygulamalarının çeşitli sitelerden indirilebilmesinin yanısıra, Google tarafından işletilen kurumsal uygulama mağazasıdır. Geliştiriciler, ilk olarak aygıtı, Google'ın Java kütüphanesi aracılığıyla kontrol ederek Java dilinde yazmışlardır. Open Handset Allience, 5 Kasım 2007'de Android'i kurduğunu duyurmuştur ve ardından 34 adet donanım, yazılım ve telekom şirketi, mobil cihazlar için telif hakkı olmayan bir işletim sisteminin teknolojinin gelişimi için yararlı olduğu konusunda hemfikir olmuşlardır. 2008'de piyasaya sürüldüğünde, birçok Android İşletim Sistemi Apache freesoftware ve Açık Kaynak Kodu lisansıyla geliştirilmeye açık hale gelmiştir. Android, linux çekirdeği üzerine inşa edilmiş bir mobil işletim sistemidir, bu sistemde ara katman yazılımı, kütüphaneler ve API C diliyle yazılmıştır. Uygulama yazılımları ise, Apache harmony üzerine kurulu java-uyumlu kütüphaneler ihtiva eden uygulama iskeleti üzerinden çalışır. Android, derlenmiş java kodunu çalıştırmak için dinamik çevirmeli (JIT) Dalvik sanal makinasını kullanır ve cihazların fonksiyonerliğini artıran uygulamaların geliştirilmesi için çalışan geniş bir programcı-geliştirici çevresine sahiptir. Google'ın Android Inc şirketini alışı Temmuz 2005'te Google, Android Inc.'i almış ve ufak bir başlangıç şirketini Palo Alto'da kurmuştur. Android'in kurucuları, Google'a çalışmak için giden Andy Rubin (Danger'in kurucusu), Rich Miner (WildFire'ın kurucusu), Nick Sears ve Chris White'dır. (WebTV'de çalışan ilk mühendislerden biri). Bu arada, Android Inc.'in işlevleri daha önce yaptıkları mobil işletim sistemleri kadar iyi bilinmemektedir ve bu da Google'ın Mobil Cihazlar pazarına gireceği söylentisini başlatmıştır. Buna karşın, bu süreç içinde pazara ne çeşit ürünle çıkacakları tam olarak belli olmamıştır. Google'da, ekip (Rubin tarafından izin verilen) Linux tabanlı, taşınabilir cihazlar için geliştirdikleri, esnek, güncelleştirilebilir İşletim Sistemini yazmışlardır. Raporlara göre Google çoktan donanım serilerini, yazılım partnerlerini ve taşınabilir cihazlarda çeşitli derecelerde birlikte çalışacağı sinyalini vermiştir. Android'in Gelişimi Google, Android'i satın aldıktan sonra telefon üreticilerini yanına alarak Open Handset Alliance (OHA) birliğini kurdu. Android'in gelişimi OHA eliyle yönetilmeye başlandı. Android 1.0 HTC Dream'in işletim sistemi olarak telefonlara ilk adımını attı.Bu sürüm; kamera desteği Wi-Fi, bluetooth, klasörler, bir web tarayıcısı, uyarılar, sesli arama, YouTube, alarmlı saat, galeri gibi özellikler sunuyordu. 9 Şubat 2009 da Android 1.1 yayınlandı.Bu sürüm bir önceki sürümdeki sistem hatalarını düzeltmeyi ve API'yı geliştirmeyi amaçlıyordu. 30 Nisan 2009'da Android 1.5 [Cupcake) yayınlandı.Bluetooth desteği, kamera kaydı, video gösterimi, Picasa,sık kullanılan klasör ve widgetları kişiselleştirebilme, yazı tahmin edebilen klavye ve animasyonlu ekran özellikleri Android'e kazandırıldı. 15 Eylül 2009'da Android 1.6 (Donut) yayınlandı.Ekran çözünürlüğü yükseltildi. Doğru çeviri yapma ve okutma özelliği,geliştirilmiş android market,galeride çoklu silme, sesli arama, WVGA ekran çözünürlük desteği Android'e kazandırıldı. 29 Ekim 2009'da Android 2.0 ve 2.1 (Eclair) yayınlandı. HTML 5 ve Bluetooth 2.1 desteği kazandırıldı. Sanal klavye ve yüksek ekran çözünürlüğü desteği ile özelleştirilebilen arayüz özelliği eklendi. Geliştirilmiş Google Maps, hareketli duvar kağıtları ve dijital zoom özelliği de kazandırıldı. Mayıs 2010'da Android 2.2 (Froyo) yayınlandı. 720p ekran çözünürlüğü desteği,usb bağlantı,Wi-Fi tarayıcı özelliği,Flash Player 10.1 desteği eklendi. Şubat 2011'de Android 2.3 (Gingerbread) yayınlandı. Çoklu kamera ve çoklu dokunmatik desteği eklendi. XGA (1366×768) ekran çözünürlük desteği,video arama özelliği eklendi. Yine Şubat 2011'de Android 3.0 (Honeycomb) yayınlandı. Android işletim sistemi, tabletlerle uyumlu hale getirildi. Ekim 2011'de Android 4.0 (IceCream Sandwich) yayınlandı.Yüz tanıma fonksiyonları ve NFC ile dosya paylaşımı özellikleri eklendi. Mart 2012'de Android Market'in adı Google Play olarak değiştirildi. Temmuz 2012'de 4.1 (Jelly Bean) yayınlandı. Aynı anda iki uygulama açma özelliği Android'e kazandırıldı. Butter project(takılmadan kayan ekran) ve enerji verimliliği sağlandı. Ekim 2012'de 4.2 (Jelly Bean Plus) yayınlandı.Çoklu kullanıcı,360 derece panoramik fotoğraf,Swype klavye kazandırıldı. 11 Şubat 2013'te 4.2.2 (Jelly Bean Plus) yayınlandı.bu güncelleme "performansı ve kararlılığı artırır" temasıyla çıkarıldı.Isınma ve donma problemleri giderildi. 24 Temmuz 2013'te 4.3 (Jelly Bean) yayınlandı.Çoklu kullanıcı için ebeveyn kontrolü,oyunlar için OpenGL ES 3.0 desteği,diğer teknolojik aletlere bağlanmak için ilk akıllı bluetooth teknolojisi,Wifi'yı açıp kapatmak yerine otomatik açılıp kapanabilen akıllı wifi teknolojisi eklendi. Bölümleri Android işletim sistemi beş kısımdan oluşur. Çekirdek:Linux kernelidir. Güvenlik, hafıza yönetimi, süreç yönetimi, ağ yığınları ve sürücü modellerini içerir. Android Runtime: Sanal makinedir. Dalvik Sanal Makinesini de içerir. Kütüphaneler: Veritabanı kütüphaneleri, web tarayıcı kütüphaneleri, grafik ve arayüz kütüphanelerini içerir. Uygulama Çatısı: Uygulama geliştiricilere geniş bir platform sunan kısımdır. Uygulama Katmanı: Doğrudan Java (programlama dili) yle geliştirilmiş uygulamaları içerir. Geliştirme 12 Kasım 2007'de OHA, Android'in yazılım geliştirme teçhizatının önizlemesini yayınlamıştır ve bu önizleme, geliştirici ve hata giderici, kütüphane setleri, aygıt emülasyonu, dökümantasyon, örnek tasarılar, eğitim, SSS ve fazlasını içermektedir. Geliştiriciler, eğer Windows XP, Vista veya Mac OS çalıştıran x86 tabanlı ya da Linux kullanıyorlarsa AndroidSDK'yı indirip kurmaları gerekmektedir. Gereklilikler şunları da kapsamaktadır: Java Development Kit Apache Ant Python 2.2 veya yüksek versiyonu Eclipse (yazılım) 3.2 veya yüksek versiyonu Özellikler Android'in son sürümleri, çoklu-görev (multitasking), çoklu-dokunuş (multitouch) ve Flash desteğiyle beraber gelmektedir. Android Market ile uygulamalar yüklenebilmektedir. Handset Çizimler Sistem, VGA, 2D grafik arşivler, OpenGL ES 3.0 tabanlı 3D Grafik arşivlerine ve geleneksel telefon çıkışlarına son derece kolay uyum sağlar. Depolama Bilgi: depolama amaçlı SQLite kullanılmaktadır. Bağlanabilirlik: Android, GSM, Bluetooth, EDGE, 3G, NFC ve Wi-Fi bağlantısını destekler. Mesajlaşma: Hem SMS hem de MMS desteği vardır. Web Tarayıcısı: Android'in web tarayıcısı açık kaynak kodlu WebKit application framework üzerine kuruludur. Medya Destekleri: Android, MPEG-4, MP4, H.264, MP3, ve AAC, AMR, JPEG, PNG, GIF gibi ses/video/resim formatlarını desteklemektedir. Ek Donanımları: Android, anti-titremeli video/foto kameraları, touchscreenler, GPS, pusulalar, accelerometrelerde son derece yeteneklidir. Android SDK ve Eclipse ADT Kurulumu – Ayrıntılı Anlatım Video Olarak Android ve Sdk Kurulumu: Aşağıdaki Linki Kullanarak Adım Adım Android Kurulumu Gerçekleştirebilirsiniz. http://www.youtube.com/watch?v=buGXaLNE4vw Bilgisayarınızda JDK kurulu değilse, JDK indirip bilgisayarınıza kurmanız gerekir. Kurulum için http://java.sun.com/javase/downloads/index.jsp adresinden JDK indirilip kurulur. Kurulum yapılmazsa hatayla karşılaşılır. Sadece bilgisayarınızda JRE kurulu olması Android için yeterli değildir. JDK kurulumundan sonra SDK’nın kurulması gerekiyor. Bunun için Android SDK sayfasına gidilmesi gerekiyor. http://developer.android.com/sdk/index.html adresinden indirebilirsiniz. Recommended olan indirilirse, direk olarak exe dosyasından kurarsınız. C:\Program Files\Android\android-sdk-windows klasörü içine kuracaktır. Bu iki kurulumdan sonra Eclipse programının indirilmesi ve kurulması gerekir. Eclipse programınıhttp://www.eclipse.org/downloads/packages/eclipse-classic372/indigosr2adresinden indirebilirsiniz. ZIP dosyasını programı çalıştırmak istediğiniz bir yere açınız. Eclipse programı kuruluma ihtiyaç duymaz, zaten kurulu olarak Eclipse isimli klasörde yer alır. Programı çalıştırmak için eclipse.exe tıklanır. Program açıldıktan sonra Eclipse’a ADT kurulumu yapılması gerekiyor. Böylece Android menü içerisinde görülebilecektir. ADT kurulumu için Help -> Install New Software seçeneği seçilir ve Work with kısmına http://dl-ssl.google.com/android/eclipse/ linki eklenir. Add tıklanarak açılan pencerede “Location” sekmesine de aynı adres yapıştırılır. “Name” kısmı önemli değildir. Yüklemeler tamamlandıktan sonra Eclipse programına Android eklenmiş olacaktır. Son adım olarak Android kütüphanelerinin tanıtılması gerekiyor. SDK yolunu (C:\Program Files\Android\android-sdk-windows) “Windows -> Preferences” seçeneğinde Android sekmesini seçerek “SDK Location” bölümüne yapıştırılır. İlk Android Uygulaması Merhaba Dünya Programı Öncelikle bir Android projesi açıp projemizin dosyalarını tanımaya başlayalım. Eclipse’yi çalıştıralım. İlk çalıştırdığımızda bizden projelerimizi kaydetmemiz için klasör konumunu isteyecek. Değişiklik yapmazsak yeni projelerimiz default klasöre kaydedilecektir. • New Project alanından bir adet yeni proje açıyoruz. • Proje ismimizi Merhaba olarak belirtip Next diyoruz. Application Name: Uygulamanızın ismidir. Play Store’da ve Ayarlar altındaki Uygulama Listesinde bu isim kullanılır. Project Name: Proje dosyasının ismidir. Sadece Eclipse tarafından kullanılır. Workspace içerisinde benzersiz olmalıdır. Genelde Application Name ile aynı verilir. Package Name: Kullanılan java paketinin gösterir. Minimum Required SDK: Uygulamanın çalışacağı minimum Android SDK sürümüdür. Uygulamanız daha alt sürümlerde çalışmaz. Örnekte seçilen API 8 seviyesi markette bulunan telefonların ve tabletlerin %90’ından fazlasını destekleyeceğiniz anlamına gelir. Target SDK: Uygulamanızı geliştirdiğiniz esas Android SDK sürümüdür. Compile With: Uygulamanızı derleyeceğiniz sürüm bilgisidir. Theme: Uygulama için seçilecek temel temadır. Daha sonra açılan pencerede Android 4.0.3 seçip devam ediyoruz. (2.1 de seçilebilir örneğin size bağlı) Sonraki pencerese Package Name veriyoruz. Bu isim unique bir değer olmalıdır. Genellikle url’ler ters yazılarak belirlenir. com. merhaba şeklinde. Next deyip yeni projemizi açmış oluyoruz. Sol kısımda Package Explorer kısmında projemizin dosyalarını görebiliyoruz. Bu dosyaları tanıyalım: src klasörü: Uygulamamızın kaynak kodlarını içerir. Burada bulunan kaynak dosyamız editörün bizim için yaratmış olduğu java uzantılı dosya. gen klasörü: Burada bir R.java dosyası yer almaktadır. Biz uygulamamıza yeni kaynaklar ekledikçe bu dosya kendiliğinden otomatik olarak güncellenecektir. R sınıfını uygulamayı yazarken kullanırız. assets: Uygulamamız ile birlikte paketlenmesini istediğiniz dosyaları koymamız gereken klasör. res: içerisinde çok sayıda klasör barındırıyor. Buradaki layout’un altındaki main.xml projenin grafiksel görünümünü ve kod kısmını içerir. values klasörünün altında bulunan strings.xml dosyasında stringlerimizi belirleyebiliyoruz. AndroidManifest.xml: Uygulama ve bileşenlerinin tanımlandığı XML dosyasıdır. project.properties Projenin özellik dosyasıdır. Merhaba Dünya uygulamasını yazmaya hazırız: Package Explorer penceresine genel bir bakış attıktan sonra values klasörünün altında bulunan strings.xml dosyasına tıklayalım. Kod kısmına aşağıdaki kodu yazıp kaydedelim:? <string name="text">Tıkla</string> Daha sonra main.xml dosyamızı açacağız. Grafik sekmesinde sol bölümde uygulamamıza dahil edeceğimiz kontrollerimizi göreceğiz. Form Widgets kısmından bir adet Button’u sürükleyip bırakıyoruz. Kod kısmına geçiyoruz. Kodlarımızın görünümü aşağıdaki şekildedir: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> Butonun layout_width özelliğini değiştirelim: android:layout_width="fill_parent" Bunu buton tüm ekranı kaplasın diye yaptık. android:text="@string/text" /> Bunu yazarak butonun textini değiştiriyoruz. Direk görüntülenmesini istediğimiz metni yazarsak uyarı alırız, doğru olan bu şekilde string tanımlayarak sonra bu stringi butonun textine vermek. Grafik arayüz kısmında butona sağ tıklayıp Show In – Properties seçersek sağda kontrolümüzün özellik ve olaylarını gösteren bir pencere açılacak. Buraya kadar buton ekleyip butonun textini değiştirdik. Sıra geldi bu butona tıkladığımızda ekrana “Merhaba Dünya” yazdırmaya Button Properties penceresinden Onlick kısmına MerhabaClick yazalım. Daha sonra src klasörünün altında bulunan java dosyasını açalım. İlk hali bu şekilde olacak. package com.yazilimciblog.merhaba; import android.app.Activity; import android.os.Bundle; public class MerhabaActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Buraya öncelikle metodumuzu yazacağız. public void MerhabaClick(View v) { } şeklinde olacak. ctrl+shift+o ile import android.view.View; ekleyeceğiz. Daha sonra scope alanına yazalım: public void MerhabaClick(View v) { Toast.makeText(getApplicationContext(), "Merhaba Dünya", Toast.LENGTH_LONG).show(); } Kaydedip uygulamayı emulatorde çalıştıralım. Bunun için üst kısımda bulunan yeşil Run tuşuna basıyoruz. İlk uygulamamız bu kadar. Butona basıldığında başarı ile ekrana “Merhaba Dünya” yazdırmış olduk. Subactivities örneği : Bu örneğimizde activities ler arasındaki erişimi gösteriyoruz 3 adet java classımız var ve 3 adet te layout umuz yani görünümüz var. Baslangic. Java package com.example.subactivities; import import import import import import import import android.support.v7.app.ActionBarActivity; android.app.Activity; android.content.Intent; android.os.Bundle; android.view.Menu; android.view.MenuItem; android.view.View; android.widget.Toast; public class Baslangic extends ActionBarActivity { private static final int CEVAP_SORGULA = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_baslangic); } public void degistirActivity(final View view){ switch(view.getId()){ case R.string.sf_subactivity: startActivity(new Intent(this,SubActivity.class)); break; case R.string.sf_subactivity_cevap : startActivityForResult(new Intent(this,SubActivityCevap.class),CEVAP_SORGULA); break; } } protected void onActivityResult(int requestcode, int resultCode, Intent data){ if(resultCode == Activity.RESULT_OK && requestcode == CEVAP_SORGULA){ Toast.makeText(this, "Cevabınız :", + Toast.LENGTH_SHORT).show(); } super.onActivityResult(requestcode, resultCode, data); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.baslangic, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } Burada yapılan işlem : public void degistirActivity(final View view){ switch(view.getId()){ case R.string.sf_subactivity: startActivity(new Intent(this,SubActivity.class)); break; case R.string.sf_subactivity_cevap : startActivityForResult(new Intent(this,SubActivityCevap.class),CEVAP_SORGULA); break; metodu ile gerçekleşmektedir. Değiştriactivity metodu activity ler arasında geçiş yapmamızı sağlar. Dikkat edersek switch bloğunun içinde sf_subactiviy ve sf_subactivitycevap layout larımıza erişim sağlamış olduk. Yani başlangıc layout üzerinde değiştiractivity metodu ile diğer iki layout a geçiş yapabildik. Subactivity.java package com.example.subactivities; import import import import android.app.Activity; android.content.Intent; android.os.Bundle; android.view.View; public class SubActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.subactivity); } public void cevapVer(final View view){ final Intent intent = new Intent(); intent.putExtra("Cevap", 55); setResult(RESULT_OK,intent); finish(); } } Burada yapılan işlem ise cevapver metodu ile cevap ver subactivity layout undna bulunan butonuno basıldığında ne iş yapılacağı anlatıldı. Subactivitycevap.java package com.example.subactivities; public class SubActivityCevap { } Layout larımız aşağıdaki gibidir : yani ekran görünümlerimiz. Activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.subactivities.Baslangic" > <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="26dp" android:layout_marginTop="14dp" android:text="@string/sf_subactivity" android:onClick="degistirActivity" /> <Button android:id="@+id/button2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="26dp" android:text="@string/sf_subactivity_cevap" android:onClick="degistirActivity" /> </RelativeLayout> Bakarsak başlangıç ekranımızda 2 adet butonumuz var. Bunların id leri button 1 ve button 2 dir. Aynı zaman da button içinde yazılacak olan metin android:text="@string/sf_subactivity" android:text="@string/sf_subactivity_cevap" kodlarıyla string.xml dosyası içinde belirtilmiştir. String.xml dosyasında baktığımızda buttonların string değerleri içinde hangi değerin yazıcağını görebiliriz. Subactivity.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/tx_subactivity" /> </LinearLayout> Subactivity görünümünde 1 adet textview vardır. Ve aynı button larda olduğu gibi bu textview içinde ne yazılacağı android:text="@string/tx_subactivity" ile string.xml dosyasında görülmektedir. Subactivitycevap.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/tx_subactivity_cevap" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sf_subactivity_cevap_ver" android:onClick="cevapVEr" /> </LinearLayout> Bu görünümde 1 textview ve 1 button bulunmaktadır. Aynı süreçler bu layout içinde geçerlidir. Şimdi string.xml dosyasına bakalım. Bütün form elemanlarının string değerleri bu xml dosyamız içerisindedir. <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <string name="app_name">SubActivities</string> <string name="sf_subactivity">Sub Activity Cagır</string> <string name="tx_subactivity">Sub Activity içindesiniz</string> <string name="sf_subactivity_cevap">Sub Activity Sorgula</string> <string name="tx_subactivity_cevap">Hayırdır Genç???</string> <string name="sf_subactivity_cevap_ver">Cevap Ver</string> <string name="action_settings">Settings</string> </resources> Ekran görünümleri Hesap makinesi programı MainActivity.java package com.example.calculator; import import import import import import import import android.support.v7.app.ActionBarActivity; android.os.Bundle; android.view.Menu; android.view.MenuItem; android.view.View; android.widget.Button; android.widget.EditText; android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText sayi1 = (EditText)findViewById(R.id.sayi1); final EditText sayi2 = (EditText)findViewById(R.id.sayi2); final TextView sonuc = (TextView)findViewById(R.id.sonuc); Button Button Button Button Button Button topla = (Button)findViewById(R.id.btntopla); cıkar = (Button)findViewById(R.id.btncikar); carp = (Button)findViewById(R.id.btncarp); bol = (Button)findViewById(R.id.btnbol); yuzde =(Button)findViewById(R.id.btnyuzde); temizle = (Button)findViewById(R.id.btntemizle); topla.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub float sayi1float = Float.parseFloat(sayi1.getText().toString()); float sayi2float = Float.parseFloat(sayi2.getText().toString()); sonuc.setText(String.valueOf(sayi1float+sayi2float)); } }); cıkar.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { float sayi1float = Float.parseFloat(sayi1.getText().toString()); float sayi2float = Float.parseFloat(sayi2.getText().toString()); sonuc.setText(String.valueOf(sayi1floatsayi2float)); } }); carp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub float sayi1float = Float.parseFloat(sayi1.getText().toString()); float sayi2float = Float.parseFloat(sayi2.getText().toString()); sonuc.setText(String.valueOf(sayi1float*sayi2float)); } }); bol.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub float sayi1float = Float.parseFloat(sayi1.getText().toString()); float sayi2float = Float.parseFloat(sayi2.getText().toString()); sonuc.setText(String.valueOf(sayi1float/sayi2float)); } }); yuzde.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub float sayi1float = Float.parseFloat(sayi1.getText().toString()); float sayi2float = Float.parseFloat(sayi2.getText().toString()); sonuc.setText(String.valueOf(sayi1float*sayi2float/100)); } }); temizle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub sayi1.getText().clear(); sayi2.getText().clear(); sonuc.setText(" "); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } Oncreate metodunda butonlar textview lar ve sonuç etiketlerinmizin tanımlanmalarını yapıyoruz. Ve bunları final EditText sayi1 = (EditText)findViewById(R.id.sayi1); Ile layout da eklediğimiz form elemanlarını findviewbyid diyerek eşleştirmesini yapıyoruz topla.setOnClickListener(new View.OnClickListener() ile topla işlmeninde neler yapılacağını belirtiyoruz. Bu işlemler çıkarma, bölme çaprma temizle işlemleri içinde geçerlidir. Ve bundan sonra da her seferinde public void onClick(View v) metodu override edilip bu işlemler için hangi fonksiyonların kullanıcağını belirliyoruz. Ekran görünümünü Inceleyelim <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.calculator.MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="28dp" android:layout_marginTop="21dp" android:text="@string/birinciSayi" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/sayi1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="21dp" android:ems="10" android:text="@string/sayi1"> <requestFocus /> </EditText> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/sayi1" android:layout_below="@+id/sayi1" android:layout_marginTop="18dp" android:text="@string/ikinciSayi" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:id="@+id/sayi2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/textView2" android:ems="10" android:text="@string/sayi2" /> <Button android:id="@+id/btntopla" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:text="@string/topla" /> <Button android:id="@+id/btncikar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/btntopla" android:layout_alignBottom="@+id/btntopla" android:layout_marginLeft="14dp" android:layout_toRightOf="@+id/btntopla" android:text="@string/cikar" /> <Button android:id="@+id/btnyuzde" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btncikar" android:layout_below="@+id/btncikar" android:text="@string/yuzde" /> <Button android:id="@+id/btntemizle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/btnyuzde" android:layout_alignBottom="@+id/btnyuzde" android:layout_alignLeft="@+id/btncarp" android:text="@string/temizle" /> <Button android:id="@+id/btncarp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/btnyuzde" android:layout_marginLeft="15dp" android:layout_toRightOf="@+id/btnyuzde" android:text="@string/carp" /> <Button android:id="@+id/btnbol" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/btntemizle" android:layout_marginLeft="20dp" android:layout_toRightOf="@+id/btntemizle" android:text="@string/bol" /> <TextView android:id="@+id/sonuc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/sayi2" android:layout_below="@+id/btnyuzde" android:layout_marginTop="21dp" android:text="@string/sonuc" /> </RelativeLayout> String.xml dosyamıza göz atalım <?xml version="1.0" encoding="utf-8"?> <resources> <string <string <string <string <string <string <string <string <string <string <string <string <string <string name="app_name">Calculator</string> name="hello_world">Hello world!</string> name="action_settings">Settings</string> name="birinciSayi">Birinci Sayıyı Giriniz</string> name="ikinciSayi">İkinci Sayıyı Giriniz</string> name="sayilar"></string> name="topla">+</string> name="bol">/</string> name="carp">*</string> name="yuzde">%</string> name="temizle">C</string> name="sonuc">sonuc :</string> name="sayi1"></string> name="sayi2"></string> <string name="cikar">-</string> </resources> Var olan tek layout un görünümü de aşağıdaki gibdir. BasitForm Örneği 2 adet java classımız var Birtanesi book java adından bilgileri tutun class. Diğer main classımız da işlemleri yapan class tır. Aynı zamanda book class ına da erişim sağlayabilir. Book. Java package com.example.basitform; public class Book { private String isim=""; private String soyisim=""; public String getName(){ return isim; } public void setName(String isim){ this.isim= isim; } public String getSoyisim(){ return soyisim; } public void setSoyisim(String Soyisim){ this.soyisim= soyisim; } } BasitFormActivity.Java package com.example.basitform; import import import import import import import android.support.v7.app.ActionBarActivity; android.os.Bundle; android.view.Menu; android.view.MenuItem; android.view.View; android.widget.Button; android.widget.EditText; public class BasitFormActivity extends ActionBarActivity { Book b = new Book(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_basit_form); Button kaydet = (Button)findViewById(R.id.button1); kaydet.setOnClickListener(onSave); } private View.OnClickListener onSave = new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub EditText isim = (EditText)findViewById(R.id.editText1); EditText soyisim = (EditText)findViewById(R.id.editText2); b.setName(isim.getText().toString()); b.setName(soyisim.getText().toString()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.basit_form, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } Button kaydet = (Button)findViewById(R.id.button1); kaydet.setOnClickListener(onSave); işlemi ile buttuon 1 kaydetme işlemi yapar. SetOnClickListener buton a basılınca ne yapılacağını belirler. Burda onSave metodu buton a basılınca çalışacaktır. Yani setOnClickListener hangi metodu çalıştıracağını belirtiyor. Burada yaptığımız işlem; Activity çalıştığında kitap sınıfından bir nesne yarattık. Buton nesnemizi findViewById() metodu ile tasarım bölümünde yarattığımız butona bağladık ve listener ile butona tıklandığında yapacağı işleri belirledik. Listener içinde ise iki tane editText i yine findViewById ile tasarımdaki editText ler ile bağladık. Daha sonra bu iki editText içerisindeki değerleri model nesnemiz olan kitap içine yazdık. Basit form uygulamamız bu kadar, Eğer uygulamanızın ikonunu değiştirmek istiyorsanız. 48×48 pixellik bir resim bulup, bu resmi drawable/ altına attıktan sonra AndroidManifest.xml dosyamızda “android:icon=”@drawable/ic_launcher” bölümündeki ic_launcher bölümünü kendi resim dosyanız ile değiştirmeniz gerekiyor. Activity_basit_form.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.basitform.BasitFormActivity" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/isim" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/textView2" android:layout_marginTop="26dp" android:text="@string/soyisim" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView2" android:layout_alignBottom="@+id/textView2" android:layout_toRightOf="@+id/textView1" android:ems="10" android:text="@string/edtisim" > <requestFocus /> </EditText> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView1" android:layout_alignBottom="@+id/textView1" android:layout_centerHorizontal="true" android:ems="10" android:text="@string/edtsoyisim" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/editText2" android:layout_marginTop="51dp" android:layout_toRightOf="@+id/textView2" android:text="@string/btnkaydet" /> </RelativeLayout> burada 3 satırlık form elde ettik. İlki kitap ismi, ikincisi yazarı ve üçüncüsü de kaydet butonu olacak. Şimdi programımızı Android Application olarak çalıştıralım. Eğer daha önceden emülator eklemediyseniz. Window->AVD Manager bölümünden ekleyebiliriz. New dedikten sonra Name bölümüne emülator ismi, target bölümüne emülatorun çalışacağı android sürümü, ve gerekli alanları doldurduktan sonra Edit AVD diyebiliriz. String.Xml <?xml version="1.0" encoding="utf-8"?> <resources> <string <string <string <string <string <string <string <string </resources> name="app_name">BasitForm</string> name="hello_world">Hello world!</string> name="action_settings">Settings</string> name="isim">isim :</string> name="soyisim">soyisim :</string> name="edtisim"></string> name="edtsoyisim"></string> name="btnkaydet">Kaydet</string> Android ile Sesi Yazıya Çevirme Bu çevrimde asıl işi yapacak olan RecognizerIntent intent’idir. Uygulama başladığındaRecognizerIntent.ACTION_RECOGNIZE_SPEECH intentini ses tanıma işlemi (action) yapacak şekilde tetikleyecek. Tetiklenen INTENT kullanıcıdan birşeyler söylemesini bekler, kullanıcı konuşup sustuktan sonra da konuştuklarının yazıya çevrilmiş haliniArray şeklinde bize verecektir. Bu Array olası doğru sonuçları içeriyor, o nedenle kullanıcının asıl demek istediği Array’ın herhangi bir elemanı olabilir fakat; daha çok baştaki elemanlar asıl demek isteneni içerir. Uygulamamızda bütün elemanları sınayacağız. MainActivity.java dosyası içerisinde çevrim INTENT‘ini başlatan kod bloğu: 1 2 3 4 5 6 7 private void CeviriBaslat() { Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Haydi birşeyler söyle!"); startActivityForResult(i, check); } Başlattığımız INTENT’ten gelen sonuçları işleyeceğimiz metodumuz: onActivityResult(int requestCode, int resultCode, Intent data) bu metod içerisinde sonuçları ListView‘e iliştiriyoruz. Eğer kullanıcı “android evreni” demiş isehttp://www.androidevreni.com‘un açılmasını sağlıyoruz. @Override 1 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 2 super.onActivityResult(requestCode, resultCode, data); 3 4 if (requestCode == check && resultCode == RESULT_OK) { 5 results = data 6 .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 7 lv.setAdapter(new ArrayAdapter<String>(this, 8 android.R.layout.simple_expandable_list_item_1, results)); 9 10 // eğer android evreni demiş ise; android evrenine gitsin :). for (int i = 0; i < results.size(); i++) { if 11 (results.get(i).toLowerCase().equals("android evreni")) { String url = "http://www.androidevreni.com"; Intent ii = new 12 Intent(Intent.ACTION_VIEW); ii.setData(Uri.parse(url)); startActivity(ii); break; } } 13 } 14 15 } Daha başka sınamalar yaparak uygulamanın başka işler de yapmasını sağlayabilirsiniz. Mesela Flash‘ı açtırın, rehberdeki birilerini aratın, müzik çaldırın daha neler neler :). Proje dosyalarının tam içeriği aşağıdaki gibidir. activity_main.xml dosyası : 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context=".MainActivity" > 11 12 <ListView 13 android:id="@+id/listView1" 14 android:layout_width="match_parent" 15 android:layout_height="wrap_content" 16 android:layout_weight="1" > 17 </ListView> 18 19 <Button 20 android:id="@+id/bCevir" 21 android:layout_width="match_parent" 22 android:layout_height="wrap_content" 23 android:text="Konuş" /> 24 25 </LinearLayout> MainActivity.java dosyası: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package com.example.androidevrenisesceviryazi; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.speech.RecognizerIntent; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; public class MainActivity extends Activity { int check = 1000; ListView lv; Button bCevir; ArrayList<String> results; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.listView1); bCevir = (Button) findViewById(R.id.bCevir); bCevir.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { CeviriBaslat(); } }); CeviriBaslat(); } private void CeviriBaslat() { Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 } i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Haydi birşeyler söyle!"); startActivityForResult(i, check); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == check && resultCode == RESULT_OK) { results = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, results)); } // eğer android evreni demiş ise; android evrenine gitsin :). for (int i = 0; i < results.size(); i++) { if (results.get(i).toLowerCase().equals("android evreni")) { String url = "http://www.androidevreni.com"; Intent ii = new Intent(Intent.ACTION_VIEW); ii.setData(Uri.parse(url)); startActivity(ii); break; } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } Android Titreşim Sınıfı ve Kullanımı Merhaba, bu dersimizde Android teki ‘Vibrator’(titreştirici olarak Türkçeye çevirebiliriz) sınıfından bahsedicem ve uygulamalı bir örnek ile kullanımını anlatmaya çalışıcağım. Vibrator Sınıfı Bu sınıf cihazdaki titreştiriciyi çalıştırır. Eğer başlattığımız bir işlem biterse ya da bu işlemden çıkılırsa bu işlemle birlikte başlattığımız titreşim de duracaktır. Cihazdaki titreştiricinin durumunu öğrenmek için şu komutu kullanmamız yeterli olacaktır. 1 getSystemService(Context.VIBRATOR_SERVICE); Android teki vibratöre ulaşabilmemiz için AndroidManifest.xml dosyasına şu izin kodunu eklememiz gerekir: 1 <uses-permission android:name="android.permission.VIBRATE"/> Peki izin aldık, durumunu da sorduk, titreşimi nasıl başlatıcaz? Titreşimi başlatmak için tek yapmanız gereken öncelikle bir Vibrator objesi oluşturmak sonra da ‘vibrate(süre)’ komutunu kullanmaktır. Süreyi ms cinsinden giriniz. Uygulama örneğimizi kodlamaya başlayalım. Öncelikle arayüzü tasarlayalım. Bir butonumuz ve altında da bir tane fotoğraf olsun. Arkaplan rengi griye yakın bir renk olsun. Bunlar için aşağıdaki koduactivity_main.xml dosyasına ekleyiniz. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#d2d2d2" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btn_titresim" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="#1b8bb4" android:onClick="baslat_fonk" android:text="Titreşim" android:textColor="#ffffff" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/btn_titresim" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:src="@drawable/arkaplan" /> </RelativeLayout> Burda kullandığım fotoğrafı kodları indir linkinden indirdiğiniz dosyada bulabilirsiniz. Bu adımdan sonra AndroidManifest.xml dosyasına aşağıdaki izin kodunu ekliyoruz. 1 <uses-permission android:name="android.permission.VIBRATE"/> Artık MainActivity.java dosyasının kodlarını yazmaya başlayabiliriz. MainActivity.java kodlar: 1 2 3 4 5 6 7 8 9 10 11 package com.androidevreni.titresimandroid; import android.os.Bundle; import android.os.Vibrator; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button titrestir = (Button) findViewById(R.id.btn_titresim); titrestir.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vib.vibrate(500); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } Titreşim kısmı için açıklamaları yazının başında yaptım. Buton ve ona ait setOnClickListener metodunu daha önceki derslerimizde anlatmıştım. Kolay gelsin. Seek Bar ve Kullanımı Seekbar Nedir? Seekbar aslında bir işlem çubuğunun(progress bar) biraz genişletilmiş halidir. Bir işlem çubuğuna kaydırılabilir ya da sürüklenebilir bir nesne eklersek bir Seek bar elde etmiş oluruz. Kullanıcı seek bar ın işlem seviyesini ve durumunu dokunma ile değiştirebilir. Bunların bir max değeri olur, bu değeri geliştirici layout dosyasından belirleyebilir. Bu değerin değişimine göre geliştirici uygulamasında yapmak istediği şeyleri yapar veya yaptırır. Peki kullanıcı tarafından Seekbar ın işlem seviyesinini(level) değiştirildiğini nasıl anlayacağız? Burda imdadımıza OnSeekBarChangeListener arayüzü yetişiyor. Bu arayüz progress level(işlem seviyesi) değiştirildiğinde kod için bazı metodları çağırıcak, biz de bu metodlar içinde çalıştırmak istediğimiz kodlarımızı çalıştırıcağız. Seekbar sınıfı ile ilgili daha ayrıntılı bilgiye şu linkten ulaşabilirsiniz. OnSeekBarChangeListener OnSeekBarChangeListener arayüzünün bu derste kullanacağımız 3 metodunun aşağıda özetle ne işe yaradıklarını verdim. Public Methods abstractonProgressChanged(SeekBar seekBar, int progress, boolean fromUser) void Bu metod seek bar ın seviyesi değiştirildiğinde çağrılır. abstractonStartTrackingTouch(SeekBar seekBar) void Bu metod kullanıcı seek bar ın seviyesini değiştirmeye başladığı anda çağrılır. abstractonStopTrackingTouch(SeekBar seekBar) void Bu metod kullanıcı seek bar ı değiştirmeyi bıraktığı anda çağrılır. OnSeekBarChangeListener arayüzü hakkında daha detaylı bilgiye buradanulaşabilirsiniz. Bu gerekli açıklamalardan sonra artık uygulama örneğimize geçebiliriz. Uygulama Örneği Uygulama örneğimizde 3 tane seek bar kullanarak arkaplan rengini değiştirmeye çalışıcaz. Seek barların her biri red, green ve blue renk kodlarından birini temsil edecek. Yani arkaplan rengini değiştirmek için RGB kodu kullanacaz. Arayüz Uygulamamızın arayüzünde 3 tane seek bar olsun. Ve seek barların maksimum alabileceği değer 255 olsun. Çünkü red,green ve blue renk kodları 0 ila 255 arasında değişir. Aşağıdaki kodları alıp activity_main dosyanıza yapıştırın. activity_main.xml dosyamız : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/myScreen" > <SeekBar android:id="@+id/bar_red" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="255" android:progress="0"/> <SeekBar android:id="@+id/bar_green" android:layout_width="fill_parent" android:layout_height="wrap_content" 19 android:max="255" 20 android:progress="0"/> 21 <SeekBar 22 android:id="@+id/bar_blue" 23 android:layout_width="fill_parent" 24 android:layout_height="wrap_content" 25 android:max="255" 26 android:progress="0"/> 27 </LinearLayout> Activity (Java Kodumuz) Burada arayüze eklediğimiz seek barları tanımlayacaz. Seek barlara listener ekleyecez ve seek barlardan herhangi biri değiştirildiğinde arkaplaniGuncelle() adlı metodumuzu çağıracağız. Bu metodla seekbarların değerlerini alıp arkaplan rengini değiştiricez. MainActivity.java dosyamız 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 package com.eeecoder.seekbackgroundcolor; import android.os.Bundle; import android.app.Activity; import android.widget.LinearLayout; import android.widget.SeekBar; public class MainActivity extends Activity { private int seekBarR, seekBarG, seekBarB; SeekBar red_Bar, green_Bar, blue_Bar; LinearLayout mScreen; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mScreen = (LinearLayout) findViewById(R.id.myScreen); red_Bar = (SeekBar) findViewById(R.id.bar_red); green_Bar = (SeekBar) findViewById(R.id.bar_green); blue_Bar = (SeekBar) findViewById(R.id.bar_blue); arkaplaniGuncelle(); red_Bar.setOnSeekBarChangeListener(seekBarChangeListener); green_Bar.setOnSeekBarChangeListener(seekBarChangeListener); blue_Bar.setOnSeekBarChangeListener(seekBarChangeListener); } private SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub arkaplaniGuncelle(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } }; private void arkaplaniGuncelle() { seekBarR = red_Bar.getProgress(); seekBarG = green_Bar.getProgress(); seekBarB = blue_Bar.getProgress(); mScreen.setBackgroundColor( 0xff000000 + seekBarR * 0x10000 + seekBarG * 0x100 + seekBarB ); } } Uygulama örneğimizin çalışması için herhangi bir izne gerek olmadığıdan AndroidManifest.xml dosyasına herhangi bir izin eklemenize gerek yoktur. AndroidManifest.xml dosyamız: 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.eeecoder.seekbackgroundcolor" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="18" /> 10 11 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 android:name="com.eeecoder.seekbackgroundcolor.MainActivity" 18 android:label="@string/app_name" > 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 22 <category android:name="android.intent.category.LAUNCHER" /> 23 </intent-filter> 24 </activity> 25 </application> 26 27 </manifest> ListActivity ile Menü Oluşturma ListActivity Nedir? ListActivity android te bulunan tamamen bir liste oluşturmak için kullanılan bir aktivitedir. Yapısında bir tane liste içerir. Bu liste komplex ve çok uzun olabilir, alt dallanmalar olabilir. Bu tamamen geliştiriciye kalmıştır. Bu yüzden uygulamamızı kodlarken direk ListActivity ile extend edeceğiz. Bu bize direk olarak bir listeyi ve bu sınıfın içerdiği metodları kullanmamızı sağlayacak. Array Nedir ? Array dizi demektir, dizide bazı datalar saklayacağız. Bunlar herhangi bir sayı ya da bir karekter dizisi olabilir. Biz listemizin elemanlarını bir string array de saklayacağız. ArrayAdapter Nedir? ArrayAdapter Array deki elemanları listeye eklenecek şekilde adapte(uyumunu sağlar) eder. ListAdapter Nedir ? ListAdapter ArrayAdapter dan aldığı datayı/elemanları listeye ekler. Liste adaptörü setListAdapter komutu ile oluşturulur. Evet bu kısa ve gerekli açıklamalardan sonra uygulamamızı kodlamaya geçebiliriz. activity_main dosyamızda herhangi bir ek yapmamız gerek yoktur çünkü onu kullanmayacağız. Dediğim gibi ListActivity zaten yapısında bir listeyi taşıyor bu yüzden bizim ayrıca gui de yeni liste eklememize gerek yoktur. MainActivity.java(bu arada bu tutorial için ben bu dosyaya Menu.java ismini verdim.) dosyasına yazmamız gereken kodlar aşağıda verilmiştir : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.androidevreni.listviewtutorial; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class Menu extends ListActivity { String sehirler[] = {"İzmir","Şanlıurfa","Ankara","İstanbul","Ağrı"}; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, sehirler)); } @Override 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); if(position==0){ Toast.makeText(getApplicationContext(), "İzmir", Toast.LENGTH_SHORT).show(); } if(position==1){ Toast.makeText(getApplicationContext(), "Şanlıurfa", Toast.LENGTH_SHORT).show(); } if(position==2){ Toast.makeText(getApplicationContext(), "Ankara", Toast.LENGTH_SHORT).show(); } if(position==3){ Toast.makeText(getApplicationContext(), "İstanbul", Toast.LENGTH_SHORT).show(); } if(position==4){ Toast.makeText(getApplicationContext(), "Ağrı", Toast.LENGTH_SHORT).show(); } } } Java dosyamızda göreceğiniz gibi listedeki hangi şehire tıklanırsa/touch edilirse o şehrin ismini Toast sınıfını kullanarak ekrana mesaj/bildirim olarak yazdırıyoruz. Toast sınıfı ile mesaj gösterimini daha önceki yazılarımda anlatmıştım. Tekrar bakmak isteyenler için: Toast: Kullanıcıya Mesaj Gösterme veya Geri Bildirim Mesajı Android Spinner kullanımı Spinner açılır liste şeklinde seçim olanağı sağlar. Spinner’ın içerisini veri tabanında çekilen verilerle veya oluşturduğumuz diziler gibi static veriler ile doldurabiliriz. Yazdığım kodlarda spinner’ın içerisini xml dosyasında oluşturduğum dizi ile dolduruyorum.Yeni bir xml dosyası oluşturup içerisine aşağıdaki diziyi yaratıyoruz. 1 2 3 4 5 6 7 8 9 <string-array name="dizi"> <item>Pazartesi</item> <item>Salı</item> <item>Çarşamba</item> <item>Perşembe</item> <item>Cuma</item> <item>Cumartesi</item> <item>Pazar</item> </string-array> Daha sonra spinner’ı kullanacağımız layout’a spinner ekliyeceğiz. activity_main.xml 1 2 3 4 5 6 7 8 <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="fill_horizontal" android:drawSelectorOnTop="true" > </Spinner> Şimdi class içinde kodlarımızı yazmaya başlıyoruz ilk olarak Spinner nesnesi oluşturuyoruz.Ve bunu class değişkeni olarak yapmanızı öneririm.Daha sonra yazıdığım kodlar şu şekilde; 1 spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter adapter = 2ArrayAdapter.createFromResource(this,R.array.dizi,android.R.layout.simple_spinner_item); 3 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 4 spinner.setAdapter(adapter); ilk satırda spinner’ı tanıtıyoruz. İkinci satırda bir arrayadapter olusturup veriyi çekiyoruz. Arrayadapter ‘in ilk paremetresi içerik yani context ikincisi çekiceğimiz veri ,ücüncü parametre ise spinner’ın görüntüsüdür. Ücüncü satırda ise spinner’ın dropdown halindeki görüntüsünü belirliyoruz.Son satırdada setAdapter ile adapterimizi spinnera yüklüyoruz.Kodların tamamı aşağıdaki gibidir. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 public class MainActivity extends Activity { Spinner spinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.dizi,android.R.layout.simple _spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown _item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Log.i("uyarı",String.valueOf(arg2)); } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } }