Android Studio İle Adım Adım Mobil Programlama | 3


Herkese merhaba arkadaşlar. Android Studio İle Adım Adım Mobil Programlama serimizin üçüncü dersi ile karşınızdayız. Bir önceki dersimizde app klasörü(manifest.xml,java,res) ve Gradle Scripts içerisinde bulunan build.gradle(app) dosyalarından bahsetmiştik. Bu dosyalarda bulunan tag‘lar ile ilgili konuşmuştuk. Bu dersimiz de hemen basit bir arayüz tasarımı yaparak 2 sayıyı toplayacağız. Toplama işlemini yapabilmek için bize görsel tool olarak 2 tane editText , 1 tane button ve 1 tane de textView gerekli. Peki nedir bu EditText,Button ve TextView? Android içerisinde bulunan tasarım araçları; kullanıcı etkileşimi için geliştirilmiş araçlar olarak tanımlanabilirler. EditText uygulama içerisinde kullanıcıdan veri almak için kullandığımız bir araçtır. Kullanıcıdan istediğimiz veri tiplerinde veri alabiliriz.

Android sisteminde yani Java içerisinde temel 8 veri tipi bulunmaktadır.

Tam Sayılar Reel Sayılar Karakterler Mantıksal Değerler
byte float char boolean
short double
integer
long

EditText ile bu veri tiplerini bazı dönüşüm fonksiyonları kullanarak almak mümkündür. Biz bu örneğimizde  int(integer) veri tipi kullanacağız. Button diye bahsettiğimiz tasarım aracı ise adından da anlaşılacağı gibi bir buttondur ve tıklama özelliğine sahiptir. Bir işlem yaptıracağız ve bu işlemin bir buttona tıklanarak yapılmasını istiyorsak bunu kullanabiliriz. Örneğin bir uygulamaya giriş yapacaksınız diyelim. Bu uygulamaya girerken kullanıcı adımız ve şifremiz gereklidir. Kullanıcı adımızı ve şifremizi az önce bahsettiğimiz editText’ler içerisine yazdık. Sonra ise giriş yap buttonuna tıklıyoruz. Button dediğimiz design tool da bu kadar basit. TextView demiştik textView’i toplama işlemimizin sonucunu yazdırmak için kullanacağız. TextView ekran üzerinde yazı yazmak için kullandığımız bir design tool‘dur ve kullanımı oldukça basit bir araçtır. Bu dersimizde yapacağımız uygulama için ön bilgileri aktardık, şimdi zaman kaybetmeden uygulamamızı kodlamaya başlayalım.

 

Android Studio üzerinde oluşturduğumuz projemizi açıyoruz. App dosyası içerisinde ki java klasöründe bulunan default isimli sınıfımız olan MainActivity(java)’yi açıyoruz. MainActivity’i açtığımız zaman default kodlar şu şekilde sizi karşılayacaktır;

 

package com.heryerdeyazilim.toplamaislemi;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

 

Bu kısım üzerinde biraz konuşmak gerektiğini düşünüyorum. Bir java dosyası öncelikle paket adı ile başlamaktadır. Ördüğünüz gibi kod içerisinde ilk satır projemizin paket adını içeriyor.Daha sonra sınıfa eklenen kütüphaneler import tag’ı kullanılarak sınıfa entegre edilmektedir. Daha sonra sınıf’ımız oluşturulmuş. Projeyi default bir tema seçerek oluşturduğumuz için ana sınıfımızın adı MainActivity olarak gelmiş durumda. public class MainActivity kısmını ele alalım. Java içerisinde ki değişkenlerin,fonksiyonların ve sınıfların belirli erişim tipleri(belirleyiciler) vardır. MainActivity sınıfımızda bu erişim tiplerinden birisi olan public ile başlatılmış.Peki nedir bu erişim tipleri, biraz da onlara bakalım.

Modifier(Niteleyici)
Class(Sınıf)
Package(Paket)
Subclass(altsınıf)
World
public(Genel-Halka açık)
Evet
Evet Evet Evet
protected(Korumalı)
Evet Evet Evet
Hayır
no modifier(Niteleyici Yok)-friendly
Evet Evet Hayır Hayır
private(Özel)
Evet Hayır Hayır Hayır

