Bir önceki yazıda Android SDK kurulumunu yapmıştık. Bu yazıdada basit bir örnek yapalım. Programlamaya yeni başladığımızda yada yeni bir platforma geçtiğimizde herşeyin hazır ve çalışıyor olduğunu test etmek ve sistemin çalışma mantığını basit olarak anlamak için “hello world” uygulaması klasiktir. Bizde bu uygulamamızda “Merhaba Android” diyelim.
Önce Eclipse’i açıp File > New > Project > Android Project diyerek proje oluşturma penceresine gelelim. İlk textbox’a projemizin adını girelim. Ben “MerhabaAndroid” gireceğim. Altta “Build Target” yazan yerde ise indirip kurmuş olduğunuz SDK versiyonlarını görebilirsiniz. Ben “Android 2.2” yi seçiyorum. Properties alanı ise bu işlemlerden sonra otomatik olarak dolmuş olması gerekiyor. Paket adı kısmına proje adınızı girebilirsiniz. Bu işlemlerden sonra Finish butonunu tıkladığınızda ilk projemiz oluşturulmuş olacak. Run dediğinizde aşağıdaki gibi bir ekranla karşılaşmış olacaksınız.
(Projelerinizin emulatörde çalışabilmesi için AVD Managerdan en az 1 tane sanal cihaz oluşturmuş olmanız gerekmekte)
İyide biz bir şey yapmadık, ekrandaki yazılar nereden geldi? Şimdi oluşturduğumuz projeyi inceleyelim ve sistemin çalışmasını basit olarak anlamaya çalışalım. Eclipse’te Package Explorer altında projenizi görebilirsiniz, treeview’leri şekildeki gibi genişletin.
src klasörü altındaki MerhabaAndroidActivity.java dosyasını açın. Aşağıdaki kodu göreceksiniz.
package com.MerhabaAndroid;
import android.app.Activity;
import android.os.Bundle;
public class MerhabaAndroidActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Koddan görüldüğü gibi ide Activity sınıfından bir sınıf türetmiş ve adını projemizi açarken kullanmış olduğumuz isimde MerhabaAndroidActivity koymuş. Bu aktivite bizim giriş noktamızdır ve nasıl C ve benzeri dillerde programın akışı mainden başlıyorsa bizim uygulamamızda bu aktivity’den başlar. Peki program MerhabaAndroidActivity’den başlayacağını nasıl biliyor Activity sınıfını incelemeden, önce bunu inceleyelim. AndroidManifest.xml dosyasını açın, aşağıdaki kodu göreceksiniz.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.MerhabaAndroid"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MerhabaAndroidActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Kodda application kısmı altında activity tagi var ve ismi .MerhabaAndroidActivity. Action etiketinde de main action olarak bildirilmiş.Burdaki action etiketi bu aktivitenin uygulamamız için ana giriş noktası olduğunu belirtmekte. Bu yüzden uygulamamız MerhabaAndroidActivity’den başlamakta.
Activity nedir? Kısaca tanımını yaparsak, activity uygulamamızın bir parçası olup bize kullanıcının giriş yapıp çıktı alabileceği bir ekran sunar. Her aktivitenin kendine ait bir arayüzü vardır ve uygulamalar genelde birden fazla aktivity’den oluşur. Kullanıcıların girişlerine göre activity pencereleri bir biri arasında geçiş yaparak ekrandaki görüntüyü değiştirir. Bu pencereler genelde tam ekrandır fakat uygulamamıza göre ekran boyutundan küçük olup diğer pencereler üzerine yerleşebilir ve kayabilirler.
Activitylerin bir takım olaylarda çalışan metodları vardır. Bu olaylarsa create, pause, resume, stop... gibi olaylardır. MerhabaAndroidActivity.java dosyasındaki onCreate() metodunu görebilirsiniz. Aşağıdaki şekilde ise bir activitenin yaşam döngüsünü ve metodlarını görebilirsiniz.
onCreate metodunda genellikle başlangıç işlemleri yapılır ve ardından setContentView metodu ile UI ekranı kullanıcıya gösterilerek aktivite başlatılmış olunur. Activity sınıfından türetmiş olduğumuz sınıflar bir üst sınıfın yani avtivity sınıfının onCreate metodunu çağırmalıdırlar. Aksi halde istisna oluşmaktadır. Bu işlemlerden sonra setContentView(R.layout.main); metodu ile idenin oluşturmuş olduğu, ilk görüntüdeki ekranı kullanıcıya göstermiş oluyoruz.Şimdi bu metodun parametrelerini inceleyelim.
Package Explorerda gen klasörü altındaki R.java dosyasını açın. Bu dosya otomatik oluşturulan bir dosyadır ve kaynaklarımızın hafıza adreslerini tutar. Aşağıda görülmekte.
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
Görüldüğü gibi R sınıfı altında bir layout sınıfı var ve bu sınıf altında bir int türünden main değişkeni var. setContentView metoduna geçtiğimiz parametre budur. Peki bu nedir? res klasörü altındaki layout klasöründe main.xml dosyasını görebilirsiniz. Açtığınızda karşınıza aşağıdaki gibi bir görüntü gelecek
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Görüldüğü gibi bu dosya içerisinde bir LinearLayout oluşturulmuş ve altında bir TextViev var. Projemizi oluşturup çalıştırdığımızda karşımıza gelen ilk ekran setContentView ile gösterdiğimiz bu ekrandır. TextView’in text property’sinde @string/hello yazmaktadır. Bu stringide res > values > string.xml dosyasında bulabilirsiniz.Aşağıda görülmektedir.
<resources>
<string name="hello">Hello World, MerhabaAndroidActivity!</string>
<string name="app_name">MerhabaAndroid</string>
</resources>
Gördüldüğü gibi birde app_name yazan uygulamamızın ismini saklayan bir string daha var. Ayrıca main.xml dosyasına tıklayıp GraphicalLayout sekmesinden uygulamamızın ekran görüntüsünü görebilir, sol taraftaki listeden ekrana kolayca buton, yazı alanı, resim ... sürükleyip bırakabilirsiniz.Aşağıdaki ekran görüntüsünde görülmektedir.
Şimdi bir örnek yapalım. Örnekte bir editbox ve buton olsun. Butona bastığımızda editboxa girmiş olduğumuz yazıyı mesaj olarak göstersin. Bunu sürükle bırak değilde programatik yoldan yapalım. MerhabaAndroidActivity.java dosyasına gidelim ve LinearLayout, Button, ve EditView türünden birer nesne oluşturalım. Tüm bunlar widget olarak geçtiği için import android.widget.*; ile widget alanını kodumuza ekleyelim. Nesneleri şu şekilde oluşturabiliriz
LinearLayout ly = new LinearLayout(this);
Button btn = new Button(this);
final EditText et = new EditText(this);
Ardından bu widgetların width ve height property’lerini ayarlayalım.
btn.setText("Tıkla");
btn.setHeight(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
btn.setWidth(android.view.ViewGroup.LayoutParams.MATCH_PARENT);
et.setWidth(android.view.ViewGroup.LayoutParams.MATCH_PARENT);
et.setHeight(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
Burada setWidth ve setHeight metodlarına integer olarak sayıda geçebiliriz. WRAP_CONTENT ile yükseklik için içeriği sarmala, MATCH_PARENT ile de genişlik için içinde bulunduğumuz view’in genişliğini kullan diyoruz. Ardından butonumuzun click olayını takip edip editview deki mesajı ekranda gösterecek kodumuzu yazalım.
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),et.getText(),
Toast.LENGTH_LONG).show();
}
});
Burada Toast ile ekrana C#taki MessageBox tarzı mesaj verelim. İkinci parametresinde vermek istediğimiz mesajı yani EditView’in textini alalım. Son olarakta EditView ve Button’u LinearLayout’a ekleyip setContentView ile ekranda gösterelim. Burada ly nin orientation propertysine 1 verdik. LinearLayout içindeki viewları dikey olarak göster demek. 0 olsaydı buton ve editview yatay olarak yan yana gözükeceklerdi.Kodun son halini aşağıda görebilirsiniz.
package com.MerhabaAndroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
public class MerhabaAndroidActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ly = new LinearLayout(this);
Button btn = new Button(this);
final EditText et = new EditText(this);
btn.setText("Tıkla");
btn.setHeight(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
btn.setWidth(android.view.ViewGroup.LayoutParams.MATCH_PARENT);
et.setWidth(android.view.ViewGroup.LayoutParams.MATCH_PARENT);
et.setHeight(android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), et.getText(),
Toast.LENGTH_LONG).show();
}
});
ly.setOrientation(1); //0 Horizontal, 1 Vertical
ly.addView(et);
ly.addView(btn);
setContentView(ly);
}
}
Şimdi kodumuzu çalıştırıp test edelim. Ben emulatorler bilgisayarı gereksiz yere yavaşlattığı için uygulamaları direk cihaza atıp deniyorum. Videoda programımızın çalışmasını görebilirsiniz. Butona bastığımızda girmiş olduğumuz yazıyı mesaj olarak gösteriyor.