23 Mayıs 2011 Pazartesi

Android Serisi 2. Bölüm - Activity, View, Toast kavramları

Merhaba arkadaşlar,
Android serimizin 2. bölümüyle tekrar beraberiz. Önceki bölümümüzde android'in temellerinden ve bu temel kavramlar içinde en önemlisi olan activity'nin yaşam döngüsünden bahsetmiştik. İkinci bölümde activity, view ve toast (messagebox) kavramlarıyla android ile program geliştirmeye girmiş olacağız.

Örnek bir uygulamanın yerini başka hiçbir şey tutamaz düşüncesiyle konuyu uzatmadan tüm bu kavramları tam manasıyla anlayabileceğimiz bir senaryo geliştiriyoruz. Senaryomuza göre kullanıcı, yazacağımız bir ekran ile uygulamaya login olmaya çalışacak, girilen bilgiler kontrol edilip kullanıcıya mesaj dönülecek.

Dilerseniz öncelikle login ekranımızın tasarım kısmını oluşturalım ve bu sayede de viewlara girmiş olalım. Hemen aşağıdaki gibi bir android projesi oluşturarak işe başlıyoruz.


Evet projemizi oluşturduk, artık tasarım ekranımızı yapmaya yani viewlarla tanışmaya hazırız. Yazılım literatüründe Control olarak bildiğimiz yapılar Android dünyasında View ismiyle anılıyor. Edittext (textbox), Textview (label), button, checkbox, radiobutton, vs... gibi bir çok view bulunmakta. http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/7319-android-views-controls-dialogs.html bağlantısına tıklayarak viewları tek tek inceleyebilirsiniz. Biz örneğimizde 2 edittext, 2 textview, 2 LinearLayout ve 1 tane de button kullanacağız.

Android'de bir activity'nin tasarım ekranını xml uzantılı layout dosyalarıyla gerçekleştirebiliyoruz. (Bunun yanında dilerseniz codebehind'dan da layout'unuzu oluşturabilirsiniz). Bu dosyalar sol taraftaki resimde de belirtildiği üzere Proje > res > layout dizininde bulunmaktadırlar. Dilerseniz tam bu noktada kısaca Res klasöründen bahsedelim. Res klasörü default olarak 5 klasör içerir. Bunlardan ilk üçü (drawable klasörleri) ikonların hangi çözünürlük tipine göre çizileceğini belirtir. Eğer yaptığınız uygulama ikon, resim, vb içeriyorsa ve bu uygulama android işletim sistemine sahip tüm aygıtlarda çalıştırılmak isteniyorsa o zaman tüm dpi türlerine göre bu dosyaları oluşturup ilgili klasörlerine atmak zorundasınız. Amacınız basit bir uygulama ise hepsini bir klasörde toplamanız da mümkün. Android ile IPhone arasındaki en büyük farklılıklardan biri android'de fragmantasyonun çok fazla olması. Bu da bu tür konularda uygulama geliştiriciler için büyük bir dezavantaj oluyor. Bu 3 drawable klasöründen hemen sonra Layout ve Values klasörlerini görüyoruz. Layout, az önce de belirttiğimiz gibi tasarım dosyalarının tutulduğu klasör. Values ise aslında yeri geldiğinde daha detaylıca değineceğiz ancak şimdilik hakkında bilmeniz gereken şey localization'dan tutun da hardcoded kötü kodlamanın önüne geçmenize imkan verecek kadar kullanışlı xml dosyalarımızın barındığı kısım olmasıdır.


main.xml dosyasına tıkladığınızda karşınıza bir tasarım editörü Graphical Layout çıkacak. Ancak biz tasarımımızı yaparken graphical layout yerine -bence- daha anlaşılır ve esnek olan (graphical layout'un hemen sağında göreceğiniz) main.xml tab sekmesini kullanacağız.

Aşağıdaki kodu main.xml ekranındaki default gelen kodla değiştirin.


<?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">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="50px"
android:weightSum="3"
android:layout_margin="10dp"
>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="2"
android:text="Kullanıcı Adı: "
android:gravity="right"
/>
<EditText
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:id="@+id/txtUsername"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="50px"
android:weightSum="3"
android:layout_marginTop="-10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="2"
android:text="Şifre: "
android:gravity="right"
/>
<EditText
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:id="@+id/txtPassword"
android:password="true"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="50px"
android:weightSum="3"
android:layout_marginTop="-10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="2"
android:text=""
/>
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:id="@+id/btnGiris"
android:text="Giriş"
android:layout_gravity="right"
/>
</LinearLayout>
</LinearLayout>


Önce tüm ekranı kaplayacak bir LinearLayout daha sonra da onun içine satır mantığını oluşturacak diğer LinearLayoutları koyduk. Aralarındaki tek fark en dıştakinin orientation=vertical, diğerlerinin horizontal olması. LinearLayout'ı HTML elemanlarından birine benzetmemiz gerekirse en uygunu DIV olacaktır sanırım. Sonrasında sırasıyla TextView (label) ve EditText (textbox) kontrollerimizi ekledik. Atamış olduğum attributeleri değiştirerek nasıl çalıştığını daha iyi anlarsınız diye düşünüyorum. Burada dikkat etmeniz gereken ID atamasının nasıl yapıldığı keza kontrole bu atamış olduğumuz ID ile ulaşacağız.

Sonuç olarak ekran görüntümüz aşağıdaki gibi olmalı.


Artık kod tarafına geçebiliriz. Proje menümüzdeki src klasörünün altında bulunan Login.java isimli classımızı (activity) açıyoruz ve aşağıdaki kodları ekliyoruz.

package com.denemeapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Login extends Activity {

private final String loginName="mustafaguven", loginPassword="123456";
private EditText txtUsername, txtPassword;
private Button btnGiris;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //main.xml isimli dosyamızın çizilmesi gerektiği belirtildi.

//kontrollerimizi yakaladık
txtUsername = (EditText)findViewById(R.id.txtUsername);
txtPassword = (EditText)findViewById(R.id.txtPassword);
btnGiris = (Button)findViewById(R.id.btnGiris);

//button'ın onclick anında işlem yapmak için bir listener set ettik
btnGiris.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
//kullanıcı adı ve şifre kontrolümüzü yaptık
if(txtUsername.getText().toString().contentEquals(loginName)
&& txtPassword.getText().toString().contentEquals(loginPassword)){
//kullanıcıya mesaj vermek için Toast nesnesini kullandık
Toast.makeText(getApplicationContext(), "Hoşgeldiniz Sayın " + txtUsername.getText().toString(), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Yanlış kullanıcı adı veya şifre", Toast.LENGTH_SHORT).show();
}
}
});
}
}


ve sonuç...



Dosya ismi: Activity_View_Toast.rar
Dosya Boyutu: 41.66 KB

2 yorum:

  1. çok güzel bir anlatım. elinize sağlık. teşekkürler.

    YanıtlaSil

  2. We give the best Java Training Courses in Chennai and we have the best mentors who are chipping away at Top MNC organizations with right around 10 years of involvement in Java.Our preparing is of one of a kind style makes us the best java preparing foundation in Chennai and parcel of understudies are awed with our preparation which has made us to be the best decision for individuals intrigued by learning Java.

    YanıtlaSil