Bu tablo Java‘nın kendi sitesinde paylaşılmıştır. Tabloyu buraya aktarırken anlaşılması kolay olsun diye bazı eklemeler ve düzenlemeler yaptım.Şimdi biraz bu tabloyu inceleyelim.Tabloda public erişim belirleyicinin her yerden erişilebileceği söylenmiş. protected erişim belirleyici sınıf, paket ve altsınıflar tarafından erişilebilir. friendly yani bir erişim belirleyici kullanmadan yaptığımız tanımlamalar sınıf ve paket içerisinden erişilebilir. private ise sadece sınıf içerisinden erişilebilir olduğu belirtilmiş. Bu erişim belirleyiciler biz android geliştiriciler için çok önemli araçlardır. Erişim belirleyicileri burada temel olarak anlattık yer yer bu erişim belirleyicileri detaylı olarak aktaracağız.

Projemizin ana sınıfı public class MainActivity şeklinde belirtilmiş durumda. public erişim belirleyiciye sahip, sınıf olduğunu belirtmek içinde class tag‘ı kullanılmış ve ardından sınıf adı olan MainActivity yazılmış. MainActivity bir sınıf ve public bir sınıf’tır diye okuyoruz. extends AppCompatActivity kısmı önemli bir başlık ama başlangıç seviyesinde ki arkadaşlarımıza ağır geleceğini düşündüğüm için şuan bunu geçiyorum. Bu kısım nesne tabanlı programlamanın temellerinden birisidir ve android için çok önemli bir başlıktır.

Manifest dosyasını anlatırken, proje çalıştırıldığı zaman hangi sınıfın ilk çalıştırılacağından bahsetmiştik. Benzer şekilde sınıf başladığında hangi fonksiyonun ilk başlayacağını sistemin bilmesi gerekir ki proje çalışabilsin. onCreate fonksiyonu(method) sınıfımızın ana fonksiyonudur ve sınıf çalıştırıldığı zaman ilk bu fonksiyon çalışır ve içerisinde yazılan kodları adım adım işler. Bu kısımda da benzer şekilde ağır olabilecek kısımları atlayarak setContentView(R.layout.activity_main); kısmına geçiyorum.

setContentView(R.layout.activity_main);

bu kodumuz, sınıfın hangi layout(arayüz,form) ile başlayacağını belirttiğimiz kısımdır. Bu projemiz için MainActivity sınıfı çalıştırıldığında res->layout->activity_main layoutunu arayüz olarak önümüze getirecektir. setContentView fonksiyonu android içerisinde bulunur ve sınıfa ait layout‘u ayarlamak(belirtmek) için kullanılır.

Bu kısıma kadar projemizin ana sınıfı olan MainActivity üzerinde durduk. Şimdi layout tasarımımızı yapmaya başlayalım. res->layout->activity_main layout’umuzu açıyoruz. Layout’u açtığımızda bizi şu şekilde bir sayfa karşılayacaktır;

Projeyi oluştururken default tema‘ya sahip bir proje oluşturduğumuz için layout içerisinde bir klasik olan Hello World! yazısını göreceksiniz. Yukarı da bahsettiğimiz TextView kullanılarak Hello World! ekrana yazdırılmıştır. Şimdi bu layout tasarımına geçmeden design page üzerinde biraz konuşalım. Hemen layout ekranının sol kısmında yer alan Palette kısmını ele alarak başlayalım. Palette kısmı içerisinde android’in geliştirdiği design tool‘lar mevcut ve bu toollar da gruplandırmalar ile biz geliştiricilere sunulmakta. Bahsettiğimiz EditText,TextView,Button ve bir çok tool bu kısım içerisinde mevcut durumda. İstediğimiz tool‘u alarak sürükle bırak yöntemi ile layout içerisine atabiliriz. Palette kısmının hemen altında bulunan Component Tree(Bileşen Ağacı) kısmı ise, layout içerisinde bulunan tool’ları ve gruplamaları bize düzenli bir ağaç yapısında sunan bir yapıdır. Component Tree kısmında bir tool’u seçtiğimizde, örneğin textivew’i seçtiğimiz ekranın sağ kısmında Attributes veya Properties adlı bir pencere açılacaktır. Attributes veya Properties dememizin sebebi Androi Studio sürümüne göre bu isim değişiklik gösteriyor. Attributes veya Properties kısmı içerisinde seçilen tool(araç)’un özel ayarlarını bulabilirsiniz. Bu kısmı incelediğinizde bir çok özellikle ile karşılaşacaksınız. Buraya kadar anlattığımız design sayfasıydı. Bu design sayfası bize sürükle bırak yöntemi ile tasarım yapmamızı sağlıyor. Bir diğer seçeneğimiz ise kodlama ile tasarım yapmak. Bu kısımlar arasında geçiş yukarıda ki ekranda bulunan Component Tree kısmının hemen altında ki Design | Text. Hemen Text kısmını seçerek diğer ekrana geçiş yapıyoruz. Text sayfamız da aşağıda ki gibi oluyor;

 

