Android Programlama Dersleri (1,2,3,4,5,6,7,8,9,10)

İsimli konu WH 'Android' kategorisinde, YλяCλη üyesi tarafından 25 Aralık 2016 tarihinde yazılmıştır. Android Programlama Dersleri (1,2,3,4,5,6,7,8,9,10) hakkında bilgi ve tartışmalar.

  1. YλяCλη

    YλяCλη Yönetici

    Kod:
    btnOk.setOnClickListener(this);
    btnCancel.setOnClickListener(this);
    Android Programlamaya Giriş Ders 1: SDK Kurulumu ve Ayarları


    [​IMG]
    Android programlamaya başlamak isteyenler için derslerimizin ilkiyle karşınızdayız. Bu dersler sayesinde siz de Android programlamayı kolayca öğrenebileceksiniz!


    Giriş dersimizde Android uygulamaları geliştirmek için ihtiyacınız olan SDK’yı kurmayı, ayarlamayı ve gereken eklentileri (Plug-in) kurmayı öğreneceksiniz. Android SDK, Software Development Kit şeklinde açılan ve Android Yazılım Geliştirme Kiti olarak Türkçeleştirebileceğimiz araçlar paketidir. Bu derslerimiz başlıktan da anlayacağınız üzere yeni başlayan kullanıcılar gözetilerek hazırlanmıştır.

    Önce sizlere Android hakkında kısa bilgiler vereceğiz. Sonra Android programlama ortamı (SDK, açıklamasını farklı şekillerde yaptık) indireceğiz ve bilgisayarda gereken ayarları yapacağız. Bu dersinin sonunda Android SDK Manager ,Eclipse ve ADT nedir ve nasıl kurulmalıdır, hangi plug-in’lerin indirilmesi ve nasıl ayarlanması gerekiyor işte bunları öğreneceğiz. Haydi başlayalım…

    Android İşletim Sistemi

    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.(Wikipedia)

    Programları yazmak için programlama ortamı gerekiyor.Bunun için Google Android için EclipseA

    programlama ortamı tavsiye ediyor. Eclipse ile beraber ADT (Android Development Tools) plugin’i kullanacağız.(Plug-in).

    1. Java SDK – JDK

    Android’in programlama dili Java’dır. Java için JDK (Java Development Kit) yüklememiz gerekiyor. Onu buradan indireceğiz indir.

    [​IMG]

    Lisansı kabul ederiz ve aşağıdan size olan işletim sistemi için JDK seçeceğiz.

    2. Android SDK

    Android SDK (Software Development Kit). Android projelerimiz daha rahat geliştirmek için SDK kullanacağız.Onu buradan indireceğiz link

    Basacağız ve karşımıza böyle bir pencere gelecek:

    [​IMG]

    Buradan installer_r21 seçeriz.

    3. Eclipse

    Programları yazmak için çok güzel bir ortamdır. Projelerimizi yaratırken onu kullanacağız. Buradan indirebilirsiniz link

    [​IMG]



    [​IMG]

    Eclipse indirdikten sonra Eclipse arşiv dosyasında bulunuyor. Onu unzip yaptıktan sonra hemen çalıştırabiliriz.

    4.ADT

    Eclipse’i daha verimli kullanmak için ADT (Android Developm ent Tools) plugini kullanmamız gerekir.

    Eclipse’i çalıştıralım (<Android>\eclipse\eclipse.exe) ilk açılışta karşımıza böyle bir pencere gelecek.

    [​IMG]



    Burada bizim çalışma ortamımızın nerede olacağını seçmemiz gerekiyor.

    Tamam Eclipse çalıştırdık şimdi ADT plug-in’i indireceğiz.

    Menüden Help > Install New Software… açıyoruz.

    [​IMG]



    Add butonuna basıyoruz

    [​IMG]

    Name kısmına ADT Plugin gireceğiz ve Location kısmına URL adresi: https://dl-ssl.google.com/android/eclipse/

    [​IMG]

    OK bastıktan sonra karşımıza Developer Tools gelmeli.

    [​IMG]

    Next bastıktan sonra hangi araçlar indirilmesi gereken listeyi gösterecek.

    [​IMG]

    Yine Next basıyoruz ve lisansı okuduktan sonra onu kabul ediyoruz.

    [​IMG]



    Ve Finish butona basıyoruz.

    [​IMG]

    İndirme başlıyor. Eğer karşımıza Security warning çıkıyorsa ‘The authenticity or validity of the software can’t be established’ bu yazılımın kaynağı belirsizdir demek. Biz google’la güvendiğimiz için Ok basıyoruz. İndirdikten sonra Eclipse’i yeniden çalıştıracağız.

    [​IMG]

    Bitirdikten sonra. Eclipse’i yeniden başlatacağız. Eclipse – Restart Now

    [​IMG]

    Eğer 2. adımda SDK çalıştırmadıysanız karşınıza böyle bir pencere gelebilir. Eclipse bunu kendi yapabilir. Ve son sürümünü internetten indirebilir. Aynı anda 2.1 sürümünü tavsiye ediyor. Çünkü bu sürümü en çok tabletler ve cep telefonlar destekliyor. İkinci seçimde (Use existing SDKs) eğer biz SDK exe dosyayı yerine arşiv dosyayı indirdiysek onu unzip yaptıktan sonra bu dosyanın yerini gösterip kullanabiliriz.

    Eğer siz bu pencereyi yanlışlıkla kapattıysanız SDK’yi böyle seçebiliriz. Eclipse’te menüden Windows > Preferences

    [​IMG]

    Soldan Android’i seçtikten sonra Browse’a basıyoruz

    [​IMG]

    Buradan bizim daha önce unzip yaptığımız SDK dosyayı seçiyoruz(<Android>\android-sdk-windows).

    [​IMG]

    Ve Apply butonuna basıyoruz.

    [​IMG]

    Çıkan pencerede Google “İstatistiği göndermesini istiyor musunuz ?” soruyor.

    Seçimimizi yaptıktan sonra Finish’e basıyoruz.

    Sonra bize indirdiğimiz SDK bazı ayarların eksik olduğunu söylüyor. Onları SDK manager’i kullanarak indirebiliriz.

    [​IMG]

    5. Android Platformları

    SDK manager’a geçiyoruz.

    [​IMG]

    Burada SDK Manager neyi yükleyebileceğimiz gösteriyor. Sağa tarafta Status kolonda hangi ayarların yüklü olup olmadığını gösteriliyor. Mutlaka tools ayarları yüklememiz gerekiyor. Ve Extras dosyada Android Support Library’i seçiyoruz. İlk derslerimiz için 2.2 (API 8) и 2.3.3 (API 10) yeterlidir. İmkanınız varsa tüm ayarları seçebilirsiniz. Bu yaklaşık 1.5 GB’lık yer kaplayabilir. Ve bunların inmesi biraz zaman alacak.

    [​IMG]

    Tümü kabul ediyoruz (Accept All) ve indirmeyi başlatıyoruz. Bundan sonra Eclipse’i yeniden çalıştırıyoruz. Bu adımlardan sonra Android için projeler yazmaya başlayabiliriz. Sonraki derste AVD (Android Virtual Device) nasıl ayarlanması gerektiğini size göstereceğim.(AVD bir simülasyon ortamıdır. Bizim yazdığımız projeler telefonlarda veya tabletlerde nasıl çalışacaklarını göreceğiz)

    Android Programlamaya Giriş Ders 2: AVD Kurulumu ve ilk Projenin Çalıştırılması

    [​IMG]
    Bu derste Eclipse programlama ortamında AVD’yi (Android Virtual Device) kuracağız ve sonra ilk projemizi (Hello World) yapacağız.

    1.AVD (Android Virtual Device)

    Projelerimiz test (simülasyon) etmek için AVD (Android Virtual Device) kullanacağız. Onu kuralım:

    Eclipse’i açalım

    Menü Windows > Android Virtual Device Manager

    [​IMG]

    Veya daha hızlı ulaşabiliriz:

    [​IMG]

    Seçtikten sonra karşımıza böyle bir pencere gelecek:

    [​IMG]

    Burada New butonuna basacağız.

    [​IMG]

    Burada AVD ismini gireceğiz (AVD name).

    Aygıtı seçeriz (Device). Aygıtı seçtikten sonra Eclipse boş olan pencereleri kendi dolduruyor.

    Sadece SD kart 1000 MiB gireceğiz ve Snapshot’u işaretleyeceğiz Snapshot bizim AVD’i tekrar açtığımızda hız kazandıracak. Yani tekrar açıldığında AVD’yi daha hızlı açacak.

    [​IMG]

    Ok bastıktan sonra biraz beklememiz gerekecek.

    Sonra sağ alt kısmında bulunan Start düğmesine basacağız.

    [​IMG]

    Karşımıza Lunch Options penceresi gelecek. Bu pencerede bizim AVD için görüntü ayarlarını yapabiliriz.

    Mesela Scale display in real size için ben burada Screen Size 7 seçtim. Böylece AVD ekranda daha az yer kaplıyor. Siz büyüklüğü kendi monitörünüzün göre ayarlayabilirsiniz.

    [​IMG]

    Launch bastıktan sonra emülatörün penceresi gelecek.

    [​IMG]

    2.Proje( Hellow World)

    Şimdi ilk projemizi yapıp nasıl çalıştığını inceleyebiliriz.

    Eclipse’te menü seçelim File > New > Project

    [​IMG]

    Buradan projenin tipini seçeceğiz – Android > Android Application Project, ve Next’e basacağız

    [​IMG]

    Boş olan alanları dolduralım.

    Application Name – programın ismi. Bu ismi kullanıcılar programda görecekler.

    Project Name – projenin ismi. Bu ismi kullanıcılar görmeyecekler. Projenin ismi Eclipse’te sol tarafta gözükecek.

    Package Name – Java’dan gelen isimdir. Java’da class’ların prefix isimler için kullanılıyor. Biz tr.android.develop.<programın ismi> gibi bir isim kullanacağız.

    Minimum Required SDK – Android’in minimum kullanabileceğimiz platformu belirliyor.

    Target SDK – Android’in maksimum kullanabileceğimiz platformu belirliyor.

    Compile With – Programımız hangi Android platformunun özelliklerini kullanacağımızı gösteriyor.

    Theme – Bu özelliği kullanmadığımız için None seçeceğiz.

    [​IMG]

    Next basacağız.

    [​IMG]

    Create custom luncher icon – Projemiz için Android’in ikonunu otomatik olarak yaratacak.

    Create Activity – Proje yaratıktan sonra otomatik olarak Activity yaratılacak.

    Create Project in Workspace – Projemizi varsayılan yere kaydedecek.

    Next basıyoruz.

    [​IMG]

    Burada ikonları seçebiliriz. Ben varsayılan ikonu bırakıyorum ve Next butonuna basıyoruz.

    [​IMG]

    BlankActivity’yi seçiyoruz ve Next butona basıyoruz.

    [​IMG]

    Burada Layout Name olarak Main girelim.

    Finish butona bastıktan sonra ilk projemiz hazırdır.

    [​IMG]

    Sol tarafta projemizi görebiliriz. Şimdi en sık kullanılan klasörleri, dosyaları ve özellikleri inceleyelim.

    src – tüm yazacağımız kodlar bu klasörde bulunacak
    gen – bu klasörde programımız için gereken olan ve Eclipse tarafından yaratılan dosyaları kaydediyor.
    Android 4.2 – programımız için gereken olan kütüphaneler ve uygulamaları içeriyor.
    assets & res – farklı kaynaklar (resource)ve tipler (type) için klasörler ve dosyalar
    AndroidManifest.xml – manifest veya konfig-uygulama dosyası


    İlerde Eclipse programlama ortamı kullandığı zaman bu klasörleri ve dosyaları daha detaylı inceleyeceğiz.

    Şimdi soldan projelerimizin ismini seçelim. Ve Ctrl + F11 basalım. Sonra Android Application’ı seçelim.

    [​IMG]



    [​IMG]

    Ok butonuna basıyoruz. Bastıktan sonra emülatör açılacak. Emülatör açıldığı zaman bilgisayarda bir şey yapmayalım, çünkü AVD duyarlıdır.

    [​IMG]

    Karşımıza böyle bir pencere gelecektir. Demek ki programımız emulatöre kaydedildi ve düzgün çalışıyor. Eğer bir sıkıntı varsa emülatörü kapatabilir ve yeniden açabilirsiniz. Aynı problem varsa Eclipse’i yeniden çalıştırabilirsiniz. En kötü durumda bilgisayarı yeniden başlatmak zorunda kalabilirsiniz. En önemlisi Ctrl + F11 bastıktan sonra ve emülatör açıldığında bilgisayarda bir şey yapmamak. Türkçe harfleri kullanmasak daha iyi olur çünkü Eclipse programlama ortamı en düzgün İngilizce alfabesiyle çalışıyor.

    Android Programlamaya Giriş Ders 3: Ekranın Nesneleri ve Nesnelerin Özellikleri

    [​IMG]
    Bu derste Android uygulamalarında ekran nesnelerinin nasıl oluştuğunu inceleyeceğiz.

    1 – Etkileşim
    Windows işletim sistemi gibi Android uygulamaları da pencerelerden oluşuyor. Bu pencereler Etkileşim (Activity) olarak isimlendirilimekte. Belirli bir zaman zarfında bir Etkileşim devrededir ve ekranın tümünü kaplar. Uygulama, pencereler arasından sadece bir tanesini seçer. Örnek olarak posta uygulamasını alabiliriz. Bu uygulamada bir Etkileşim penceresi mektupların listesini içeriyor. Başka bir Etkileşim penceresi ise mektubun içeriğini gösteriyor. Üçüncüsü de ayarları gösterir.

    Etkileşim penceresinin içeriği farklı nesnelerden oluşuyor. Nesnelerin ismini View olarak görüyoruz. En sık kullanılan nesneler arasında buton, metin girme alanı ve onay kutusu gibi öğeler mevcut..

    [​IMG]

    View’lar bir grup içerisinde (ViewGroup) toplanabilirler. En sık rastlanan View Group, Layout‘tur. Layout farklı türlerde olabilir ve View’larin ekranda hangi pozisyonu alacağını belirler (mesela ortada, solda,aşağıda).

    2 – Proje ( Activity ve main.xml)

    Şimdi yeni öğrendiğiklerimiz daha ayrıntılı inceleyelim. İlk önce yeni bir proje açalım Mesela aşağıdaki gibi bir proje yapabilirsiniz.

    • Project name / Proje adı: VitioksApp
    • Build Target / Hedef sürüm: Android 4.2
    • Application name / Uygulama adı: VitioksApp
    • Package name / Paket adı: tr.example.vitokapp
    • Create Activity / Etkileşim Adı: activity_main
    Projemizde bizi ilgilendiren res > layout > activity_main.xml

    [​IMG]



    Layout penceresi – Burada kullanacağımız View’ların (nesnelerimiz) nerede olacaklarını belirleyebiliriz ve ekranda hangi nesnelerin olacağını seçebiliriz. Uygulamayı açtığımızda Activity bu dosyayı (main.xml) okuyor ve daha önce yaptığımız ayarları gösteriyor. Bu dosyayı açalım ve hangi varsayılan View’ların mevcut olup olmadıklarına bakalım.

    [​IMG]

    Solda gruplara bölünen View listesini görüyoruz. Burada projenizde tüm uygulanabilen View-elementlerini seçebilirsiniz.

    View’un görünümünü de değiştirebilirsiniz:

    [​IMG]

    Beyaz ekrana bakalım. Burada “Hello World” satırını görüyorsunuz. Hangi View’un olduğunu öğrenmek için bu satıra tıklayalım.

    [​IMG]

    Sağda Outline sekmesinde activity_main.xml dosyasında tüm var olan elementleri görebiliriz.

    [​IMG]

    Seçtiğimiz “Hello wolrd” satırı TextView’e ait. TextView RelativeLayout’un alt kısmında yer alıyor. RelativeLayout daha önce gördüğümüz ViewGroup’tur. Şimdi birkaç yeni element ekleyelim. Bu elementler Button ve CheckBox olsunlar. Elementi eklemek için soldan elementi seçip beyaz ekrana taşımak gerekiyor. Veya RelativeLayout’ta Outline sekmesine taşıyabilirsiniz. Text Fields grubundan Plain Text isimli bir nesne daha seçelim. Outline sekmesinde button1, checkBox1 ve editText1 isimli ViewGroup’ları görebilirsiniz. Bu isimler ID’dir ve otomatik olarak verilir.

    Şimdilik onları bırakalım, gelecekte onlarla daha dikkatli ilgileneceğiz. Şimdi beyaz ekranımızda birkaç tane element mevcut. Bunların üzerindeki yazıları değiştirelim. Outline sekmesinde TextView’e basalım. Şimdi bize gerekli olan Properties isimli sekme. Outline sekmesinin aşağısında bu sekmeyi bulabilirsiniz. Properties sekmesinden Text özelliği bulalım. Orada etkileşim penceresine yerleştirdiğimiz metin kutusu için sabit bir bir link vardır. Bu sabit isimlerin nerede belirleyeceğimizi gelecek derslerde öğreneceğiz. Şimdi buraya bir şey yazalım:

    [​IMG]

    Aynı şekilde button1, checkBox1 ve editText1 için de yapalım. Tüm değişiklikler activity_main.xml dosyasına kaydedilmektedir. Şimdi dosyayı kaydedelim (CTRL+SHIFT+S) ve emülatörü çalıştıralım (CTRL+F11).

    Uygulama bize MainActivity penceresini gösteriyor. MainActivity, bilgileri activity_main.xml’den okuyor ve View’lar XML’den çektiği bilgiyi kullanıcıya gösteriyor.

    [​IMG]

    Bu derste Android application ekranında nelerin mevcut olduğunu öğrendik. Layout’un oluşması ve Layout’ta View’ların eklenmesi öğrendiğimiz başka bir yenilik. View’ların özelliklerinin ayarlanması ve değişebilmesi ise öğrendiğimiz üçüncü bir yenilik.

    Android Programlama Ders 4: Layout-dosya, XML Kodlama ve Ekranın Pozisyonu

    [​IMG]
    Bu derste Android etkileşim içinde layout-dosya oluşturmayı öğreneceğiz.Sonra XML kodları inceleyeceğiz ve ekranın pozisyonunun nasıl ayarlanması gerektiğini öğreneceğiz…

    1 – Etkileşim içinde Layout – dosya oluşturma
    Geçen derste etkileşimin ( Activity) ne olduğunu öğrendik. Etkileşim, layout dosyayı okuyor ve layout’un içindekilerini yansıtıyor. Bu derste etkileşimin hangi layout’u çalıştırması gerektiğini nereden anladığını da göreceğiz.

    Şimdi yeni projeyi açalım:

    • Project name: P004-LayoutFiles
    • Build Target: Android 4.2
    • Application name: LayoutFiles
    • Package name: tr.androidApp.LayoutFiles
    • Create Activity: MainActivity
    Proje geliştirdiğimiz zaman etkileşim için bir java – klas açılıyor.

    Proje açıldığında ve etkileşim çalıştığı zaman uygulama bu klasın metodunu çağıracak. Bu metodları (Fonksiyonları) kodlayarak etkileşimin davranışını değiştirebiliriz.

    Projeyi yaratırken ve etkileşimi belirlendiği zaman ona MainActivity ismi veriyorduk.

    [​IMG]

    MainActivity yaratıldığı zaman Eclipse aynı zamanda bir java klas yaratıyor. Şimdi bu klası inceleyelim:src/ tr.androidApp.LayoutFiles /MainActivity.java

    [​IMG]

    MainActivity’yi çift tıklandığında karşımıza böyle bir pencere gelecek:

    [​IMG]Java klasımızda onCreate metod otomatik olarak oluşuyor.Uygulama etkileşimi oluşturup gösterdiği zaman onCreate metodu çalıştırıyor, onCreateOptionsMenu sonra ilgileneceğiz.Şimdi bizim için önemli olan:setContentView(R.layout.main) setContentView metodun amacı layout dosyasından var olan bilgileri etkileşim pencereye yerleştirmek. Etkileşimi oluşturduktan sonra Eclipse bize otomatik olarak java-klası yaratıyor. İlerde biz bu klasları kendimiz yaratmayı da öğreneceğiz. Bu klasa bakalım. Bu dosyayı açacağız: src/tr.AndroidApp.LayoutFiles/MainActivity.java

    Adres olarak program dosyanın ID’sini kullanıyor. Bu ID’lerin dosya yolu şu şekilde: gen/ tr.androidApp.LayoutFiles /R.java veprogram bu yolu otomatik olarak yaratıyor.

    [​IMG]

    Bu dosyayı açabilirsiniz ama değişiklik yapmanızı şimdilik tavsiye etmiyorum. Proje R klasta tüm ID’leri tutuyor. Res/layout/main.xml dosyasını açalım ve orada nelerin var olduğuna bakalım

    [​IMG]

    Uygulamayı çalıştıralım (CTRL+F11).

    [​IMG]

    Etkileşim main.xml dosyanın içeriğini yansıttı. Şimdi başka bir dosyanın içeriğini yansıtmayı deneyelim. Bunu yapmak için yeni bir layout dosya yaratacağız. Mesela myscreen.xml. res/layout dosyasını seçelim ve “yeni dosya yarat” tuşuna basalım.

    [​IMG]

    Karşımıza böyle bir pencere gelecektir:

    [​IMG]

    File: seçiminde myscreen.xml ismini girdikten sonra Finish butonuna basacağız.

    [​IMG]

    Bu dosyayı açalım ve Properties’i kullanarak TextView’u ekleyelim. Mesela “Bu ekranın özellikleri main.xml değil myscreen.xml dosyada belirleniyor”.

    [​IMG]

    Aynı anda Eclipse bize hata oluştuğunu bildirecektir.

    [​IMG]

    [I18N] Hardcoded string “…”, should use @string resource. Şimdilik bu hatayı dikkate almayalım. Sonraki derslerde onun nasıl çözüleceğini de öğreneceğiz. R.java dosyasında değişikliklerin oluşması için mutlaka projeyi kaydedelim: CTRL+ SHIFT+S. Şimdi etkileşimi öyle ayarlayalım ki layout main.xml’i kullanmasın. Fakat onun yerine yeni myscreen.xml layout’u kullansın. MainActivity.java dosyasını açalım ve SetContentView satırını değiştirelim. R.layout.main yerine R.layout.myscreen değerini gireceğiz.

    [​IMG]

    Değişiklikleri kaydedelim ve uygulamayı çalıştıralım.

    [​IMG]

    Ekranda görüyoruz ki etkileşim bizim yeni myscreen.xml dosyadan bilgi okumuş.

    2 – Layout – dosya XML şeklinde

    Main.xml açıldığında onu bir görsel olarak karşınızda görüyorsunuz. Yani ekranda ise Main.xml’ın nasıl görüneceğini gösteriliyor. Aşağıda iki tane düğüme görebilirsiniz: Graphical Layout ve main.xml. Şimdi main.xml’i açalım.

    [​IMG]

    Burada xml isimleri View elementlerin klaslarıdır, tırnak işareti içerisinde olan uzantılar ise bizim Properties sekmede değiştirdiğimiz View’lerın özellikleridir. Properties sekmede yaptığımız değişiklikleri burada da yapabiliriz. Mesela TextView içeriği değiştirelim. Örnekte “yeni text” yazdık.

    [​IMG]

    Kaydedelim ve Graphical Layout’a açalım.

    [​IMG]

    Genelde Android kitapları yazanlar, layout dosyanın içeriğini xml formatta veriyorlar. XML parçaları kopyalayıp yapıştırabiliriz. Bu bize zaman tasarrufu sağlayacaktır.

    3 – Layout – dosyanın ekranın pozisyon değişiminde davranışı

    Layout dosya ekranın pozisyonu otomatik olarak dikey olarak sayıyor. Mesela tableti yatay pozisyonuna getirdiğimiz zaman ne olacak? Deneyelim.

    Myscreen.xml’i değiştirelim. Yeni dört tane butonu ve bir yazı ekleyelim.

    Xml kodunu projenize kopyalayabilirsiniz.

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>

    <LİNEARLAYOUT

    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”

    ANDROİD:ORİENTATİON=”VERTİCAL”

    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”

    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”>

    <TEXTVİEW

    ANDROİD:İD=”@+İD/TEXTVİEW1″

    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”

    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”

    ANDROİD:TEXT=”EKRANDA DİKEY POZİSYON”>

    </TEXTVİEW>

    <LİNEARLAYOUT

    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”

    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”

    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″

    ANDROİD:ORİENTATİON=”VERTİCAL”>

    <BUTTON

    ANDROİD:İD=”@+İD/BUTTON1″

    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”

    ANDROİD:LAYOUT_HEİGHT=”116DP”

    ANDROİD:TEXT=”BUTTON1″ >

    </BUTTON>

    <BUTTON

    ANDROİD:İD=”@+İD/BUTTON2″

    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”

    ANDROİD:LAYOUT_HEİGHT=”118DP”

    ANDROİD:TEXT=”BUTTON2″ >

    </BUTTON>

    <BUTTON

    ANDROİD:İD=”@+İD/BUTTON3″

    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”

    ANDROİD:LAYOUT_HEİGHT=”122DP”

    ANDROİD:TEXT=”BUTTON3″ >

    </BUTTON>

    <BUTTON

    ANDROİD:İD=”@+İD/BUTTON4″

    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”

    ANDROİD:LAYOUT_HEİGHT=”126DP”

    ANDROİD:TEXT=”BUTTON4″ >

    </BUTTON>

    </LİNEARLAYOUT>

    </LİNEARLAYOUT>

    Projeyi çalıştıralım. Gördüğümüz gibi dikey pozisyonunda tüm butonlar normal görünüyor.

    [​IMG]

    Şimdi emülatorde Ctrl+F12 basalım. Ekranın pozisyonu yatay şeklini aldı ve bizim dördüncü butonumuz ekrana sığmıyor.

    [​IMG]

    Bu problemi çözmek için bir tane layoutu daha ekleceğiz. Bu layout bizim butonları yatay pozisyonuna yerleştirecek. Etkileşimsiz dikey pozisyonda dikey layoutu kullanacak ve yatay pozisyonda yatay layoutu kullanacak. İlk önce yeni bir klasör oluşturalım res/layout-land ve onun içinde myscreen.xml dosyayı. Bu dosyayı yatay pozisyonda kullanacağız.

    Klasör oluşturmak için res klasöre farenin sağ düğmesine basıyoruz(res, New > Folder, Folder name = layout-land).

    [​IMG]

    Sonra yeni bir xml dosya oluşturacağız (layout-land, New > Android XML File, File name = myscreen.xml) ve Finish butonuna basıyoruz.

    Aşağıdaki kodu yeni myscreen.xml dosyaya kopyalayınız.

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>

    <LİNEARLAYOUT

    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”

    ANDROİD:ORİENTATİON=”VERTİCAL”

    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”

    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”>

    <TEXTVİEW

    ANDROİD:İD=”@+İD/TEXTVİEW1″

    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”

    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”

    ANDROİD:TEXT=”EKRANDA YATAY POZİSYON”>

    </TEXTVİEW>

    <LİNEARLAYOUT

    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”

    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”

    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″

    ANDROİD:ORİENTATİON=”HORİZONTAL”>

    <BUTTON

    ANDROİD:TEXT=”BUTTON1″

    ANDROİD:İD=”@+İD/BUTTON1″

    ANDROİD:LAYOUT_HEİGHT=”100DP”

    ANDROİD:LAYOUT_WİDTH=”100DP”>

    </BUTTON>

    <BUTTON

    ANDROİD:TEXT=”BUTTON2″

    ANDROİD:İD=”@+İD/BUTTON2″

    ANDROİD:LAYOUT_HEİGHT=”100DP”

    ANDROİD:LAYOUT_WİDTH=”100DP”>

    </BUTTON>

    <BUTTON

    ANDROİD:TEXT=”BUTTON3″

    ANDROİD:İD=”@+İD/BUTTON3″

    ANDROİD:LAYOUT_HEİGHT=”100DP”

    ANDROİD:LAYOUT_WİDTH=”100DP”>

    </BUTTON>

    <BUTTON

    ANDROİD:TEXT=”BUTTON4″

    ANDROİD:İD=”@+İD/BUTTON4″

    ANDROİD:LAYOUT_HEİGHT=”100DP”

    ANDROİD:LAYOUT_WİDTH=”100DP”>

    </BUTTON>

    </LİNEARLAYOUT>

    </LİNEARLAYOUT>

    Uygulamayı çalıştıralım Ctrl+F11

    [​IMG]

    Gördüğünüz gibi kodumuz başarıyla çalışarak yeni layout’ta, butonları ekrana sığdırarak düzgün bir şekilde görüntüledi.

    Bu derste etkileşim içinde layout-dosya oluşturmayı ve Eclipse’te XML kodları gördük. Sonra ekranın pozisyon nasıl değiştirmesi gerektiğini öğrendik.

    Android Programlama Ders 5: Layout Çeşitleri


    [​IMG]
    Bu derste Layout’ların çeşitlerini öğreneceğiz. Ardından ViewGroup(Layout) ve en sık kullanılanLayout’larla dersimize devam edeceğiz…

    Layout Çeşitleri:
    LinearLayout – View, eğer nesne yatay pozisyonda ise nesneleri bir satır olarak gösterir. Eğer nesne dikey pozisyonda ise nesneleri bir sütün olarak gösterir.

    TableLayout – Nesneleri tablo şeklinde yani sütün ve satır olarak gösterir.

    RelativeLayout – Her nesnenin pozisyonunu başka nesnelerin pozisyonlarına göre ayarlar.

    AbsoluteLayout – X ve Y olarak belirlenen koordinatlarda, her nesne için mutlak bir pozisyon belirler.

    1 – LinearLayout (LL)

    Bu Layout yeni uygulama yarattığı zaman onu varsayılan olarak kullanır. Çünkü esnektir ve kullanımı rahattır. LL Orientation özelliğine sahiptir. Orientation View, nesnelerin ekranda hangi pozisyonu (Dikey ya da yatay) alacağını belirler.

    Basit bir örnekte bu özelliklere detaylı bir şekilde bakalım.

    Proje Örneği:

    Yeni bir proje açalım.

    • Project name: P005_Layouts
    • Build Target: Android 4.2
    • Application name: Layouts
    • Package name: tr.androidApp.Layouts
    • Create Activity: MainActivity
    Main.xml dosyayı açalım ve aşağıdaki kodu kopyalayalım:

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <LİNEARLAYOUT
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    XMLNS:TOOLS=”HTTP://SCHEMAS.ANDROİD.COM/TOOLS”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”VERTİCAL”>
    </LİNEARLAYOUT>


    Şimdi ana nesneler dikey pozisyondadırlar.

    Sol taraftan LinearLayout’tan beyaz ekrana üç tane butonu taşıyalım.

    [​IMG]

    Şimdi Properties menüsünden LL özelliği değiştirelim. Orientation – horizontal (Yatay) seçiyoruz ve kaydediyoruz (CTRL+SHIFT+S). Şimdi butonlar yatay pozisyona yerleştirdiler.

    [​IMG]

    GroupView’leri birbirine yerleştirebiliriz. LL içine iki tane yeni LL yerleştirelim. Main.xml dosyada üç tane butonu silelim. Ana LL dikey (vertical) olacak ve iki yeni LL yatay (Horizontal) olacak. Sol taraftan Layout sekmesine tıklayacağız ve LinearLayout (Horizontal) seçip Outline sekmeye taşıyacağız. İsterseniz bunun yerine direkt beyaz ekrana da taşıyabilirsiniz. Her yatay LL’ye üç tane buton ekliyoruz.

    [​IMG]

    2 – TableLayout (TL)

    TL TableRow (TR) satırlarından oluşur. Her TR View nesnelerden oluşur. View nesnelerinin sayısı sütünlerin sayısını oluşturur. Sütünlerin sayısının her satırda aynı olması gerekiyor. Eğer sütün içinde View nesnelerinin sayısı farklıysa, kalan sütunlar en büyük sayıya göre düzenleniyor.

    Tlayout.xml isimli yeni bir layout-dosya açalım. İçinde ana TableLayout olsun.

    [​IMG]

    Ana TableLayout’a üç tane yeni TableRow satırı ekleyelim. Soldan Layouts sekmesinden seçiyoruz. Ve her TableRow’a iki tane buton ekleyelim. Sonuç: Tablomuz üç satırdan ve iki sütundan oluşuyor.

    [​IMG]

    İlk satıra birkaç tane buton daha ekleyelim. Bundan sonra bütün satırlar için sütun sayısı aynıdır ve 4’e eşittir. Bunun nedeni sütun sayısının en çok nesne içeren satıra göre belirlenmesidir. Yani bu durumda birinci satıra göre. İkinci ve üçüncü satırlar için üçüncü ve dördüncü sütunları hiçbir nesne içermiyorlar.

    [​IMG]

    İkinci satıra TextView ve Button ekleyelim ve eklediğimiz TextView içerisindeki metni boş yapalım. Üçüncü satırda da aynısını uygulayalım. Görüyoruz ki bu elemanlar üçüncü ve dördüncü sütun içerisine yerleştiler. Ve TextView’ımız metin içermediğinden ve ekranda gözükmediğinden üçüncü sütun, ikinci ve üçüncü satırda boş gözüküyor.

    [​IMG]

    Sütun genişliği sütun içerisindeki en geniş elemanına göre belirleniyor. TextView’lerin bir tanesine metin girdiğimizde bu metinin sütunu genişlettiğini görüyoruz.

    [​IMG]

    3 – RelativeLayout (RL)

    Bu Layout türünde her View nesnesi belirtilen View nesnesine göre özel bir şekilde yerleştirilebilir.

    İlişki çeşitleri:

    1) Soldan, sağdan, yukarıdan, belirtilen elemanın altından: layout_toLeftOf, layout_toRightOf, layout_above, layout_below.

    2) Belirtilen elemana göre sol, sağ, yukarıdaki ve alttaki kenara göre yaslanan: layout_alignLeft, layout_alignRight, layout_alignTop, layout_alignBottom.

    3) Sol, sağ, yukarıdaki ve alttaki ebeveyn kenarına göre yaslanan: layout_alignParentLeft, layout_alignParentRight, layout_alignParentTop, layout_alignParentBottom.

    4) Merkeze göre dikey, merkeze göre yatay, ebeveyne ve merkeze göre dikey ve yatay düzleştirilen: layout_centerVertical, layout_centerHorizontal, layout_centerInParent

    Daha detaylı bilgiler için help bağlantısından detaylı belgelere de erişebilirsiniz.

    Rlayout.xml oluşturalım ve oraya bir de böyle xml kodu kopyalayalım:

    Kod:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
    android:id="@+id/label"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Type here:">
    </TextView>
    <EditText
    android:id="@+id/entry"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/label"
    android:background="@android:drawable/editbox_background">
    </EditText>
    <Button
    android:id="@+id/ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/entry"
    android:layout_marginLeft="10dip"
    android:text="OK">
    </Button>
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/ok"
    android:layout_toLeftOf="@+id/ok"
    android:text="Cancel">
    </Button>
    </RelativeLayout>
    Burada ana nesnemiz RelativeLayout oldu.

    Karşımıza böyle bir ekran çıkacak:

    [​IMG]
    Burada ilgimizi çeken xml kodudur. Hemen bilinmeyen özniteliklerin kısa özetini vereyim:

    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/ENTRY”

    -Her özniteliğin isminde bulunan android kelimesi bir namespace’tir, bu anlatım esnasında onu kullanmayacağım. Başka bir dersimizde bu konuya daha yakından bakacağız.
    id: elemanın ID’si yani kimliğidir.
    layout_width (Nesne genişliği) ve layout_height (Nesnenin yüksekliği) mutlak olarak da tanımlanabilir, aşağıda belirtildiği gibi de: fill_parent (Mümkün olan maksimum genişliği ya da bir ebeveyn içindeki yüksekliği) и wrap_content (Genişlik ve yükseklik bir elemanın içeriğine göre belirlenir). Help içinde match_parent ‘in de olduğu söyleniyor. match_parent ve fill_parent aynı şeyler. Bazı sebeplerden dolayı sistemin geliştiricileri match_parent ismin daha uygun olduğuna karar verdiler ve ileride fill_parent kullanımdan yavaşça kaybolacak. Şimdilik uyumluluk adına bu isim kullanımda bırakıldı. Burada aklınızda tutmanız gereken şey – match_parent = fill_parent ve ileride match_parent kullanmaya çalışacağımızdır. İleride bunun üzerinde daha fazla duracağız ve detaylara tekrar dönüp bakacağız.

    Şimdi biz nesnelerimize dönelim. Örnekte TextView, EditText, OK ve Cancel isimli iki tane Button görüyoruz. Bizi ilgilendiren öznitelikleri detaylı bir şekilde inceleyelim.

    TextView
    android:id=”@+id/label” – ID
    android:layout_width=”match_parent” – Tüm kullanılabilir genişliği kullanır (Ekranda bu gözükmese de);
    android:layout_height=”wrap_content” – İçeriğe göre yükseklik;
    hiç bir şeye hiç bir şekilde bağlı değildir

    EditText
    android:id=”@+id/entry” – ID
    android:layout_width=”match_parent” – Kullanabileceği bütün genişlik
    android:layout_height=”wrap_content” – İçeriğe göre yükseklik
    android:layout_below=”@id/label” – TextView göre daha aşağıda bulunuyor (ID’ye göre bağlantı)

    Button_OK
    android:id=”@+id/ok” – ID
    android:layout_width=”wrap_content” – İçeriğe göre genişlik android:layout_height=”wrap_content” – İçeriğe göre yükseklik
    android:layout_below=”@id/entry” – EditText’e göre daha aşağıda bulunuyor
    android:layout_alignParentRight=”true” – Ebeveynin sağ kenarına göre düzeltildi
    android:layout_marginLeft=”10dip” – soldan boşluğı var( Button_Cancel’ın arka arkaya olmaması için)

    Button_Cancel
    android:layout_width=”wrap_content” – içeriğe göre genişlik
    android:layout_height=”wrap_content” – içeriğe göre yükseklik
    android:layout_toLeftOf=”@id/ok” – Button_OK’ye göre solda bulunuyor
    android:layout_alignTop=”@id/ok” – Button_OK’in yukarıdaki kenarına göre düzeltildi

    Siz kendiniz daha da fazla nesne ekleyebilirsiniz ve onların yerleşimiyle ilgili denemeler yaparak tecrübenizi arttırabilirsiniz.

    Dikkatinizi çekmek istediğim yer, View nesnesinin ID’si olmayabilir.(android:id). Mesela, TextView için bu genelde gerekmiyor. Çünkü çoğu zaman ID’ler sabittir ve uygulamanın çalışması esnasında biz ID’lere neredeyse hiç başvurmayız.

    EditText’te ise durum bunun tam tersidir: Metin kısmının içeriğiyle çalışıyoruz ve Button’lara tıklamaları işlememiz gerekir. Bunun için elbette hangi butonun tıklandığını bilmemiz gerekiyor. Gelecekte View nesnesine ID belirlememiz gereken yerleri de öğreneceğiz.

    4 – AbsoluteLayout (AL)
    Ekrandaki ögelerin mutlak konumlandırmalarının sağlar. Biz bileşenin sol üst köşesi için koordinatları belirliyoruz.

    AbsoluteLayout köklü bir alayout.xml kuralım

    [​IMG]
    Şimdi sürüklemeyle ekrana farklı nesne eklemeyi deneyiniz. Nesne LinearLayot ya da TableLayout’ta olduğu gibi dizilmiyorlar, ama onları sürüklediğiniz yerlerde kalıyorlar. Yani bu mutlak konumlandırmadır.

    [​IMG]
    xml kod’u açtığımızda koordinatların belirlenmesi için layout_x ve layout_y’nin kullanıldığını görebiliriz.

    Kod:
    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="42dp"
    android:layout_y="62dp"
    android:text="Button">
    </Button>
    <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="142dp"
    android:layout_y="131dp"
    android:text="TextView">
    </TextView>
    <CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="55dp"
    android:layout_y="212dp"
    android:text="CheckBox">
    </CheckBox>
    <RadioButton
    android:id="@+id/radioButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="171dp"
    android:layout_y="318dp"
    android:text="RadioButton">
    </RadioButton>
    </AbsoluteLayout>
    İlk başta nesneleri yerleştirmek için bu yöntem en basit ve kullanışlı gelebilir, çünkü nesneler size gereken yerlerde kalıyorlar. Ama bu sadece çalışmamızı çözünürlüğü belirli olan ekran için yapıyorsak geçerlidir. Eğer böyle bir uygulamayı başka bir ekranda açarsak, nesneler yerlerini değiştirecek ve planladığımız gibi olmayacaktır. Onun için bu Layout’un kullanılması tavsiye edilmiyor. Ve Layout’un Android’in gelecek versiyonlarıyla uyumluluğu garanti edilmiyor.

    Ders Sonu Notları:
    Bu derste Layout’un ana tiplerini gördük: LinearLayout, TableLayout, RelativeLayout, AbsoluteLayout.

    Android Programlama Ders 6: Kod İçerisinden View Nesneleriyle Çalışma


    [​IMG]
    Bu derste kod içerisinde, ekrandaki View nesneleriyle çalışmayı ve özelliklerini değiştirmeyi öğreneceğiz…
    Ekrandaki View nesneleriyle kod içerisinden çalışmayı öğrenmek için önce bir proje oluşturalım:

    • Project name: P006-ViewById
    • Build Target: Android 4.2
    • Application name: ViewById
    • Package name: tr.androidApp.ViewById
    • Create Activity: MainActivity
    Koddan ekran nesnesine ulaşmamız için onun ID’sine ihtiyacımız var. ID Properties ya da layout dosyalarında bu ID yazılıyor. Nereden bulacağınız size kalmış. ID’nin belirli bir formatı var: @+id/name; Burada “+” bunun yeni bir kaynak olduğunun işareti ve eğer artı işareti mevcut değilse R.java sınıfına eklenmesi gerektiğine işaret ediyor.

    Main.xml’i açalım, TextView için ID = @+id/myText işaretleyelim ve kaydedelim

    [​IMG]

    R.java’yı açtığımızda id sınıfı için myText sabiti oluştuğunu görüyoruz. Yani ona ulaşmamız için R.id.myText yazmamız gerekiyor.

    [​IMG]

    R.java TextView nesnesine bağlantılı ve nesneye program aracıyla ulaşmamız için R.java’yı kullanabiliriz. Bunun için bize findViewById yöntemi gerekecek. Bu yöntem View’u geri getiriyor. Bu yöntemin çağrısını yazalım. Şimdiye kadar kodumuzu onCreate yöntemiyle yazdığımızı hatırlatmak istiyorum. Bu yöntem etkileşim oluşturduğumuzda ortaya çıkıyor. Eğer nereye yazmanız gerektiğini anlamadıysanız dersin sonuna bakabilirsiniz.

    MainActivity.java’yı açalım ve setContentView yöntemi çağrıştıran satırdan sonra aşağıdaki satırı yazalım:

    VİEW MYTEXTVİEW = FİNDVİEWBYID(R.İD.MYTEXT);

    Eğer View alttan kırmızı ile çizilmişse, o zaman bu sınıf import bölümüne eklenmemiştir. İmpotun otomatik olarak yenilenmesi için CTRL+SHIFT+O tuşlarına aynı anda basmanız yeterli.

    Şimdi myTextView TextView tipini aldı; findViewById yöntemin sonucunu View’dan, TextView’a değiştiriyoruz. Bundan sonra myTextView’a,TextView sınıfın yöntemlerini uygulayabiliriz. Örnek olarak setText yöntemini alalım. Şu anda görüntülenen metin şöyle “Hello World, MainActivity!” Biz bunu programlı olarak New text in TextView olarakdeğiştireceğiz.

    MYTEXTVİEW.SETTEXT(“NEW TEXT İN TEXTVİEW”);

    Kaydediyoruz, başlatıyoruz (CTRL+F11) böylece metnin değiştiğini görüyoruz

    [​IMG]

    Ekrana düğme ekleyelim (Button), Id = @+id/myBtn, varsayılan metni bırakalım. Kaydediyoruz: CTRL+SHIFT+S zira eğer kaydetmezsek, R.java’da ID oluşturulmayacak.

    Kodu yazıyoruz:

    BUTTON MYBTN = (BUTTON) FİNDVİEWBYID(R.İD.MYBTN);

    Buradaki nesne isminin ve ID’nin aynı olmasına dikkat ediyoruz, bu çok önemli.

    Bunlar birbirini engellemiyor, ancak böyle yapmak ilerleyen derslerde bizim için çok daha yararlı ve mantıklı bir alışkanlık oluşturacaktır. Düğmeyi bulduk, şimdi ise onun metnini değiştirelim

    MYBTN.SETTEXT(“MY BUTTON”);

    Uygulamayı başlatalım. Düğme üzerindeki metin değişti, düğmeye birkaç defa tıklayabiliriz. Fakat hiç birşey olmayacak, çünkü biz hiçbir yerde düğme tıklandığında neyin olacağını belirtmedik. Bumu bir sonraki derste göreceğiz. Şimdilik düğmeyi pasif yapalım.

    MYBTN.SETENABLED(FALSE);

    Enabled parametresini değiştirdik. Şimdi düğmeye tıklayamayız. Kaydedelim, tekrar başlatalım ve bunu görelim.

    [​IMG]

    CheckBox, id = @+id/myChb ekleyelim. Varsayılan ayarlarda işaret yoktur. İşareti programı kullanarak koyalım. Bunun için Checked parametresini değiştiren setChecked yöntemi kullanılıyor.

    CHECKBOX MYCHB = (CHECKBOX) FİNDVİEWBYID(R.İD.MYCHB);

    Uygulamayı başlatarak kodun işlediğini görebiliriz.

    Gördüğünüz gibi pek de zor değil. ID’den herhangi bir View nesnesine uygun olan bir nesneyi elde etmek için findViewById yöntemini kullanıyoruz. Sonra ise gereken nesne yöntemlerin (setText, setEnabled, setChecked) oluşmasını sağlıyoruz.

    Sonuçta böyle bir kod elde etmemiz gerekiyor:

    Kod:
    package tr.androidApp.ViewById
    
    
    
    Kod:
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            TextView myTextView = (TextView) findViewById(R.id.myText);
            myTextView.setText("New text in TextView");
    
            Button myBtn = (Button) findViewById(R.id.myBtn);
            myBtn.setText("My button");
            myBtn.setEnabled(false);
    
            CheckBox myChb = (CheckBox) findViewById(R.id.myChb);
            myChb.setChecked(true);
        }
    }
    Ders Sonu Notları:
    Bu dersimizde sizlerle birlikte düğme oluşturmayı öğrendik. Disable ettiğimiz tıklanamayan bu düğmeyi, sonraki dersimizde nasıl tıklanabilir hale getireceğimiz ve de bu düğmeye bir görev bağlayarak işe yarar hale getirmeyi öğreneceğiz.

    Android Programlama Ders 7: Buton Örneklerde Android’e Olayların İşlenmesi

    [​IMG]
    Android Programlama öğrenmeye devam ediyoruz. Bu derste butona basıldığında olayların işletilmesini öğreneceğiz.
    Yeni bir proje oluşturalım:

    • Project name: P007-OnClickButtons
    • Build Target:Android 4.2
    • Application name: OnClickButtons
    • Package name: tr.androidApp.OnClickButtons
    • Create Activity: MainActivity


    Layout klasöründe main.xml dosyaya aşağıdaki kodları kopyalayalım.

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <LİNEARLAYOUT
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”HORİZONTAL”>
    <LİNEARLAYOUT
    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:LAYOUT_MARGİN=”30DP”
    ANDROİD:ORİENTATİON=”VERTİCAL”>
    <TEXTVİEW
    ANDROİD:İD=”@+İD/TVOUT”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:LAYOUT_MARGİNBOTTOM=”50DP”
    ANDROİD:TEXT=”TEXTVİEW”>
    </TEXTVİEW>
    <BUTTON
    ANDROİD:İD=”@+İD/BTNOK”
    ANDROİD:LAYOUT_WİDTH=”100DP”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:TEXT=”OK”>
    </BUTTON>
    <BUTTON
    ANDROİD:İD=”@+İD/BTNCANCEL”
    ANDROİD:LAYOUT_WİDTH=”100DP”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:TEXT=”CANCEL”>
    </BUTTON>
    </LİNEARLAYOUT>
    </LİNEARLAYOUT>



    Kodu kopyaladıktan sonra Graphical Layout içinde bir tane TextView ve iki tane buton olacaktır (OK ve Cancel). Ok butonuna basıldığında TextView : “Ok butona bastınız” mesajı verecektir. Cancel butonuna basıldığı zaman TextView: “Cancel butona bastınız” mesajı verecektir.

    MainActivity.java dosyayı açalım. Değişkenlerin belirlenmesi OnCreate metodu dışında yaptık. Bunu neden yaptık? Diye sorabilirsiniz. Bu nesneleri (değişkenleri) başka metodlardan (fonksiyondan) kullanmak için bunu yaptık. OnCreate metodunda findViewById kullanarak bu nesnelere değeri atacağız. Bunları yaptıktan sonra aşağıdaki gibi bir kod oluşacaktır.

    PACKAGE TR.ANDROİDAPP.ONCLİCKBUTTONS;



    İMPORT ANDROİD.APP.ACTİVİTY;

    İMPORT ANDROİD.OS.BUNDLE;

    İMPORT ANDROİD.WİDGET.BUTTON;

    İMPORT ANDROİD.WİDGET.TEXTVİEW;



    PUBLİC CLASS MAİNACTİVİTY EXTENDS ACTİVİTY {



    TEXTVİEW TVOUT;

    BUTTON BTNOK;

    BUTTON BTNCANCEL;



    /** CALLED WHEN THE ACTİVİTY İS FİRST CREATED. */

    @OVERRİDE

    PUBLİC VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {

    SUPER.ONCREATE(SAVEDINSTANCESTATE);

    SETCONTENTVİEW(R.LAYOUT.MAİN);



    // VİEW-NESNELERİ BULUYORUZ VE DEĞİŞKENLERE ATIYORUZ

    TVOUT = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVOUT);

    BTNOK = (BUTTON) FİNDVİEWBYID(R.İD.BTNOK);

    BTNCANCEL = (BUTTON) FİNDVİEWBYID(R.İD.BTNCANCEL);



    }

    }

    Import bölümünü güncellememiz gerekiyor (CTRL+SHIFT+O). Son kodların satırları tvOut, btnOk ve btnCancel View nesnelerin özelliğini alıyorlar ve biz bu değişkenleri View nesneleri olarak kullanabiliriz. Şimdi butonları etkinleştirelim. Bunu yapmak için setOnClickListener (View.OnClickListener l) metodu kullanacağız. Giriş için arayüzü (İnterfaces ) View.OnClickListener nesne kullanacağız.

    Kod:
    OnClickListener oclBtnOk = new OnClickListener() {
           @Override
           public void onClick(View v) {
             // TODO Auto-generated method stub
    
           }
         };
    Eclipse OnClickListener kırmızı çizgiyle işaretleniyor.

    [​IMG]


    Çünkü Eclipse OnClickListener’i daha tanımıyor. Import bölümü güncelleyelim (CTRL+SHIFT+O) basıyoruz. Eclipse iki OnClickListener ara yüzü tanıdığını gösteriyor. Bize gerekli olan View.OnClickListener.

    Çünkü setOnClickListener View.OnClickListener’i giriş olarak kullanıyor.

    [​IMG]



    Az önce yeni oclBtnOk nesnesini oluşturduk. Bu nesne View.OnClickListener arayüzü kullanıyor. oclBtnOk nesnesi onClick metodu içeriyor. Butona basıldığında bu metodu çalışacaktır. Uygulamada Ok butonuna basıldığı zaman TextView (TvOut) : “Ok butona bastınız” mesajı verecektir. Bunu gerçekleştirelim.

    OnClick metodunda aşağıda yazdığım gibi kodu yazınız:

    Kod:
    tvOut.setText("Ok butona bastınız ");
    
    İşlem hazırdır. Şimdi setOnClickListener kullanarak onu butona bağlayalım.

    Kod:
    btnOk.setOnClickListener(oclBtnOk);
    
    Sonunda aşağıdaki gibi bir kod bloku oluşmalı:

    PACKAGE TR.ANDROİDAPP.ONCLİCKBUTTONS;



    İMPORT ANDROİD.APP.ACTİVİTY;

    İMPORT ANDROİD.OS.BUNDLE;

    İMPORT ANDROİD.VİEW.VİEW;

    İMPORT ANDROİD.VİEW.VİEW.ONCLİCKLİSTENER;

    İMPORT ANDROİD.WİDGET.BUTTON;

    İMPORT ANDROİD.WİDGET.TEXTVİEW;



    PUBLİC CLASS MAİNACTİVİTY EXTENDS ACTİVİTY {



    TEXTVİEW TVOUT;

    BUTTON BTNOK;

    BUTTON BTNCANCEL;



    /** CALLED WHEN THE ACTİVİTY İS FİRST CREATED. */

    @OVERRİDE

    PUBLİC VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {

    SUPER.ONCREATE(SAVEDINSTANCESTATE);

    SETCONTENTVİEW(R.LAYOUT.MAİN);



    // VİEW-NESNELERİ BULUYORUZ

    TVOUT = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVOUT);

    BTNOK = (BUTTON) FİNDVİEWBYID(R.İD.BTNOK);

    BTNCANCEL = (BUTTON) FİNDVİEWBYID(R.İD.BTNCANCEL);

    ONCLİCKLİSTENER OCLBTNOK = NEW ONCLİCKLİSTENER() {

    @OVERRİDE

    PUBLİC VOİD ONCLİCK(VİEW V) {

    // TODO AUTO-GENERATED METHOD STUB

    TVOUT.SETTEXT(“OK BUTONA BASTİNİZ “);

    }

    };

    BTNOK.SETONCLİCKLİSTENER(OCLBTNOK);

    }

    }

    Kaydedelim ve çalıştıralım. Sonra Ok butonuna basıldığı zaman karşımıza böyle bir pencere gelecektir.

    [​IMG]

    Cancel butonuna basıldığı zaman hiçbir şey olmuyor. Çünkü Cancel butonu için bir etkileşim yaratmadık. Bunu Ok butonda gibi kodları yazalım:

    Kod:
    OnClickListener oclBtnCancel = new OnClickListener() {
           @Override
           public void onClick(View v) {
             //TextView içeriği değiştiriyoruz (tvOut)
             tvOut.setText("Cancel butona bastiniz");
           }
         };
    Sonra onu butona bağlıyoruz:

    BTNCANCEL.SETONCLİCKLİSTENER(OCLBTNCANCEL);

    Kaydediyoruz,çalıştırıyoruz ve kontrol ediyoruz. Artık iki butonu etkinleştirdik.

    Şimdi daha önce adımları tekrarlayalım. Buton kendi kendine bir şey yapamıyor.Onu etkili hale getirmek için bir işletici yaratmamız gerekiyor. İlk önce bir dinleyici(listener) yaratmamız gerekir. Bunu yapmak için setOnClickListener metodu kullanıyoruz. Butona basıldığı anda dinleyici OnClick metodu kullanarak yazdığımız kodları çalıştıracak.

    Ders Sonu Notları:
    Bu dersimizde sizlerle birlikte butonu nasıl aktif haline getirmeyi öğrendik.

    Android Programlama Ders 8: Olayların İşletmesinde Optimizasyon

    [​IMG]
    Bu yeşil ufaklık Bugdroid kod adıyla da biliniyor.
    Optimizasyon ile Android belleğini daha az kullanmanın yolları: Bu derste bir işleticiye birden fazla View nesnesini işletmeyi öğreneceğiz. Sonra etkileşimi bir işletici olarak kullanmayı öğreneceğiz…
    Android uygulamalarında optimizasyonu öğrenmeye başlamak için yeni bir proje açalım:

    • Project name: P008-Listener
    • Build Target:Android 4.2
    • Application name: Listener
    • Package name: tr.androidApp.Listener
    • Create Activity: MainActivity
    Geçen derste kullandığımız View nesneleri kullanacağız. main.xml kodu:

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <LİNEARLAYOUT
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”HORİZONTAL”>
    <LİNEARLAYOUT
    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_MARGİN=”30DP”>
    <TEXTVİEW
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:TEXT=”TEXTVİEW”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/TVOUT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:LAYOUT_MARGİNBOTTOM=”50DP”>
    </TEXTVİEW>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/BTNOK”
    ANDROİD:TEXT=”OK”
    ANDROİD:LAYOUT_WİDTH=”100DP”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/BTNCANCEL”
    ANDROİD:TEXT=”CANCEL”
    ANDROİD:LAYOUT_WİDTH=”100DP”>
    </BUTTON>
    </LİNEARLAYOUT>
    </LİNEARLAYOUT>

    1 – Bir işleticinin iki butonunun çalıştırması
    Şu anda iki tane buton ve bir tane TextView’ımız mevcut. Geçen dersteki gibi uygulama butonlara basıldığı zaman TextView mesajı verecektir. Ama şimdi bunu bir işletici vasıtasıyla gerçekleştireceğiz.

    Hatırlatayım, bir buton kendi kendine bir şey yapamaz. Butonu etkinleştirmek için bir dinleyici (listener) gerekir. Bunu setOnClickListener metoduyla yapıyoruz. Dinleyicinin fonksiyonu, butona basılıp basılmadığını kontrol etmektir. Basıldığı zaman dinleyici onClick metodunun içinde olan kodları çalıştırır.

    Aşağıdaki algoritmayı yapıyoruz:

    Dinleyici yaratıyoruz

    onClick metodu dolduruyoruz

    Dinleyici butona bağlıyoruz

    Bizim örneğimizde tek dinleyici iki butonu birden çalıştıracak. Dinleyicinin içinde hangi butona basıldığını belirleriz.

    Nesneleri hazırlayalım ve işleticisi yaratalım:

    PUBLİC CLASS MAİNACTİVİTY EXTENDS ACTİVİTY {

    TEXTVİEW TVOUT;
    BUTTON BTNOK;
    BUTTON BTNCANCEL;

    /** CALLED WHEN THE ACTİVİTY İS FİRST CREATED. */
    @OVERRİDE
    PUBLİC VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {
    SUPER.ONCREATE(SAVEDINSTANCESTATE);
    SETCONTENTVİEW(R.LAYOUT.MAİN);

    // VİEW-NESNELERİNİ BULUYORUZ
    TVOUT = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVOUT);
    BTNOK = (BUTTON) FİNDVİEWBYID(R.İD.BTNOK);
    BTNCANCEL = (BUTTON) FİNDVİEWBYID(R.İD.BTNCANCEL);

    // İSLETİCİYİ YARATİYORUZ
    ONCLİCKLİSTENER OCLBTN = NEW ONCLİCKLİSTENER() {
    @OVERRİDE
    PUBLİC VOİD ONCLİCK(VİEW V) {
    // TODO AUTO-GENERATED METHOD STUB

    }
    };

    }
    }



    Şimdi onClick metodunu dolduralım. Aşağıda göreceğiniz üzere kodun girişinde View’ı bir nesne olarak kullanacağız, View değişkenine göre program gelişecek. Örneklerimizde bu View Ok veya Cancel butonu olacaktır. Bu View nesnenin ID öğrendikten sonra R.id.btnOk ve R.id.btnCancel karşılaşacağız. Sonuca göre hangi butona basıldığı belli oluyor. ID öğrenmek için getID metodu kullanılıyor. Sonuçları taramak için java-operatörü (switch) kullanacağız.

    onClick metodu belirlenmesi:

    Kod:
    public void onClick(View v) {
             // id gore hangi buton basilmis ogrenecegiz
             switch (v.getId()) {
             case R.id.btnOk:
               // ОК butonu
               tvOut.setText("ОК butona bastiniz");
               break;
             case R.id.btnCancel:
               // Cancel butonu
               tvOut.setText("Cancel butona basiniz");
               break;
             }
           }
    
    Eğer uygulamayı şimdi çalıştırırsak bir şey olmayacaktır. Çünkü dinleyiciyi yarattık ama onu butonlara bağlanmadık. İki buton için aynı dinleyiciyi bağlayalım:

    Kod:
    btnOk.setOnClickListener(oclBtn);
    btnCancel.setOnClickListener(oclBtn);
    Programı çalıştıralım, program şimdi düzgünce çalışmalı. Tabii ki işletici sadece iki tane buton değil, daha da fazla buton için de uygulanabilir. Sadece buton değil, başka View nesneler için de geçerlidir. İleride bu özellikleri daha çok kullanacağız. Geçen ders ile aradaki en önemli fark, aynı işlem yapmak için iki tane değil, bir tane işletici kullanmış olmamız. Bu bize bellekten tasarrufu sağlıyor ki bu da cep telefonu ve tabletler önemli bir şey. Ve ikinci avantaj programın kodları anlamak ve takip etmek için kolaylık sağlıyor. Şimdi işletici yaratmak için başka bir yönteme bakalım. Bu yöntemde etkileşimin yaratığı nesne kullanacağız.

    2 – Etkileşim(Activity) işletici olarak kullanılması
    setOnClickListener (View.OnClickListener l) metodu kullanarak buton işleticiyi kendine bağlıyor. Bunu yapmak için herhangi arayüzü View.OnClickListenerözelliği taşıyan nesneyi kullanabiliriz. Etkileşim(Activity) da olabilir. Biz sadece etkileşiminin klas olduğunu belirleyiciyiz ve View.OnClickListener ara yüzü kullanıyor. Sonra onCreate metodu dolduracağız. Yeni bir proje açalım:



    • Project name: P00801-ActivityListener
    • Build Target:Android 4.2
    • Application name: ActivityListener
    • Package name: tr.androidApp.ActivityListener
    • Create Activity: MainActivity
    Aynı kodları kullanacağız:

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?> <LİNEARLAYOUT XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD” ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT” ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT” ANDROİD:ORİENTATİON=”HORİZONTAL”> <LİNEARLAYOUT ANDROİD:İD=”@+İD/LİNEARLAYOUT1″ ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT” ANDROİD:ORİENTATİON=”VERTİCAL” ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT” ANDROİD:LAYOUT_MARGİN=”30DP”> <TEXTVİEW ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT” ANDROİD:TEXT=”TEXTVİEW” ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT” ANDROİD:İD=”@+İD/TVOUT” ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL” ANDROİD:LAYOUT_MARGİNBOTTOM=”50DP”> </TEXTVİEW> <BUTTON ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT” ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL” ANDROİD:İD=”@+İD/BTNOK” ANDROİD:TEXT=”OK” ANDROİD:LAYOUT_WİDTH=”100DP”> </BUTTON> <BUTTON ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT” ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL” ANDROİD:İD=”@+İD/BTNCANCEL” ANDROİD:TEXT=”CANCEL” ANDROİD:LAYOUT_WİDTH=”100DP”> </BUTTON> </LİNEARLAYOUT> </LİNEARLAYOUT>

    Nesneleri hazırlıyoruz ve arayüzü ekliyoruz (implements onClickListener)

    Kod:
    public class MainActivity extends Activity implements OnClickListener {
    
       TextView tvOut;
       Button btnOk;
       Button btnCancel;
    
       /** Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
    
         // View-nesneleri buluyoruz
         tvOut = (TextView) findViewById(R.id.tvOut);
         btnOk = (Button) findViewById(R.id.btnOk);
         btnCancel = (Button) findViewById(R.id.btnCancel);
       }
    }
    OnClickListener kırmızı çizgiyle işaretleniyor çünkü import bölümünde yoktur. İmport bölümüne eklemek için CTRL+SHIFT+O basıyoruz ve View.OnClickListener seçiyoruz.

    Şimdi Eclipe MainActivity hatalı olduğunu ifade ediyor. Bunun sebebi etkileşim klası için bir arayüzü vardır ama arayüzü için metodlar eksiktir. Bunu çözmek için kursoru MainActivity yönlendirip Add unimplemented methodsseçiyoruz.

    Eclipse onClick metodu ekleyecek. Ama bu sefer onClick metod etkileşim içinde olacaktır. Daha önce yaptığımız gibi metodu dolduralım.

    Kod:
    public void onClick(View v) {
             // id gore hangi buton basilmis ogrenecegiz
             switch (v.getId()) {
             case R.id.btnOk:
               // ОК butonu
               tvOut.setText("ОК butona bastiniz");
               break;
             case R.id.btnCancel:
               // Cancel butonu
               tvOut.setText("Cancel butona bastiniz");
               break;
             }
           }
    onCreate metodu butonlara bağlacağız. Bunu MainActivity’e ait this metodu gerçekleşecektir.


    Bu yöntemi kullandığı zaman biz gerekmeyen nesneleri yaratmadık. Belki bu yöntem size zor gelebilir. Bu durumda size en basit gelen yöntemi kullanabilirsiniz. Aşağıda size kodun tamamını veriyorum:

    Kod:
    public class MainActivity extends Activity implements OnClickListener {
    
       TextView tvOut;
       Button btnOk;
       Button btnCancel;
    
       /** Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
    
         // View-nesneleri buluyoruz
         tvOut = (TextView) findViewById(R.id.tvOut);
         btnOk = (Button) findViewById(R.id.btnOk);
         btnCancel = (Button) findViewById(R.id.btnCancel);
    
         // işleticiyi butonlara bağlıyoruz
    Kod:
    btnOk.setOnClickListener(this);
         btnCancel.setOnClickListener(this);
       }
    
       @Override
       public void onClick(View v) {
         // id gore hangi buton basilmis ogrenecegiz
         switch (v.getId()) {
         case R.id.btnOk:
           // ОК buton
           tvOut.setText("Ok butona bastiniz ");
           break;
         case R.id.btnCancel:
           // Cancel buton
           tvOut.setText("Cancel butona bastiniz ");
           break;
         }
       }
    
    }
    Ders Sonu Notları:
    Bu derste bir işleticinin iki butonu nasıl yönetmesi gerektiğini öğrendik. Sonra etkileşim işletici olarak kullanması nasıl kullanabildiğini gördük.

    Android Programlama Ders 9: Res/values Klasörünü İnceliyoruz


    [​IMG]
    Android programlama öğrenmeye devam ediyoruz. Bu derste res/values klasörlerin amacı nedir? Bu dosyalarda neler kaydedilir ve nasıl kullanılır? İşte bunları öğreneceğiz…
    Res (resource) alt dosyalarda uygulamanın farklı kaynakların topladığı yerdir. Daha önce gördüğümüz layout-dosyalar da res/layout’ta bulunuyor. Şimdi res/values klasöre daha ayrıntılı bakalım. Bu klasörün amacı projenin kaynakların (farklı tiplerden) tutulmasıdır. Öncelikle String ve Color tiplerine bakalım.

    Yeni proje oluşturalım:

    • Project name: P009_ResValues
    • Build Target: Android 4.2
    • Application name: ResValues
    • Package name: tr.androidApp .resvalues
    • Create Activity: MainActivity
    res/values/strings.xml dosyayı açalım

    [​IMG]

    Üç tane String tipi nesne görüyoruz:

    Hello world – ara yüzarsayılan olarak main.xml içinde TextView Text özelliği taşıyor. TextView bu nesnenin içeriğini yansıtıyor.

    [​IMG]

    app_name – Varsayılan olarak etkileşim (Activity) ve uygulama için başlık olarak kullanılıyor.

    Bu özelliği Manifest klasöründe belirleniyor. Manifest klasörünü detaylı olarak gelecek derslerde inceleceğiz.

    Bu nesnelere basıldığı zaman, sağ tarafta nesnelerin ne olduğuna yönelik bir açıklama vardır: İsim (Name) ve değer (Value)

    [​IMG]

    Name – ID’dir. ID eşsiz (Benzersiz) olmalıdır. Bunun için R.java dosyasında bu String nesneye ulaşmak için konstant (Sabit) bir isim oluşuyor.

    [​IMG]

    Şimdi daha önce gördüğümüz kaynakları kullanmaya çalışalım.

    İlk önce main.xml’de aşağıdaki verdiğim kodları kullanarak yeni bir ekran oluşturalım:

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <LİNEARLAYOUT
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”VERTİCAL”>
    <LİNEARLAYOUT
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:İD=”@+İD/LLTOP”
    ANDROİD:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”>
    <TEXTVİEW
    ANDROİD:TEXT=”TEXTVİEW”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/TVTOP”
    ANDROİD:LAYOUT_MARGİNTOP=”30DP”>
    </TEXTVİEW>
    <BUTTON
    ANDROİD:TEXT=”BUTTON”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/BTNTOP”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”>
    </BUTTON>
    </LİNEARLAYOUT>
    <LİNEARLAYOUT
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:İD=”@+İD/LLBOTTOM”
    ANDROİD:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”>
    <TEXTVİEW
    ANDROİD:TEXT=”TEXTVİEW”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/TVBOTTOM”
    ANDROİD:LAYOUT_MARGİNTOP=”30DP”>
    </TEXTVİEW>
    <BUTTON
    ANDROİD:TEXT=”BUTTON”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/BTNBOTTOM”>
    </BUTTON>
    </LİNEARLAYOUT>
    </LİNEARLAYOUT>

    Ekran iki ayrı bölüme ayrılıyor. LinearLayout, Button ve TextView içeriyor. LinearLayout için fonun rengi ve TextView, Button – metni değiştirelim. Bunu yapmak için kaynakları (Resources) kullanacağız. Ekranda yukarıdaki bölümde View nesneleri özellikleri (properties) kullanarak değiştireceğiz. Ve aşağıdaki kodu kullanarak.

    Values klasöründe yeni bir dosya açalım isimi myres (My resource: Yani kaynaklarım) olsun.

    [​IMG]

    [​IMG]

    Resource Type yerine Values ve File için myres gireceğiz. Finish butona basıyoruz. Karşımıza aşağıdaki gibi pencere gelecektir.

    [​IMG]

    Dosyayı oluştuktan sonra yeni bir nesne yüklemek için Add butona basıyoruz.

    [​IMG]

    Bastıktan sonra nesnenin tipini, ismini ve değerini seçiyoruz. Dört tane String ve iki tane Color nesnesi oluşturalım:

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>

    <RESOURCES>

    <STRİNG NAME=”TVTOPTEXT”>YUKARDAKİ TEKST</STRİNG>

    <STRİNG NAME=”BTNTOPTEXT”>YUKARDAKİ BUTON</STRİNG>

    <STRİNG NAME=”TVBOTTOMTEXT”>ASAGİDAKİ TEKST</STRİNG>

    <STRİNG NAME=”BTNBOTTOMTEXT”>ASAGİDAKİ BUTON</STRİNG>

    <COLOR NAME=”LLTOPCOLOR”>#336699</COLOR>

    <COLOR NAME=”LLBOTTOMCOLOR”>#339966</COLOR>

    </RESOURCES>

    Elle girebilirsiniz veya yukarıdaki kodu myres.xml dosyaya kopyalayabilirsiniz. Kaydedelim ve R.java dosyasını kontrol edelim.

    [​IMG]

    Tamam kaynakları oluşturduk, şimdi View nesnelerini kullanmak için ayarlamaları yapalım.

    İlk önce yukarıdaki nesneler için ayarları yapalım. llTop’un özelliklerinde (Properties) arka planında (Background) sağa tarafta düğmeye basıyoruz (Üç tane nokta). Color seçiminde llTopColor seçiyoruz.

    [​IMG]

    tvTop için özellikler, Text içinde TvTopText seçeriz.

    btnTop için özellikler, Text içinde btnTopText seçeriz.

    Arka planın rengi, butonda ve TextView’de myres.xml dosyasında belirttiğimiz yazılarla değişti.

    Aşağıdaki bölümü değiştirmek için kodu yazacağız. Bunun için ilk başta nesneleri buluruz ve sonra onlara değerleri atarız.

    PUBLİC CLASS MAİNACTİVİTY EXTENDS ACTİVİTY {
    /** CALLED WHEN THE ACTİVİTY İS FİRST CREATED. */
    @OVERRİDE
    PUBLİC VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {
    SUPER.ONCREATE(SAVEDINSTANCESTATE);
    SETCONTENTVİEW(R.LAYOUT.MAİN);

    LİNEARLAYOUT LLBOTTOM = (LİNEARLAYOUT) FİNDVİEWBYID(R.İD.LLBOTTOM);
    TEXTVİEW TVBOTTOM = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVBOTTOM);
    BUTTON BTNBOTTOM = (BUTTON) FİNDVİEWBYID(R.İD.BTNBOTTOM);

    LLBOTTOM.SETBACKGROUNDRESOURCE(R.COLOR.LLBOTTOMCOLOR);
    TVBOTTOM.SETTEXT(R.STRİNG.TVBOTTOMTEXT);
    BTNBOTTOM.SETTEXT(R.STRİNG.BTNBOTTOMTEXT);

    }
    }

    Dikkat ederseniz metin değerini değiştirmek için setText metodunu kullandık. Kodların çalışıp çalışmadığını görmek için emülatorü kullanacağız. Değişikleri görmek için GraphicalLayout uygun değildir, çünkü bu şekilde, onCreate metodu sadece uygulamayı çalıştırdığı zaman çalışır.

    [​IMG]

    Ders Sonu Notları:
    Bu derste String ve Color bir myres.xml dosyada iki tane kaynak oluşturduk. Ama daha kullanışlı bu kaynakları ayrı dosyalarda tutmaktadır. Gelecek derslerde biz bu yöntemi kullanacağız (Mesela strings.xml, colors.xml).

    Res/values klasöründe kaynakların isimleri farklı olmalıdır. Bu demek farklı dosyalarda kaynakların ismi aynı olmayacaktır.

    Android Programlama Ders 10: Uygulama Bildirimleri ve Bildirim Mesajları


    [​IMG]
    Android Programlama öğrenmeye devam ediyoruz. Bu derste uygulamanın bildirimleri (Logs) ve çıkan mesajlarla detaylı bir şekilde öğreneceğiz…
    Yeni bir proje oluşturalım:

    • Project name: P010-LogAndMess
    • Build Target: Android 4.2
    • Application name: LogAndMess
    • Package name: tr.androidApp.logandmess
    • Create Activity: MainActivity


    Main.xml içinde daha önce derslerde (8’ci ders) kullanılan ekranı oluşturalım:

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <LİNEARLAYOUT
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”HORİZONTAL”>
    <LİNEARLAYOUT
    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_MARGİN=”30DP”>
    <TEXTVİEW
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:TEXT=”TEXTVİEW”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/TVOUT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:LAYOUT_MARGİNBOTTOM=”50DP”>
    </TEXTVİEW>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/BTNOK”
    ANDROİD:TEXT=”OK”
    ANDROİD:LAYOUT_WİDTH=”100DP”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_GRAVİTY=”CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/BTNCANCEL”
    ANDROİD:TEXT=”CANCEL”
    ANDROİD:LAYOUT_WİDTH=”100DP”>
    </BUTTON>
    </LİNEARLAYOUT>
    </LİNEARLAYOUT>

    Butonlara basıldığı zaman metin değişecektir. Bunu işletici – etkileşim (Activity) gerçekleştiriyor.

    PUBLİC CLASS MAİNACTİVİTY EXTENDS ACTİVİTY İMPLEMENTS ONCLİCKLİSTENER {

    TEXTVİEW TVOUT;
    BUTTON BTNOK;
    BUTTON BTNCANCEL;

    /** CALLED WHEN THE ACTİVİTY İS FİRST CREATED. */
    @OVERRİDE
    PUBLİC VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {
    SUPER.ONCREATE(SAVEDINSTANCESTATE);
    SETCONTENTVİEW(R.LAYOUT.MAİN);

    // VİEW-NESNELERİ BULUYORUZ
    TVOUT = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVOUT);
    BTNOK = (BUTTON) FİNDVİEWBYID(R.İD.BTNOK);
    BTNCANCEL = (BUTTON) FİNDVİEWBYID(R.İD.BTNCANCEL);

    // DİNLEYİCİYİ BUTONLARA BAGLİYORUZ
    BTNOK.SETONCLİCKLİSTENER(THİS);
    BTNCANCEL.SETONCLİCKLİSTENER(THİS);
    }

    @OVERRİDE
    PUBLİC VOİD ONCLİCK(VİEW V) {
    // İD KULLANARAK HANGİ BUTON BASİLMİS OGRENİYORUZ
    SWİTCH (V.GETID()) {
    CASE R.İD.BTNOK:
    // ОK BUTON
    TVOUT.SETTEXT(“ОK BUTONA BASTİNİZ”);
    BREAK;
    CASE R.İD.BTNCANCEL:
    // CANCEL BUTON
    TVOUT.SETTEXT(“CANCEL BUTONA BASTİNİZ”);
    BREAK;
    }
    }

    }



    Kaydettikten sonra uygulamayı çalıştıralım. Uygulamanın düzgün çalıştığını kontrol edelim.

    1-Uygulamanın bildirimleri
    Uygulamanın çalıştığını test ettiğimiz zaman, bildirimleri (Logs) kullanabiliriz. Bildirimleri görmek için LogCat penceresi kullanılıyor. LogCat penceresini görmek için Window > Show View > Other menüsünü açmamız gerekir. Açan pencerede Android > LogCat (deprecated) seçiyoruz.

    [​IMG]

    Karşımıza LogCat sekmesi çıkıyor.

    [​IMG]

    Bu sekmeyi detaylı inceleyelim. Bildirimler (Logs) farklı önem seviyeleri taşıyorlar: ERROR, WARN, INFO, DEBUG, VERBOSE (En önemliden, en önemsize doğru sıralanmış hata listesidir). Menünün üst sağ kısmında göreceğiniz V, D, I, W, ve E sembollerine sahip butonlar bildirimleri filtrelemek için kullanılıyor. Bu butonları denebilirsiniz. Bildirim filtresi sadece kendi seviyesini göstermiyor. Daha da önemli bildirimleri gösteriyor. İleride kendi filtrelerimizi yaratmayı, silmeyi ve düzeltmeyi öğreneceğiz.

    Şimdi yeni bildirimleri oluşturmayı öğreneceğiz. Log klası ve bu klasa ait metodları (Log.v() Log.d() Log.i() Log.w() ve Log.e()) kullanarak bunu basit bir şekilde yapabiliriz. Metodların isimleri bildirimlerin önem seviyesi belirliyor.

    MainActivity.java içinde kodu değiştirelim. Kodun açıklamalarını Log.d metodu kullanarak DEBUG – bildirimlere ekleyelim. Log.d metodu iki değişkeni kullanıyor. Birinci TAG ve ikincisi mesaj. Tag’in bir işaretçidir, sistemin bildirimleri arasında bizim mesajı bulmayı kolaylığını sağlıyor. Uygulamanın kodunun içine TAG’leri ekleyelim.

    PACKAGE TR.ANDROİDAPP.LOGANDMESS;



    İMPORT ANDROİD.APP.ACTİVİTY;

    İMPORT ANDROİD.OS.BUNDLE;

    İMPORT ANDROİD.UTİL.LOG;

    İMPORT ANDROİD.VİEW.VİEW;

    İMPORT ANDROİD.VİEW.VİEW.ONCLİCKLİSTENER;

    İMPORT ANDROİD.WİDGET.BUTTON;

    İMPORT ANDROİD.WİDGET.TEXTVİEW;



    PUBLİC CLASS MAİNACTİVİTY EXTENDS ACTİVİTY İMPLEMENTS ONCLİCKLİSTENER {



    TEXTVİEW TVOUT;

    BUTTON BTNOK;

    BUTTON BTNCANCEL;



    PRİVATE STATİC FİNAL STRİNG TAG = “MYLOGS”;



    /** CALLED WHEN THE ACTİVİTY İS FİRST CREATED. */

    @OVERRİDE

    PUBLİC VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {

    SUPER.ONCREATE(SAVEDINSTANCESTATE);

    SETCONTENTVİEW(R.LAYOUT.MAİN);



    // VİEW-NESNELERİ BULUYORUZ

    LOG.D(TAG, “VİEW-NESNELERİ BULUYORUZ”);

    TVOUT = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVOUT);

    BTNOK = (BUTTON) FİNDVİEWBYID(R.İD.BTNOK);

    BTNCANCEL = (BUTTON) FİNDVİEWBYID(R.İD.BTNCANCEL);



    // DİNLEYİCİYİ BUTONLARA BAGLİYORUZ

    LOG.D(TAG, “DİNLEYİCİYİ BUTONLARA BAGLİYORUZ”);

    BTNOK.SETONCLİCKLİSTENER(THİS);

    BTNCANCEL.SETONCLİCKLİSTENER(THİS);

    }



    @OVERRİDE

    PUBLİC VOİD ONCLİCK(VİEW V) {

    // İD KULLANARAK HANGİ BUTON BASİLMİS OGRENİYORUZ

    LOG.D(TAG, “İD KULLANARAK HANGİ BUTON BASİLMİS OGRENİYORUZ”);

    SWİTCH (V.GETID()) {

    CASE R.İD.BTNOK:

    // ОK BUTON

    TVOUT.SETTEXT(“ОK BUTONA BASTİNİZ”);

    BREAK;

    CASE R.İD.BTNCANCEL:

    // CANCEL BUTON

    TVOUT.SETTEXT(“CANCEL BUTONA BASTİNİZ”);

    BREAK;

    }

    }



    }



    Eclipse bir hata oluştuğunu bize bildirecektir. Bunun sebebi Log klasının tanımlanmamış olmasıdır. Bu problemi çözmek için CTRL+SHIFT+O tuşlarına bastıktan sonra android.util.Log’u seçelim. Programı çalıştıralım ve butonlara basıldıktan sonra bildirimlere bakalım.

    [​IMG]

    Eğer karşınıza böyle bir yazı geliyor ise demek ki siz yeni emülatorü kullanıyorsunuz. Normal bildirimleri görmek için LogCat sekmeyi seçiniz. DeviceId Unknown ya da deprecated hatalarını böylece anlayabilirsiniz. Çözüm az önce belirttiğimiz gibi LogCat’i kullanmaktır.

    [​IMG]

    Butonlara bastığı zaman bizim yazdığımız bildirimleri görebiliriz. Bildirimleri daha uygun bir biçimde görmek için filtreleri ekleyebiliriz. Bunu yapmak için +işarete basıyoruz.

    [​IMG]

    Filtrenin ismi herhangi bir isim olabilir mesela «My logs». Log Tag – bizim kodta kullandığımız Log.d metodunda TAG “myLogs”. Pid işlemin id’si boş bırakabiliriz. Log Message – mesajlara göre filtreyebiliriz. Level – seviye debug seçelim. Ve OK butona basıyoruz. Sol tarafta Mylogs sekmenin oluştuğunu görebiliriz.

    2-Bildirim mesajları
    Uygulamalar bildirim mesajları Toast metodu ile kullanılır. Uygulamamızda onClick metodu değiştirip bildirim mesajları kullanabiliriz. Mesela butonlara bastığı zaman hangi butona bastınız bildirim mesajları bize cevabı verecektir.

    PUBLİC VOİD ONCLİCK(VİEW V) {

    // İD KULLANARAK HANGİ BUTON BASİLMİS OGRENİYORUZ

    LOG.D(TAG, “İD KULLANARAK HANGİ BUTON BASİLMİS OGRENİYORUZ”);

    SWİTCH (V.GETID()) {

    CASE R.İD.BTNOK:

    // OK BUTON

    LOG.D(TAG, “OK BUTON”);

    TVOUT.SETTEXT(“OK BUTONA BASTİNİZ”);

    TOAST.MAKETEXT(THİS, “OK BUTONA BASTİNİZ”, TOAST.LENGTH_LONG).SHOW();

    BREAK;

    CASE R.İD.BTNCANCEL:

    // CANCEL BUTON

    LOG.D(TAG, “CANCEL BUTON”);

    TVOUT.SETTEXT(“CANCEL BUTONA BASTİNİZ”);

    TOAST.MAKETEXT(THİS, “CANCEL BUTONA BASTİNİZ”, TOAST.LENGTH_LONG).SHOW();

    BREAK;

    }

    }



    }



    MakeText metodu Toast View – nesneyi yaratıyor.

    Metodun parametreleri:

    – context – Etkileşim (Activity) this kullanıyoruz.

    – text – göstereceğimiz mesajı için kullanılır.

    – duration – bildirimin zaman uzunluğu belirliyor (Toast.LENGTH_LONG – uzun zaman, Toast.LENGTH_SHORT – kısa zaman).

    Toast’u oluştuk şimdi bildirimi ekranda görmek için show() metodu kullanılır. Projeyi kaydediyoruz, çalıştırıyoruz ve kontrol ediyoruz.

    [​IMG]



    Ders Sonu Notları:
    Bu derste uygulamanın bildirimleri (Logs) ve çıkan mesajları nasıl oluşturduğunu öğrendik.


    25 Aralık 2016
    #1
  2. Android Programlama Dersleri (1,2,3,4,5,6,7,8,9,10) Cevapları

soru sor

Android Programlama Dersleri (1,2,3,4,5,6,7,8,9,10)