23

TMZ

2011

Merhaba Android

Yazan: Barış Samancı
Kategoriler:Android

Android Logo

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)

Android Hello World Activity

İ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.

Eclipse Android screenshot

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.

Android Activity Life Cycle

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.

eclipse android graphical layout

Ş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.

Yorumlar
28 Tem 2011 Perşembe, 11:31 tarihinde yazmış.

Barış Hocam elinize sağlık. Çok güzel bir çalışma olmuş. Android hakkında Türkçe kaynak bulabilmek de güzel. Çalışmalarınızın devamını merakla bekliyoruz hocam. İyi çalışmalar.

07 Ağu 2011 Pazar, 06:33 tarihinde yazmış.

Yazılarınızın devamını bekliyorum. Lütfen yazmaya devam edin, başlangıç seviyesinde olacak şekilde. Türkçe kaynak bulmak çok zor. Teşekkürler

mesut
22 Kas 2011 Salı, 11:41 tarihinde yazmış.

barış hocam ben vb06 ve pıcbasıc amatör olarak ugraşıyorum bu andiroid cep telefonunlar için basıc diline yakın veya benzeri bir dil varmıdır bende internet üzerinden ev otomasyonu gibi bir proje yapmak istedim ama bunun için bılgisayarın sürekli acık kalması gerekiyo buda çok kötü bunun içinde çin telefonların vifi sini kulanmak ve bu telefona msn üzerinden veri gönderip almak alınan veriyi tuş sesine çevirip pıc ile degerlendirmek ti buda java dili yazmak gerekiyo görüşlerinizi bekliyorum

22 Kas 2011 Salı, 16:57 tarihinde yazmış.

Merhaba Mesut, ben basic ile androide kod yazan hiç görmedim duymadım, merakta etmedim açıkçası.Javadan farklı olarak performans gerektiren uygulamalarda C/C++ ile kod yazıldığını biliyorum. Java bilmeyip basic ve C biliyorsan bir alternatif olabilir. Google da android native code diye aratabilirsin. Kod yazmak için NDK yı indirmen gerek.

Fatma
23 May 2012 Çarşamba, 10:34 tarihinde yazmış.

Ellerinize sağlık ;) Kurulumu da sizin sayenizde yaptım, kodlar da çok işime yaradı..

Adınız *:
e-Mail Adresiniz *:  ??
Web Siteniz:
Yorumunuz *:
Kalan karakter sayısı: 500
 
 

Tasarım ve Programlama Barış SAMANCI
Her hakkı saklıdır.
barissamanci.net  ©  2010-2024