Ekranda gördüğünüz gibi tasarımı yapılan layout’un xml ile kodlanmış hali. Biz istediğimiz taktirde hem sürükle bırak ile hem de xml ile kodlama yaparak layout tasarımlarımızı yapabiliriz. Layout tasarlama hakkında temel bilgileri verdikten sonra projemizi kodlama başlıyoruz. Benim tasarım tercihim sürükle bırak yöntemi. Siz de şuan için böyle başlarsanız sisteme alışmanız daha kolay olur diye düşünüyorum.

Sürükle bırak sayfasına gelerek Palette kısmında bulunan LinearLayout(Vertical)‘u alarak sayfamın tam ortasına bırakıyorum. Daha sonra palette içerisinde bulunan editText‘ten iki tane alarak onlarıda LinearLayout içerisine bırakıyorum. Daha sonra palette içerisinde bir button ve bir textView alarak benzer şekilde LinearLayout içerisine bırakıyorum. Yapmış olduğumuz tasarım şu şekilde olacak;

 

 

Yaptığım tasarım içerisinde editText’in Attributes kısmında bulunan id değişkenini edtSayi1, text değişkenini ise Sayı 1 olarak ayarlıyorum. Bunu diğer editText içinde yapıyorum. Benzer şekilde button‘un Name kısmına da Topla diyorum ve id‘sini de btnTopla yapıyorum. Bir diğer tool’um olan textView’inde benzer şekild id‘sini txtSonuc Name‘ini de Sonuç olarak ayarlıyorum. Yaptığımız tasarımın xml kodları da şu şekilde olacak;

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/edtSayi1"
            android:layout_width="320dp"
            android:layout_height="48dp"
            android:layout_marginEnd="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginStart="8dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Sayı 1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:layout_editor_absoluteY="5dp" />

        <EditText
            android:id="@+id/edtSayi2"
            android:layout_width="320dp"
            android:layout_height="48dp"
            android:layout_marginEnd="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginStart="8dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Sayı 2"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:layout_editor_absoluteY="5dp" />

        <Button
            android:id="@+id/btnTopla"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Topla" />

        <TextView
            android:id="@+id/txtSonuc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sonuç"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.438"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.384" />

    </LinearLayout>



</android.support.constraint.ConstraintLayout>

Yaptığımız tasarımın xml kodu yukarıdaki gibi olacaktır.Şimdi java tarafında geçerek istediğimiz toplama işlemini yapmaya başlayalım. Sınıfımızın hemen altında ana fonksiyonumuzun hemen üst kısmında değişkenlerimizi tanımlamaya başlıyoruz. Java nesne tabanlı bir programla dili olduğu için android.widget kütüphanesi içerisinde bulunan button,edittext,textview dosyaları sınıfımıza eklememiz gerekli. Eklenen kütüphanler paket adından sonra import tag‘ı kullanılarak satır satır listelenir. Bu işlem nesneleri tanımlarken otomatik olarak yapılmakta.

package com.heryerdeyazilim.toplamaislemi;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {


    EditText edtSayi1,edtSayi2;
    Button btnTopla;
    TextView txtSonuc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
    }
}

Tanımlamaları yaptığımızda sınıfımız şu şekilde olacak. Burada tanımladığımız nesneler(edtSayi1,edtSayi2,btnTopla,btnTopla) sınıf içerisinde tanımlanmış nesnelerdir. Bunları layout içerisindeki nesneler ile eşleştirmemiz gereklidir. Bunu şu şekilde yapacağız;

edtSayi1=(EditText)findViewById(R.id.edtSayi1);

burada gördüğünüz gibi edtSayi1 değişkenine(nesne) bir satır kodu eşittir işareti(=) ile atamışız. Peki geriye kalan satır ne iş yapıyor? findViewById fonksiyonu belirtilen id‘ye sahip xml nesnesinin sınıf içerisinde java nesnesinin oluşturulmasını sağlar. Bu aşamada findViewById fonksiyonun başında parantez içerisinde oluşturulacak xml nesnesinin tipini belirtiyoruz. Daha sonra ise findViewById (R.id.edtSayi1); diyoruz, burada R.id.edtSayi1, R(kaynaklar) dosyasında bulunan id‘si edtSayi1 olan değişken anlamı taşımaktadır. Hemen bütün java nesnelerimiz ile xml nesnelerimizi eşleştirelim.

public class MainActivity extends AppCompatActivity {


    EditText edtSayi1,edtSayi2;
    Button btnTopla;
    TextView txtSonuc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edtSayi1=(EditText)findViewById(R.id.edtSayi1);
        edtSayi2=(EditText)findViewById(R.id.edtSayi2);
        btnTopla=(Button)findViewById(R.id.btnTopla);
        txtSonuc=(TextView)findViewById(R.id.txtSonuc);
    }
}

Bu tanımlamaları yaptıktan sonra xml içerisindeki nesnelere java sınıfımız içerisinde oluşturduğumuz nesneler üzerinden ulaşabileceğiz.Şimdi sırada button’a tıkladığımızda yapılmasını istediğimiz işlemleri yazacağız. Önce button’a tıklama fonksiyonunu yazalım. Bunun için bir alt satıra inerek btnTopla.setOnClickListener(); yazıyoruz. Bu işlemin ardından setOnClickListener() fonksiyonun içerisine girerek CTRL+Space e basarak new  ekliyoruz, boşluk ekleyerek terkrar CTRL+Space diyoruz ve bu sefer View.OnClickListener diyoruz. Bu işlemlerin ardından kodlarımız şu şekilde olacaktır.

public class MainActivity extends AppCompatActivity {


    EditText edtSayi1,edtSayi2;
    Button btnTopla;
    TextView txtSonuc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edtSayi1=(EditText)findViewById(R.id.edtSayi1);
        edtSayi2=(EditText)findViewById(R.id.edtSayi2);
        btnTopla=(Button)findViewById(R.id.btnTopla);
        txtSonuc=(TextView)findViewById(R.id.txtSonuc);

        btnTopla.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }
}

 

Burada yaptığımız işlem, button‘a tıklandığında ne yapmak istiyorsak o işlem için yazacağımız kodların bulunacağı kısımdır. Şimdi hemen edtSayi1 ve edtSayi2 nesneleri içerisine yazılan sayıları(değerleri) integer(int) olarak alalım. EditText üzerinden veri alacağız bunun  için

edtSayi1.getText().toString();

yöntemini kullanıyoruz. Bu yöntem ile istenilen editText üzerinden değer(value) alınabilir. Ancak biz alacağımız değerlerin tipini integer istiyoruz. Bunun içinde bir yöntem daha kullanmamız gerekli.

Integer.parseInt();

Yöntemi içerisine eklenen nesnenin değerini int(Integer)‘e çeviren bir fonksiyondur.Bu iki yöntemi birleştirerek şu yöntemi elde ediyoruz;

Integer.parseInt(edtSayi1.getText().toString());

Alacağımız sayı1 ve sayı2 için birer tane int değişken oluşturuyoruz. Ve bu değişkenlere yukarıda oluşturduğumuz yöntemi atıyoruz. Bu işlem sonucunda button‘a tıklandığı zaman sayı1 değişkeninin içerisine edtSayi1 içerisine yazılan değerin int hali atanmış olacaktır. Bu iki editText için bu yöntemleri yazdığımda sınıfım şu hale geliyor;

public class MainActivity extends AppCompatActivity {


    EditText edtSayi1,edtSayi2;
    Button btnTopla;
    TextView txtSonuc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edtSayi1=(EditText)findViewById(R.id.edtSayi1);
        edtSayi2=(EditText)findViewById(R.id.edtSayi2);
        btnTopla=(Button)findViewById(R.id.btnTopla);
        txtSonuc=(TextView)findViewById(R.id.txtSonuc);

        btnTopla.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int sayi1=Integer.parseInt(edtSayi1.getText().toString());
                int sayi2=Integer.parseInt(edtSayi2.getText().toString());
            }
        });
    }
}

Artık sona yaklaştık arkadaşlar. Şimdi sayi1 ve sayi2 değişkenlerini sonuc adından bir int değişken oluşturup ona atayalım.

int sonuc=sayi1+sayi2;

Oluşturduğumuz int sonuc değişkenine sayi1+sayi2 değerini atıyoruz. Artık son adım olarak tanımladığımı textView’e sonucumuzu yazdıralım.Bu işlem içinde setText method’unu kullanıyoruz.Bu şekilde direk içerisine sonuc değişkenini atarsak derleyici bize hata verecektir. Çünkü TextView içerisine yazacağımız değişkenin String bir değeri olması gerekir, bunun içinde String.valueOf() fonksiyonunu kullanarak sonuc değişkenini textView yazarken değeri String haline getiriyoruz.

txtSonuc.setText(String.valueOf(sonuc));

setText fonksiyonunu da sınıfımıza eklediğimizde sınıfımız şu hale geliyor.

public class MainActivity extends AppCompatActivity {


    EditText edtSayi1,edtSayi2;
    Button btnTopla;
    TextView txtSonuc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edtSayi1=(EditText)findViewById(R.id.edtSayi1);
        edtSayi2=(EditText)findViewById(R.id.edtSayi2);
        btnTopla=(Button)findViewById(R.id.btnTopla);
        txtSonuc=(TextView)findViewById(R.id.txtSonuc);

        btnTopla.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int sayi1=Integer.parseInt(edtSayi1.getText().toString());
                int sayi2=Integer.parseInt(edtSayi2.getText().toString());
                int sonuc=sayi1+sayi2;
                txtSonuc.setText(String.valueOf(sonuc));
            }
        });
    }
}

Şimdi sıra geldi uygulamamızı çalıştırmaya. Uygulamamızı istersek emulatorde istersekte kendi android cihazımızda çalıştırabiliriz. Emulator kullanımı ve gerçek cihaz kullanımı içinde ayrıca bir yazı yazacağız. Telefonumuzu veya emulatorumuzu açtıysak Shift+F10 tıklayarak Select Deployment Target(Yüklenecek Cihaz Seçimi) sayfasından cihazımızı seçerek yüklemeyi tamamlıyoruz.

Bu dersimizde tasarım sayfasından, java sınıfından, nesnelerden, veri tiplerinden, erişim belirleyicilerden bahsederek bir toplama uygulaması geliştirdik. Bezer şekilde bu dersin sonrasında sizlerde toplama,çıkarma,çarpma ve bölme örneklerini de rahatlıkla yapabilirsiniz.

Bu yazımızı burada sonlandırıyoruz. Dersler hakkında önerilerinizi ve sorularınızı yorum bırakabilirsiniz.Bir dahaki dersimizdee görüşmek üzere.

Android Studio İle Adım Adım Mobil Programlama | 3

Giriş Yap

Hoşgeldin
Don't have an account?
Kayıt Ol

Şifreni Yenile

Back to
Giriş Yap

Kayıt Ol

Ekimize Katılmaya Hazırmısın

Back to
Giriş Yap
Choose A Format
Personality quiz
Series of questions that intends to reveal something about the personality
Trivia quiz
Series of questions with right and wrong answers that intends to check knowledge
Poll
Voting to make decisions or determine opinions
Story
Formatted Text with Embeds and Visuals