Android Programlama Dersleri (11,12,13,14,15,16,17,18,19,20)

İsimli konu WH 'Android' kategorisinde, YλяCλη üyesi tarafından 25 Aralık 2016 tarihinde yazılmıştır. Android Programlama Dersleri (11,12,13,14,15,16,17,18,19,20) hakkında bilgi ve tartışmalar.

  1. YλяCλη

    YλяCλη Yönetici

    Android Programlama Ders 11: Basit Menü Oluşturma Yöntemi

    [​IMG]
    Android Programlama derslerimizin 11. bölümünde sizlerle birlikte basit bir menü oluşturmayı öğreneceğiz.

    Android programlamada menü oluşturmak son derece basittir, haydi başlayalım…

    Proje Örneği:

    Yeni bir proje oluşturalım:

    • Project name: P0011_SimpleMenu
    • Build Target: Android 4.2
    • Application name: SimpleMenu
    • Package name: tr.androidApp.simplemenu
    • Create Activity: MainActivity
    MainActivity.java dosyasını açıyoruz. Menü oluşturmak için onCreateOptionsMenu metodunu kullanacağız. Bu metod giriş değişkeni olarak Menü nesnesini kullanıyor. Menü seçenekleri eklemek için add metodunu kullanmalıyız. Add metodu giriş değişkenleri olarak metinleri kullanacak. Dört tane seçenek ekliyoruz.

    Kod:
     public boolean onCreateOptionsMenu(Menu menu) {[/B]
    [B]
    // TODO Auto-generated method stub
    
    menu.add("menu1");
    menu.add("menu2");
    menu.add("menu3");
    menu.add("menu4");
    
    return super.onCreateOptionsMenu(menu);}
    OnCreateOptionsMenu metodu sonucu (Çıkış-return) olarak boolean tipi gönderiyor. Boolean tipi iki sonuç verebilir. Doğru (True) veya Yanlış (False). OnCreateOptionsMenu metodu, Doğru (True) sonucunu aldığı zaman, menüyü etkin hale getirecektir, yani menüyü gösterecektir. Yanlış (False) değerinde ise bunun tam tersini yapacaktır yani menüyü göstermeyecektir. Bu bize kodda koşulu (If- then) yöntemleri kullanma imkanı sunuyor. Mesela bir koşul gerçekleştiği zaman menüyü göstermek gibi. Şimdilik bir koşul kullanmayacağız. Kodun son komutu olan return super.onCreateOptionsMenu satırı, varsayılan olarak Doğru (True) değerini gönderecektir.

    Projeyi kaydedelim ve emülatörde menu butonuna basalım.

    [​IMG]

    Gördüğümüz gibi dört tane menü seçeneği oluştu. Bu menülere basıldığı zaman hiçbir şey olmuyor. Menüleri etkinleştirmek için etkileşimi (Activity) kullanmamız gerekecek. Etkileşim OnOptionsItemSelected metodu kullanacaktır. OnOptionsItemSelected metodu giriş değişkeni menü (MenuItem) alıyor. Uygulama hangi menüye bastığımızı anlamak için getTitle metodu kullanacak.

    Kod:
    public boolean onOptionsItemSelected(MenuItem item) {
          // TODO Auto-generated method stub
          Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
          return super.onOptionsItemSelected(item);
        }
    Şimdi oluşturduğumuz menüleri biraz daha geliştirelim. Menüye bastığımız zaman bize hangi menüye bastığımızı bildirim olarak göstersin.

    Tam kodu:

    Kod:
    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);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
          // TODO Auto-generated method stub
    
          menu.add("menu1");
          menu.add("menu2");
          menu.add("menu3");
          menu.add("menu4");
    
          return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
          // TODO Auto-generated method stub
          Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
          return super.onOptionsItemSelected(item);
        }
    
    }
    Yukarda menüleri seçmek için metinleri (Text) kullandık. Daha kullanışlı olan ise Id’leri kullanmaktır.

    Android Programlama Ders 12: Menü, Gruplar, Sıralama, MenuInflater ve Xml Menu


    [​IMG]
    Android Programlama Ders 12’de Menü, gruplar, sıralama, MenuInflater ve Xml menü seçeneklerini oluşturmayı öğrenerek devam ediyoruz…
    Android programlama öğrenmeye devam ediyoruz. Bu derste Id’leri kullanarak menü seçenekleri oluşturmayı öğreneceğiz. Sonra seçenekleri gruplanması ve sınıflandırmayı öğrenerek devam edeceğiz.

    Geçen derste add(CharSequence title) metodu kullanarak basit bir menü oluşturmayı öğrendik. Add metodu giriş değişkenleri olarak metinleri kullanıyor. Add metodunun farklı kullanım imkanları da vardır. add(int groupId, int itemId, int order, CharSequence title) bu biçimde add metodu dört giriş parametresi kullanıyor :

    groupId – grubun belirleyici (ID’si), menü bu grubun parçasıdır

    itemId – menü seçeneklerinin ID’sini belirliyor

    order – menü seçeneklerinin gösterme sırasını belirleniyor

    title – metinleri gösteriyor

    Bu parametreleri kullanmak için yeni bir proje oluşturalım. Uygulamanın ekranındaki TextView ve CheckBox nesnelerini kullanacağız.

    TextView: Bunu kullanarak, menünün istediğimiz seçeneği yansıtmasını sağlayacağız.

    CheckBox: Bunu kullanarak basit veya gelişmiş menü seçenekleri arasından seçim yapacağız. Bu özelliği menü grupları kullanarak gerçekleşeceğiz.

    Yeni bir proje oluşturalım:

    • Project name: P0012-MenuAdvn
    • Build Target:Android 4.2
    • Application name: MenuAdvn
    • Package name: tr.androidApp.MenuAdvn
    • Create Activity: MainActivity
    Main.xml dosyasını açalım, TextView için ID’sini belirliyoruz ve CheckBox’u yaratıyoruz.

    Aşağıdaki gibi bir kod olacak.

    <?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=”FİLL_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”FİLL_PARENT”>
    <CHECKBOX
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/CHBEXTMENU”
    ANDROİD:TEXT=”GELİSMİS MENU”>
    </CHECKBOX>
    <TEXTVİEW
    ANDROİD:LAYOUT_WİDTH=”FİLL_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/TEXTVİEW”>
    </TEXTVİEW>
    </LİNEARLAYOUT>

    MainActivity.java’yı açalım ve MainActivity klası aşağıdaki kodla dolduralım.

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

    // EKRANİN NESNELERİ
    TEXTVİEW TV;
    CHECKBOX CHB;

    /** 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);
    // NESNELERİ BULUYORUZ
    TV = (TEXTVİEW) FİNDVİEWBYID(R.İD.TEXTVİEW);
    CHB = (CHECKBOX) FİNDVİEWBYID(R.İD.CHBEXTMENU);

    }

    // MENU OLUSTURUYORUZ
    @OVERRİDE
    PUBLİC BOOLEAN ONCREATEOPTİONSMENU(MENU MENU) {
    // TODO AUTO-GENERATED METHOD STUB
    // MENUNUN SECENEKLERİ EKLİYORUZ
    MENU.ADD(0, 1, 0, “ADD”);
    MENU.ADD(0, 2, 0, “EDİT”);
    MENU.ADD(0, 3, 3, “DELETE”);
    MENU.ADD(1, 4, 1, “COPY”);
    MENU.ADD(1, 5, 2, “PASTE”);
    MENU.ADD(1, 6, 4, “EXİT”);

    RETURN SUPER.ONCREATEOPTİONSMENU(MENU);
    }

    // MENUNUN YENİLMESİ
    @OVERRİDE
    PUBLİC BOOLEAN ONPREPAREOPTİONSMENU(MENU MENU) {
    // TODO AUTO-GENERATED METHOD STUB
    // EGER CHECKBOX İSARETLİDİR,ID GRUBU = 1’İN MENU SECENEKLERİ GOREBİLİRİZ

    MENU.SETGROUPVİSİBLE(1, CHB.İSCHECKED());
    RETURN SUPER.ONPREPAREOPTİONSMENU(MENU);
    }

    // BASİLMASİNİN İSLENMESİ
    @OVERRİDE
    PUBLİC BOOLEAN ONOPTİONSITEMSELECTED(MENUITEM İTEM) {
    // TODO AUTO-GENERATED METHOD STUB
    STRİNGBUİLDER SB = NEW STRİNGBUİLDER();

    //TEXTVİEW BİZE MENUNUN BASILMIS SECENEGI BİLGİ VERECEKTİR
    SB.APPEND(“ITEM MENU”);
    SB.APPEND(“\R\N GROUPID: ” + STRİNG.VALUEOF(İTEM.GETGROUPID()));
    SB.APPEND(“\R\N İTEMID: ” + STRİNG.VALUEOF(İTEM.GETITEMID()));
    SB.APPEND(“\R\N ORDER: ” + STRİNG.VALUEOF(İTEM.GETORDER()));
    SB.APPEND(“\R\N TİTLE: ” + İTEM.GETTİTLE());
    TV.SETTEXT(SB.TOSTRİNG());

    RETURN SUPER.ONOPTİONSITEMSELECTED(İTEM);
    }
    }

    Uygulamanın import bölümünü yenilemeyi unutmayalım (CTRL+SHIFT+O).

    Yukarıdaki yazdığımız kodu ayrıntılı bir şekilde inceleyelim.

    onCreateOptionsMenu – Bu metod ilk defa menü açıldığında çağrılıyor. Menü oluşuyor ve sonra kullanılmıyor. Burada menünün seçenekleri ekliyoruz.

    onPrepareOptionsMenu – Menü her açıldığında kullanılıyor. Burada daha önce oluştuğumuz menüde değişikleri yapabiliriz.

    onOptionsItemSelected – Menü düğmeye basıldığı zaman çağrılıyor. Burada hangi seçeneği seçtiğinizi görebilirsiniz.

    OnCreateOptionsMenu metodunda altı tane menü seçeneği ekliyoruz. Add metodunun parametreleri inceleyelim.

    Birinci parametre – grubun ID’sidir. İlk üç seçenekte bu parametre sıfıra eşittir, kalan üç tanesinde ise bir değerine eşittir. Yani copy, paste ve exit seçeneklerinin ID’si bire eşittir. Grubun ID’sini onPrepareOptionsMenu metodunda kullanacağız.

    İkinci parametre – menü seçeneklerin ID’si. İşletici hangi menü seçeneğini seçtiğinizi öğrenmek için kullanıyor. Bu parametreyi onOptionsItemSelected metodunda kullanacağız.

    Üçüncü parametre – menü seçeneğinin pozisyonu belirleniyor. Sıralama küçüğünden büyüğe gerçekleşiyor.

    Dördüncü parametre – menünün seçeneklerde gözüken yazısıdır.

    onPrepareOptionsMenu metoduna Menu nesnesi gönderilir ve bu nesneyi kullanabiliriz. Örneğimizde setGroupVisible metodu kullanıyoruz. Bu metod, menü seçeneklerini saklama veya gösterme özelliği sunuyor. İki parametre mevcut, birinci parametre grubun ID’sidir ve ikinci parametre ise boolean değeridir. Grubun ID’si olarak “1” yazıyoruz (Copy, paste ve exit grubu), boolean parametrelerinde CheckBox değeri kullanacağız. CheckBox işaretlediği zaman ekranda ID = 1 grubu göreceğiz. İşaret yoksa görmeyeceğiz.

    Kaydedelim ve çalıştıralım.

    “Basit” menü:

    [​IMG]



    “Gelişmiş” menü:

    [​IMG]

    CheckBox durumuna göre menü 3 veya 6 tane seçenek gösteriyor. Sıralama order parametresine göre yapılıyor. Eğer order değeri birkaç parametrede aynıysa, sıralama kodlarda (onCreateOptionsMenu metodunun içinde) pozisyona göre yapılıyor.

    Bir menü seçeneklere basıldığında onOptionsItemSelected metodu bu eylemi işletiyor. Bu metod TextView kullanarak basılmış olan seçenek hakkında bilgi veriyor.

    Programı daha iyi anlamak için yeni menü seçenekleri ekleyebilirsiniz ve ekranda hangi pozisyonları alacaklarını araştırabilirsiniz.

    XML – Menü
    Menü oluşturmak için daha kullanışlı bir yöntem mevcut. Bu yöntemde layout’taki gibi xml dosyaları kullanacağız. Aynı menüyü oluşturmak için res/menu klasöründe yeni mymenu.xmldosyasını oluşturuyoruz.​

    Kod:
    <?xml version="1.0" encoding="utf-8"?>
    <menu
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
    android:id="@+id/menu_add"
    android:title="add">
    </item>
    <item
    android:id="@+id/menu_edit"
    android:title="edit">
    </item>
    <item
    android:id="@+id/menu_delete"
    android:orderInCategory="3"
    android:title="delete">
    </item>
    <group
    android:id="@+id/group1">
    <item
    android:id="@+id/menu_copy"
    android:orderInCategory="1"
    android:title="copy">
    </item>
    <item
    android:id="@+id/menu_paste"
    android:orderInCategory="2"
    android:title="paste">
    </item>
    <item
    android:id="@+id/menu_exit"
    android:orderInCategory="4"
    android:title="exit">
    </item>
    </group>
    </menu>
    Burada item – menünün seçeneği ve group – gruptur. Ekrandaki nesnelerde kullandığımız gibi ID parametreleri için @+id/<your_ID formülü kullanıyoruz. Eclipse otomatik olarak ID parametreler için R.java dosyasında ID’leri oluşturacak.

    orderInCategory – menü seçeneklerin sıralanması ve title – metini belirleniyor.

    onCreateOptionsMenumetodunda artık tek tek menü seçenekleri oluşturmaya gerek kalmadı. Yapacağımız tek şey Menu nesneyi xml-dosyayla bağlamaktır.


    Kod:
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu, menu);
        return super.onCreateOptionsMenu(menu);
      }
    getMenuInflatermetodu yardımıyla MenuInflater metodu kullanabiliriz. MenuInflater bize inflate metodu kullanmaya imkanları sağlıyor. İnflate iki tane giriş değişkeni kullanıyor. Birinci mymenu.xml ve ikinci menu nesne değişkeni. MenuInflater metodu mymenu.xml kullanarak menu nesnenin içeriğini dolduruyor. Yani mymenu.xml dosyasından menü seçenekleri menu nesnesine kopyalanıyor.

    Grubu gizlemek için aynı setGroupVisible metodu kullanıyoruz. ID grubu burada R.id.group1 olarak gerçekleşiyor.

    Xml-dosya’nın parametreleri daha ayrıntılı öğrenmek için burada faydalanabilirsiniz.

    Gördüğünüz gibi bu derste iki tane menü oluşturma yöntemleri öğrendik. Birinci yöntem (Programlama) daha esnektir, ikinci (XML) ise daha kısadır (Kodu yazmayı azalıyor).

    Android Programlama Ders 13: İçerik Menüsü


    [​IMG]
    Android Programlama derslerimizin 13. bölümünde sizlerle birlikte basit bir içerik menüsü oluşturmayı öğreneceğiz.
    Android uygulamasında ekrandaki bir nesneye uzun basılmasında içerik menüsü karşımıza gelebilir. Menüde genelde listeler de kullanılıyor. Aynı türden nesneler topluluğu olduğu zaman (mesela mektuplar) bir nesneyle bir şey yapmak istiyorsanız, bu nesne için içerik menüsü çağırabilirsiniz. İçerik menüyü daha iyi anlamak için bir örnek oluşturalım. Örnekte TextView için içerik menüsü oluşturalım.

    Proje Örneği: Yeni bir proje oluşturalım:

    • Project name: P0013_ContextMenu
    • Build Target: Android 4.2
    • Application name: ContextMenu
    • Package name: tr.androidApp.contextmenu
    • Create Activity: MainActivity
    Main.xml dosyasını açalım ve iki tane TextView 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:ORİENTATİON=”VERTİCAL” ANDROİD:LAYOUT_WİDTH=”FİLL_PARENT” ANDROİD:LAYOUT_HEİGHT=”FİLL_PARENT”> <TEXTVİEW ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT” ANDROİD:TEXTSİZE=”26SP” ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT” ANDROİD:İD=”@+İD/TVCOLOR” ANDROİD:LAYOUT_MARGİNBOTTOM=”50DP” ANDROİD:LAYOUT_MARGİNTOP=”50DP” ANDROİD:TEXT=”TEXT COLOR”> </TEXTVİEW> <TEXTVİEW ANDROİD:LAYOUT_WİDTH=”FİLL_PARENT” ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT” ANDROİD:TEXTSİZE=”22SP” ANDROİD:İD=”@+İD/TVSİZE” ANDROİD:TEXT=”TEXT SİZE”> </TEXTVİEW> </LİNEARLAYOUT>

    Birinci TextView için içerik menüsü metninin rengi değişecek. İkinci TextView için metnin boyutu değişecek. İçerik menüsü, bir basit menü oluşturmaya benziyor ama küçük farklılıklarla. İçerik menüsü açıldığında onCreateContextMenu metodu çağırılır. Giriş değişkenler: – ContextMenu buraya menü seçenekleri ekleneceğiz – View– içerik menü çağırdığı nesneyi temsil ediyor – ContextMenu.ContextMenuInfo – ek bilgi içeriyor. Bu aşamada bu özelliği kullanmayacağız. onContextItemSelected metodu onOptionsItemSelected metoduna benziyor. Giriş değişkeni MenuItem – seçtiğiniz menü seçeneği içeriyor. Üçüncü metod registerForContextMenu. Bu metod giriş değişkeni olarak View nesneyi kullanıyor. Bu metod View nesne için içerik menüyü yaratacak. Şimdi kodu yazmak için MainActivity.java’yı açalım. TextView’ü oluşturalım ve bu nesne için içerik menü oluşturmayı belirleyelim.

    TEXTVİEW TVCOLOR, TVSİZE; /** 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); TVCOLOR = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVCOLOR); TVSİZE = (TEXTVİEW) FİNDVİEWBYID(R.İD.TVSİZE); // TVCOLOR VE TVSİZE İCERİK MENU ULUSTURUYORUZ REGİSTERFORCONTEXTMENU(TVCOLOR); REGİSTERFORCONTEXTMENU(TVSİZE); }

    Şimdi içerik menüsünü nasıl oluşturacağını belirleyeceğiz. Menü seçenekleri oluşturmak için ID’leri kullanacağız.

    Kod:
     final int MENU_COLOR_RED = 1;
      final int MENU_COLOR_GREEN = 2;
      final int MENU_COLOR_BLUE = 3;
    
      final int MENU_SIZE_22 = 4;
      final int MENU_SIZE_26 = 5;
      final int MENU_SIZE_30 = 6;
    İçerik menüsü seçenekleri oluşturuyoruz.

    Kod:
    @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
          // TODO Auto-generated method stub
          switch (v.getId()) {
        case R.id.tvColor:
          menu.add(0, MENU_COLOR_RED, 0, "Red");
          menu.add(0, MENU_COLOR_GREEN, 0, "Green");
          menu.add(0, MENU_COLOR_BLUE, 0, "Blue");
          break;
        case R.id.tvSize:
          menu.add(0, MENU_SIZE_22, 0, "22");
          menu.add(0, MENU_SIZE_26, 0, "26");
          menu.add(0, MENU_SIZE_30, 0, "30");
          break;
        }
        }
    ID’yi kullanarak hangi View nesne için içerik menü oluşturacağını belirleyeceğiz. Ve ona göre içerik menüyü oluşturacağız. Eğer içerik menü tvColor nesne için çağrılıyorsa o zaman içerik menü seçenekleri renklerin seçeneği içerecek. tvSize nesne için içerik menü seçenekleri metnin boyutları seçeneğini içerecek. Örneklerimizde ID’ler sabittir ( MENU_COLOR_, MENU_SIZE_). Gruplanması ve sıralanmasını kullanmıyoruz o yüzden parametreler sıfıra eşittir. Projeyi kaydettikten sonra çalıştıralım. TextView’ye uzun basıldığında karşımıza içerik menü çıkmalı.



    [​IMG]



    İçerik menü seçeneklerine basıldığında bir şey olmuyor. Çünkü onContextItemSelected metodunda işleticiyi belirtmedik. İşleticiyi ekleyelim:

    Kod:
    @Override
        public boolean onContextItemSelected(MenuItem item) {
          // TODO Auto-generated method stub
          switch (item.getItemId()) {
          // tvColor icin secenekler
        case MENU_COLOR_RED:
          tvColor.setTextColor(Color.RED);
          tvColor.setText("Text color = red");
          break;
        case MENU_COLOR_GREEN:
          tvColor.setTextColor(Color.GREEN);
          tvColor.setText("Text color = green");
          break;
        case MENU_COLOR_BLUE:
          tvColor.setTextColor(Color.BLUE);
          tvColor.setText("Text color = blue");
          break;
        // tvSize icin secenekler
        case MENU_SIZE_22:
          tvSize.setTextSize(22);
          tvSize.setText("Text size = 22");
          break;
        case MENU_SIZE_26:
          tvSize.setTextSize(26);
          tvSize.setText("Text size = 26");
          break;
        case MENU_SIZE_30:
          tvSize.setTextSize(30);
          tvSize.setText("Text size = 30");
          break;
          }
          return super.onContextItemSelected(item);
        }
    ID yardımıyla hangi seçeneğe basıldığını öğreniyoruz. Sonra tvColor için rengini ve tvSize boyutunu değiştiriyoruz. Kaydettikten sonra uygulamayı kontrol edelim. Seçeneklere basıldığı zaman rengi ve boyutu değişmeli.

    [​IMG]

    Tam kodu:

    Kod:
    public class MainActivity extends Activity {
    
      final int MENU_COLOR_RED = 1;
      final int MENU_COLOR_GREEN = 2;
      final int MENU_COLOR_BLUE = 3;
    
      final int MENU_SIZE_22 = 4;
      final int MENU_SIZE_26 = 5;
      final int MENU_SIZE_30 = 6;
    
      TextView tvColor, tvSize;
    
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        tvColor = (TextView) findViewById(R.id.tvColor);
        tvSize = (TextView) findViewById(R.id.tvSize);
    
        // tvColor ve tvSize icin icerik menu olusuyoruz
    Kod:
     registerForContextMenu(tvColor);
        registerForContextMenu(tvSize);
      }
    
      @Override
      public void onCreateContextMenu(ContextMenu menu, View v,
          ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.tvColor:
          menu.add(0, MENU_COLOR_RED, 0, "Red");
          menu.add(0, MENU_COLOR_GREEN, 0, "Green");
          menu.add(0, MENU_COLOR_BLUE, 0, "Blue");
          break;
        case R.id.tvSize:
          menu.add(0, MENU_SIZE_22, 0, "22");
          menu.add(0, MENU_SIZE_26, 0, "26");
          menu.add(0, MENU_SIZE_30, 0, "30");
          break;
        }
      }
    
      @Override
      public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        // tvColor icin secenekler
        case MENU_COLOR_RED:
          tvColor.setTextColor(Color.RED);
          tvColor.setText("Text color = red");
          break;
        case MENU_COLOR_GREEN:
          tvColor.setTextColor(Color.GREEN);
          tvColor.setText("Text color = green");
          break;
        case MENU_COLOR_BLUE:
          tvColor.setTextColor(Color.BLUE);
          tvColor.setText("Text color = blue");
          break;
        // tvSize icin secenekler
        case MENU_SIZE_22:
          tvSize.setTextSize(22);
          tvSize.setText("Text size = 22");
          break;
        case MENU_SIZE_26:
          tvSize.setTextSize(26);
          tvSize.setText("Text size = 26");
          break;
        case MENU_SIZE_30:
          tvSize.setTextSize(30);
          tvSize.setText("Text size = 30");
          break;
        }
        return super.onContextItemSelected(item);
      }
    }
    Bu derste içerik menüsü ve menü seçenekleri oluşturmayı öğrendik.


    Android Programlama Ders 14: LayoutParams ve Programlama ile Ekran Oluşturma

    [​IMG]
    Android Programlama Ders 14’te Ekranı layout- dosyasını kullanmadan programlamayı ve LayoutParams’ı öğreneceğiz.

    Daha önce ekranı oluştururken layout – dosyasını kullanmıştık. Aynı şeyi programlayarak da yapabiliriz.

    Yeni projeyi oluşturalım:

    Project name: P0014_DynamicLayout
    Build Target: Android 4.2
    Application name: DynamicLayout
    Package name: tr.androidApp.dynamicLayout
    Create Activity: MainActivity


    MainActivity.java dosyasını açalım ve aşağıdaki satırı inceleyelim:



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



    Bu satırda etkileşim (Activity) ekranı oluşturmak için layout – dosyasını main.xml’de kullanacağını söylüyor. Bu metodu başka bir yöntemle de gerçekleştirebiliriz. Bu metod giriş olarak View – nesnesini kullanıyor ve bu nesneden ana kaynak olarak da yararlanıyor. Layout – dosyasında genelde kök olarak LinearLayout kullanılıyor. Biz da LinearLayout’tu kullanacağız.

    Kod:
    @Override[/B]
    [B]
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // LinearLayout olusturuyoruz
            LinearLayout linLayout = new LinearLayout(this);
            // dikey pozisyonu olusturuyoruz
            linLayout.setOrientation(LinearLayout.VERTICAL);
            // LayoutParams olusturuyoruz 
            LayoutParams linLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            // linLayout kok olarak olusturuyoruz
            setContentView(linLayout, linLayoutParam);
        }
    CTRL+SHIFT+O kullanarak import bölümünü yeniliyoruz. Eclipse bize hangi LayoutParams’ı kullanacağımızı soracaktır. Buruyı biraz ayrıntılı inceleyelim, ekranın oluşumunu hatırlayalım. Ekran ViewGroup’tan ve Vew’lerden oluşuyor.

    [​IMG]
    Daha önce kullandığımız ViewGroup örnekleri – LinearLayout, TableLayout, RelativeLayout v.b. Herkes bu ViewGroup’tan bir LayoutParams içerik klası içeriyor. ViewGroup.LayoutParams, LayoutParams’ın temelini oluşturuyor. ViewGroup.LayoutParams’ın height ve width olmak üzere iki parametresi vardır. Bu metodun alt klası olan ViewGroup.MarginLayoutParams,bu iki parametreyi miras alıyor. Kendisinin dört tane parametresi vardır : bottomMargin, leftMargin, rightMargin, topMargin. LinearLayout.LayoutParams klası ViewGroup’un klasın alt klasıdır. MarginLayoutParams LinearLayout.LayoutParams’dan altı tane parametre miras alıyor ve iki tane de kendi (Gravity, Weight) parametresini ekliyor. Yani LinearLayout nesnesi LinearLayout.LayoutParams alt klası ile layout-parametrelerini içeriyor. Bu parametre tüm alt View ve ViewGroup’lara uygulanıyor.

    [​IMG]



    LinearLayout’daki View nesnesi aynı layout-parametrelerini içeriyor:

    [​IMG]

    RelativeLayout’da ait View nesnesi başka parametre kullanıyor:

    [​IMG]



    Aynı nesneler de vardır. Çünkü ViewGroup’ları aynı kaynakları kullanıyorlar.



    Tekrar Eclipse dönelim ve ViewGroup.LayoutParams temel klası seçelim.

    [​IMG]



    Şimdi kodu inceleyelim. LinearLayout’u oluşturuyoruz ve dikey pozisyonu belirliyoruz. Sonra LayoutParams oluşturuyoruz. Tasarımcı giriş olarak iki parametre (Width ve Height) kullanıyor. İki parametre için de MATCH_PARENT’i kullanılıyor. Sonra setContentView metodunu çağırıyoruz. Bu metod, giriş değişkeni LinearLayout ve LayoutParams’ı kullanıyor. Bu demek oluyor ki Activity’nin ana nesnesi LinearLayout ve layout-özelleği LayoutParams’dan olacaktır.

    Eğer şimdi uygulamayı çalıştırsaydık, bir şey göremeyecektik. Çünkü LinearLayout’un View – nesneleri mevcut değildir. Onları ekleyelim:
    Kod:
    LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    
    
    
    
            TextView tv = new TextView(this);
    
    
            tv.setText("TextView");
    
    
            tv.setLayoutParams(lpView);
    
    
            linLayout.addView(tv);
    
    
    
    
    
            Button btn = new Button(this);
    
    
            btn.setText("Button");
    
    
            linLayout.addView(btn, lpView);
    Tekrar LayoutParams nesnesini oluşturuyoruz. Nesnenin iki parametresi (width = wrap_content ve height = wrap_content) vardır. Eğer bu nesneye herhangi bir View – nesnesi uygularsak, View parametrelerine göre genişliğini ve yüksekliğini ayarlayacağız.
    Sonra TextView’i oluşturuyoruz, onun metnini ayarlıyoruz ve daha önce oluşturduğumuz LayoutParams’ı bağlıyoruz. LinearLayout’da addView (View child) metodu kullanarak ekliyoruz.
    Butonu (Button) oluşturduktan sonra metnini değiştiriyoruz ve sonra addView (View child, ViewGroup.LayoutParams params) metodunu kullanıyoruz. Bu metod aynı anda Button’u LinearLayout’a ekliyor ve buton için LayoutParams belirliyor. Sonuç TextView gibi olacak ama burada bir satır kodu kullandık.
    Dikkat ettiyseniz iki tane View – nesnesi için bir tane LayoutParams nesnesi kullandım. Eğer şimdi LayoutParams nesnesinin özelliğini değiştirirsem, bu iki View nesnesinin özelliğinde değişime sebep olur.
    Uygulamayı kaydedelim ve çalıştıralım. Ekranda bileşenlerin oluştuğunu görebiliriz. Bileşenlerin yüksekliği ve genişliği wrap_content’e göre belirlenir.


    lpView nesnesi temel android.view.ViewGroup.LayoutParams tipine aittir. Bu demek oluyor ki bize sadece yüksekliği ve genişliği ayarlama imkanı verecek. LinearLayout’ta View nesnesi için soldan mesafeyi (Boşluğu) ve sağ kenara göre düzeltmeyi kullanabiliriz. Bu özellikleri kullanmak için LinearLayout.LayoutParams kullanmamız gerekecek:




    Kod:
     LinearLayout.LayoutParams leftMarginParams = new LinearLayout.LayoutParams(
    
    
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    
            leftMarginParams.leftMargin = 50;
    
    
    
    
    
            Button btn1 = new Button(this);
    
    
            btn1.setText("Button1");
    
    
            linLayout.addView(btn1, leftMarginParams);
    Kodu inceleyelim: LinearLayout.LayoutParams nesnesini LayoutParams tasarımcıyı kullanarak oluşturduk. width ve height’i belirledikten sonra soldan mesafeyi 50 piksele eşitliyoruz. Sonraki adımlar: Nesneyi oluşturuyoruz, metnini belirliyoruz ve bu metni LinearLayout’a ekliyoruz.
    Butonu sağa tarafa geçirmek için:


    Kod:
    LinearLayout.LayoutParams rightGravityParams = new LinearLayout.LayoutParams(
    
    
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    
            rightGravityParams.gravity = Gravity.RIGHT;
    
    
    
    
    
            Button btn2 = new Button(this);
    
    
            btn2.setText("Button2");
    
    
            linLayout.addView(btn2, rightGravityParams);

    Kaydedelim ve çalıştıralım. Button1 50px soldan kaydı ve Button2 sağa tarafa kaydı:

    [​IMG]

    Belki ilk başta bu konu karmaşık gelebilir. Bunun için gelecek iki derste öğrendiğimiz bu konuyu tekrarlayacağız ve pratikte ekrana yeni nesne ekleyeceğiz.

    Uygulamanın tam kodu:



    Kod:
    public class MainActivity extends Activity {
    
    
        /** Called when the activity is first created. */
    
    
        @Override
    
    
        public void onCreate(Bundle savedInstanceState) {
    
    
            super.onCreate(savedInstanceState);
    
    
            // LinearLayout’un olusumu
    
    
            LinearLayout linLayout = new LinearLayout(this);
    
    
            // dikey pozisyonu olusturuyoruz
    
    
            linLayout.setOrientation(LinearLayout.VERTICAL);
    
    
            // LayoutParams olusturuyoruz  
    
    
            LayoutParams linLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    
    
            // linLayout ekranin kok nesne olarak belirliyoruz
    
    
            setContentView(linLayout, linLayoutParam);
    
    
    
    
    
            LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    
    
    
    
            TextView tv = new TextView(this);
    
    
            tv.setText("TextView");
    
    
            tv.setLayoutParams(lpView);
    
    
            linLayout.addView(tv);
    
    
    
    
    
            Button btn = new Button(this);
    
    
            btn.setText("Button");
    
    
            linLayout.addView(btn, lpView);
    
    
    
    
    
            LinearLayout.LayoutParams leftMarginParams = new LinearLayout.LayoutParams(
    
    
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    
            leftMarginParams.leftMargin = 50;
    
    
    
    
    
            Button btn1 = new Button(this);
    
    
            btn1.setText("Button1");
    
    
            linLayout.addView(btn1, leftMarginParams);
    
    
    
    
    
            LinearLayout.LayoutParams rightGravityParams = new LinearLayout.LayoutParams(
    
    
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    
    
            rightGravityParams.gravity = Gravity.RIGHT;
    
    
    
    
    
            Button btn2 = new Button(this);
    
    
            btn2.setText("Button2");
    
    
            linLayout.addView(btn2, rightGravityParams);
    
    
        }
    
    
    }


    Android Programlama Ders 15: Çalışan Uygulama Ekranında View-nesnelerinin Oluşumu
    [​IMG]
    Android Programlama Ders 15’te uygulama çalıştığı zaman ekrana bileşenleri eklemeyi öğreneceğiz…
    Geçen dersteki uygulamada bileşenleri Activity.onCreate metodunda oluşturuyorduk. Bu derste ise çalışan uygulamada bileşenleri oluşturmayı öğreneceğiz. Örnek olarak butonları kullanacağız. Butonların metnini ve ekrandaki pozisyonunu değiştireceğiz. Ardından oluşturacağımız nesneyi silmek için ekranına silme butonu ekleyeceğiz.

    Projeyi oluşturalım:

    Project name: P0015_DynamicLayout2
    Build Target: Android 4.2
    Application name: DynamicLayout2
    Package name: tr.androidApp.dynamicLayout2
    Create Activity: MainActivity

    Ekranı oluşturalım. Main.xml açıyoruz ve aşağıdaki kodu yazıyoruz.

    <?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=”FİLL_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”FİLL_PARENT”>
    <RADİOGROUP
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”HORİZONTAL”
    ANDROİD:İD=”@+İD/RGGRAVİTY”>
    <RADİOBUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:CHECKED=”TRUE”
    ANDROİD:TEXT=”LEFT”
    ANDROİD:İD=”@+İD/RBLEFT”>
    </RADİOBUTTON>
    <RADİOBUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:TEXT=”CENTER”
    ANDROİD:İD=”@+İD/RBCENTER”>
    </RADİOBUTTON>
    <RADİOBUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:TEXT=”RİGHT”
    ANDROİD:İD=”@+İD/RBRİGHT”>
    </RADİOBUTTON>
    </RADİOGROUP>
    <LİNEARLAYOUT
    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”HORİZONTAL”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”>
    <EDİTTEXT
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:İD=”@+İD/ETNAME”
    ANDROİD:FADESCROLLBARS=”TRUE”>
    </EDİTTEXT>
    <BUTTON
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:TEXT=”CREATE”
    ANDROİD:İD=”@+İD/BTNCREATE”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:TEXT=”CLEAR”
    ANDROİD:İD=”@+İD/BTNCLEAR”>
    </BUTTON>
    </LİNEARLAYOUT>
    <LİNEARLAYOUT
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”MATCH_PARENT”
    ANDROİD:İD=”@+İD/LLMAİN”
    ANDROİD:ORİENTATİON=”VERTİCAL”>
    </LİNEARLAYOUT>
    </LİNEARLAYOUT>



    Ekranı ayrıntılı bir şekilde inceleyelim.

    rgGravity – RadioGroup üç tane RadioButton (rbLeft, rbCenter, rbRight) içeriyor. Bu bileşenleri nesnenin pozisyonunu belirlemek için kullanacağız.

    etName – bileşeni nesnenin metnini belirleyecek.

    btnCreate – butonu nesnenin oluşması için kullanılacak.

    btnClear – butonu oluşturduğumuz nesneleri silme imkanı sunacak.

    llMain – dikey LinearLayout’da bileşenlerin oluşturduğu yerdir.

    [​IMG]

    Ekranı hazırladıktan sonra bileşenleri aktif hale getirelim. Bunu yapmak için MainActivity.javadosyasında aşağıda yazdığım kodu yazacaksınız. İlk başta tüm bileşenleri buluyoruz, sonra butonlar için işleticiyi oluşturuyoruz. İşleticinin fonksiyonu Activity (Yani implements OnClickListener eklememiz gerekecektir) gerçekleştirecek. Ve son kod satırlarda içerisi boş olan onClick işleticisini oluşturuyoruz.

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

    LİNEARLAYOUT LLMAİN;
    RADİOGROUP RGGRAVİTY;
    EDİTTEXT ETNAME;
    BUTTON BTNCREATE;
    BUTTON BTNCLEAR;

    İNT WRAPCONTENT = LİNEARLAYOUT.LAYOUTPARAMS.WRAP_CONTENT;

    /** 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);

    LLMAİN = (LİNEARLAYOUT) FİNDVİEWBYID(R.İD.LLMAİN);
    RGGRAVİTY = (RADİOGROUP) FİNDVİEWBYID(R.İD.RGGRAVİTY);
    ETNAME = (EDİTTEXT) FİNDVİEWBYID(R.İD.ETNAME);

    BTNCREATE = (BUTTON) FİNDVİEWBYID(R.İD.BTNCREATE);
    BTNCREATE.SETONCLİCKLİSTENER(THİS);

    BTNCLEAR = (BUTTON) FİNDVİEWBYID(R.İD.BTNCLEAR);
    BTNCLEAR.SETONCLİCKLİSTENER(THİS);
    }

    @OVERRİDE
    PUBLİC VOİD ONCLİCK(VİEW V) {
    // TODO AUTO-GENERATED METHOD STUB

    }
    }

    Yukarıdaki koda dikkat ettiyseniz wrapContent değişkeni oluşturdum. Değişkenin amacı LinearLayout.LayoutParams.WRAP_CONTENT’ın değerini saklamak.

    Şimdi butonu oluşturalım ve onClick metodu aktif haline getirelim.​


    Kod:
    @Override
      public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnCreate:
          // LayoutParams’in olusturulmasi
          LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
              wrapContent, wrapContent);
          // btnGravity Gravity.LEFT’nin degerini sakliyor
          int btnGravity = Gravity.LEFT;
          // hangi RadioButton secildigini belirliyor
          switch (rgGravity.getCheckedRadioButtonId()) {
          case R.id.rbLeft:
            btnGravity = Gravity.LEFT;
            break;
          case R.id.rbCenter:
            btnGravity = Gravity.CENTER_HORIZONTAL;
            break;
          case R.id.rbRight:
            btnGravity = Gravity.RIGHT;
            break;
          }
               lParams.gravity = btnGravity;
    
          // Button’u olusturuyoruz, metnini giriyoruz ve LinearLayout’a                ekliyoruz
          Button btnNew = new Button(this);
          btnNew.setText(etName.getText().toString());
          llMain.addView(btnNew, lParams);
    
          break;
        }

    Şimdi yazdığımız kodu detaylı bir şekilde inceleyelim. İlk başta btnCreate’e basıp basılmadığını kontrol ediyoruz. Sonra yüksekliğine ve genişliğine göre LayoutParams’ı oluşturuyoruz.

    LEFT değeri kaydetmek için btnGravity değişkeni oluşturuyoruz. Şimdiki hangi RadioButton seçildiğini öğrenmek için getCheckedRadioButtonId metodunu kullanacağız. Bu metod RadioGroup için seçildiği RadioButton’un ID’ni geri gönderiyor. Fonksiyon bu ID’yi kontrol ediyor ve değeri btnGravity değişkenine kaydediyor. Gravity’nin değeri LayoutParams’a gönderiliyor.

    Sonra butonu oluşturuyoruz ve etName değişkenden butonun metnini kaydediyoruz. Son aşamada oluşturduğumuz butonu (Button) LinearLayout’a ekliyoruz.

    Projeyi kaydedelim ve uygulamayı çalıştıralım. Birkaç tane butonu oluşturalım.

    [​IMG]



    Butonlar yaptığımız seçeneklere göre ekranda pozisyon almalı.

    Şimdi Clear butonunu etkileştirelim. Clear butonu oluşturduğumuz tüm nesneleri silecek. Bunu yapmak için onClick metodunu tamamlayalım. Switch fonksiyonuna (v.getId()) bir tane daha case (Durum) ekleyelim:

    Kod:
    case R.id.btnClear:
          llMain.removeAllViews();
          Toast.makeText(this, "Silindi", Toast.LENGTH_SHORT).show();
          break;
    Kod:
    removeAllViews metodu LinearLayout’tan tüm alt View-nesnelerini silecek. Toast metodu ekrana  başarılı işlem tamamlanmış mesajı gönderecek. Kaydedelim, çalıştıralım ve programı kontrol edelim. Birkaç tane buton ekleyelim, Clear butonuna basalım ve sonucu görelim.
    
    dynamicLayout Silindi
    
    
    Sonunda bir esnek uygulamayı yaratmış olduk.
    
    Uygulamanın tam kodu:
    Kod:
    public class MainActivity extends Activity implements OnClickListener {
    
      LinearLayout llMain;
      RadioGroup rgGravity;
      EditText etName;
      Button btnCreate;
      Button btnClear;
    
      int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
    
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        llMain = (LinearLayout) findViewById(R.id.llMain);
        rgGravity = (RadioGroup) findViewById(R.id.rgGravity);
        etName = (EditText) findViewById(R.id.etName);
    
        btnCreate = (Button) findViewById(R.id.btnCreate);
        btnCreate.setOnClickListener(this);
    
        btnClear = (Button) findViewById(R.id.btnClear);
        btnClear.setOnClickListener(this);
      }
    
      @Override
      public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnCreate:
          // LayoutParams’in olusturmasi
          LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
              wrapContent, wrapContent);
          // btnGravity Gravity.LEFT’nin degeri sakliyor
               int btnGravity = Gravity.LEFT;
          // hangi RadioButton secildigini belirliyor
    Kod:
    // btnGravity’ye kaydediyoruz
          switch (rgGravity.getCheckedRadioButtonId()) {
          case R.id.rbLeft:
            btnGravity = Gravity.LEFT;
            break;
          case R.id.rbCenter:
            btnGravity = Gravity.CENTER_HORIZONTAL;
            break;
          case R.id.rbRight:
            btnGravity = Gravity.RIGHT;
            break;
          }
          //olustugu degeri LayoutParams’a kaydediyoruz
          lParams.gravity = btnGravity;
    
          // Button’u olusturuyoruz metnini giriyoruz ve LinearLayout’a ekliyoruz
          Button btnNew = new Button(this);
          btnNew.setText(etName.getText().toString());
          llMain.addView(btnNew, lParams);
    
          break;
    
        case R.id.btnClear:
          llMain.removeAllViews();
          Toast.makeText(this, "Silindi", Toast.LENGTH_SHORT).show();
          break;
    
        }
      }
    
    }

    Android Programlama Ders 16: Çalışan Uygulamada layoutParams’ı Değiştirme

    [​IMG]
    Android Programlama Ders 16’da Ekranda var olan nesnelerin layout-parametrelerini çalışan uygulamada değiştiriyoruz.
    Daha önce LayoutParams’ı kullanarak ekranın bileşenlerini oluşturmayı ve onların pozisyonunu değiştirmeyi öğrendik. Bu derste nasıl var olan nesnelerin layout – parametreleri değiştirmesini öğreneceğiz.

    Değiştireceğimiz parametreler: weight-ağırlık, SeekBar’ı (Volume) çizeceğiz ve iki tane butonu oluşturacağız. Butonların aldığı alanı ağırlık parametreyi kullanarak değiştireceğiz.

    Projeyi oluşturalım:

    Project name: P0016_DynamicLayout3
    Build Target: Android 4.2
    Application name: DynamicLayout3
    Package name: tr.androidApp.dynamicLayout3
    Create Activity: MainActivity



    Main.xml açalım ve aşağıdaki yazdığımız gibi 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:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WİDTH=”FİLL_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”FİLL_PARENT”>
    <SEEKBAR
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:MAX=”100″
    ANDROİD:PROGRESS=”50″
    ANDROİD:LAYOUT_MARGİNTOP=”20DP”
    ANDROİD:İD=”@+İD/SBWEİGHT”>
    </SEEKBAR>
    <LİNEARLAYOUT
    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:ORİENTATİON=”HORİZONTAL”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_MARGİNTOP=”30DP”>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/BTN1″
    ANDROİD:TEXT=”BUTTON1″
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/BTN2″
    ANDROİD:TEXT=”BUTTON2″
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”>
    </BUTTON>
    </LİNEARLAYOUT>
    </LİNEARLAYOUT>

    SeekBar regülatörü kullanacağız. Bileşenin max ve progress diye iki parametresi vardır. Max parametresi SeekBar’ın en büyük değerini ayarlama imkanı sunuyor. Progress parametresi – regülatörün şimdiki pozisyonunu içeriyor. Max eşit 100 ve Progress eşit 50 (regülatörün yarısı) ayarlayalım.

    Butonların genişliği değere göre ayarlıyoruz. Ağırlık iki buton için bire eşittir. LinearLayout’a ikisi de aynı alanı kaplıyorlar.

    Uygulamayı çalıştırmak için kodu yazalım. MainActivity.java’yı açalım, bileşenleri belirleyelim, bulalım ve onlara ait LayoutParams’a giriş izini alalım.

    Kod:
    public class MainActivity extends Activity {
    
      SeekBar sbWeight;
      Button btn1;
      Button btn2;
    
      LinearLayout.LayoutParams lParams1;
      LinearLayout.LayoutParams lParams2;
    
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        sbWeight = (SeekBar) findViewById(R.id.sbWeight);
    
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
    
        lParams1 = (LinearLayout.LayoutParams) btn1.getLayoutParams();
        lParams2 = (LinearLayout.LayoutParams) btn2.getLayoutParams();
      }
    }
    LayoutParams bileşeni kullanmak için getLayoutParams metodu kullanacağız. Metod çıkış olarak ViewGroup.LayoutParams’ı gönderiyor. Bize gerekli olan LinearLayout.LayoutParams ve ona ulaşmak için bazı değişiklikleri yapacağız. Sonuçta – lParams1 ve lParams2, btn1 ve btn2 için LayoutParams bileşeni oldular. Yani lParams1 ile çalıştığımız zaman btn1’i etkiliyoruz.

    SeekBar’ın değişime tepki vermesi için bir işletici kullanması gerekecek. Bu görevi etkileşim (Activity) gerçekleştirecek. Bunu yapmak için klasa implements OnSeekBarChangeListener’i ekleceğiz:

    Kod:
    public class MainActivity extends Activity implements OnSeekBarChangeListener {
    
    İşleticinin metodlarını da eklememiz gerekiyor.

    Kod:
    @Override
      public void onProgressChanged(SeekBar seekBar, int progress,
          boolean fromUser) {
    
      }
    
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
    
      }
    
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
    
      }

    İşletici üç tane metod içeriyor:

    – onStartTrackingTouch regülatörü değiştirmeye başladığı zaman çalışmaya başlıyor.
    – onProgressChanged regülatörün çalıştığı zaman çalışıyor.
    – onStopTrackingTouch regülatör serbest bırakıldığında çalışıyor.

    onProgressChanged metodunu kullanacağız. Çünkü değişiklikleri ekranda görmek istiyoruz.

    Kod:
    @Override
      public void onProgressChanged(SeekBar seekBar, int progress,
          boolean fromUser) {
        int leftValue = progress;
        int rightValue = seekBar.getMax() - progress;
        // agirliği belirliyoruz
        lParams1.weight = leftValue;
        lParams2.weight = rightValue;
        // butonlarin metninine degerleri yazdiracagiz
        btn1.setText(String.valueOf(leftValue));
        btn2.setText(String.valueOf(rightValue));
      }

    leftValue değişkeni regülatörün sol tarafını temsil ediyor.

    rightValue değişkeni regülatörün sağ tarafını temsil ediyor. rightValue değerini bulmak için maksimum değeri eksi, şimdiki değeri de kullanarak bulabilirsiniz.

    Bu değerleri uygulamada ağırlık olarak kullanıyoruz. Regülatörün pozisyonu sol tarafa daha yakın olduğu zaman leftValue değeri daha küçüktür. Bu demek ki btn1’in genişliği btn2’nin genişliğine göre daha küçüktür.

    [​IMG]

    Değerlerin değişimini daha iyi görmek için değerleri butonların metnine yazdıracağız.

    Etkileşimi (Activity), View-nesneye bağlıyoruz.

    Kod:
    setContentView(R.layout.main);
    
        sbWeight = (SeekBar) findViewById(R.id.sbWeight);
        sbWeight.setOnSeekBarChangeListener(this);
    
        btn1 = (Button) findViewById(R.id.btn1);
    
    İşaretlenmiş satırı var olan koda ekleyeceğiz.

    Kaydedelim ve uygulamayı çalıştıralım. Regülatör değiştiği zaman butonların boyutu da değişmeli.

    [​IMG]



    Bu dersten sonra bildiğimiz konular bize gerçek bir uygulama (hesap makinesi) yazmaya imkan verecektir.

    Uygulamanın tam kodu:

    Kod:
    public class MainActivity extends Activity implements OnSeekBarChangeListener {
    
      SeekBar sbWeight;
      Button btn1;
      Button btn2;
    
      LinearLayout.LayoutParams lParams1;
      LinearLayout.LayoutParams lParams2;
    
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        sbWeight = (SeekBar) findViewById(R.id.sbWeight);
        sbWeight.setOnSeekBarChangeListener(this);
    
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
    
        lParams1 = (LinearLayout.LayoutParams) btn1.getLayoutParams();
        lParams2 = (LinearLayout.LayoutParams) btn2.getLayoutParams();
      }
    
      @Override
      public void onProgressChanged(SeekBar seekBar, int progress,
          boolean fromUser) {
        int leftValue = progress;
        int rightValue = seekBar.getMax() - progress;
        // agirliği ayarliyoruz
        lParams1.weight = leftValue;
        lParams2.weight = rightValue;
        // butonlarin metnine degerleri yazdiriyoruz
        btn1.setText(String.valueOf(leftValue));
        btn2.setText(String.valueOf(rightValue));
      }
    
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
      }
    
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
      }
    }
    Bu derste çalışan uygulamada layoutParams’ı değiştirmeye öğrendik.


    Android Programlama Ders 17: Basit Bir Hesap Makinesi Oluşturuyoruz


    [​IMG]

    Android Programlama derslerimizin 17. bölümünde sizlerle birlikte basit bir hesap makinesini oluşturmayı öğreneceğiz.
    Hesap makinemiz iki tane rakamla dört işlem (artı, eksi, bölme ve çarpma) yapacaktır. Sonucu tam olarak bize verecektir.



    Yeni proje oluşturalım:

    Project name: P0017_SimpleCalculator
    Build Target: Android 4.2
    Application name: SimpleCalculator
    Package name: tr.androidApp.simpleCalculator
    Create Activity: MainActivity



    main.xml’i açalım ve 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:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WİDTH=”FİLL_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”FİLL_PARENT”>
    <LİNEARLAYOUT
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/LİNEARLAYOUT1″
    ANDROİD:LAYOUT_MARGİNLEFT=”10PT”
    ANDROİD:LAYOUT_MARGİNRİGHT=”10PT”
    ANDROİD:LAYOUT_MARGİNTOP=”3PT”>
    <EDİTTEXT
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_MARGİNRİGHT=”5PT”
    ANDROİD:İD=”@+İD/ETNUM1″
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:İNPUTTYPE=”NUMBERDECİMAL”>
    </EDİTTEXT>
    <EDİTTEXT
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:LAYOUT_MARGİNLEFT=”5PT”
    ANDROİD:İD=”@+İD/ETNUM2″
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:İNPUTTYPE=”NUMBERDECİMAL”>
    </EDİTTEXT>
    </LİNEARLAYOUT>
    <LİNEARLAYOUT
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:İD=”@+İD/LİNEARLAYOUT2″
    ANDROİD:LAYOUT_MARGİNTOP=”3PT”
    ANDROİD:LAYOUT_MARGİNLEFT=”5PT”
    ANDROİD:LAYOUT_MARGİNRİGHT=”5PT”>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:TEXT=”+”
    ANDROİD:TEXTSİZE=”8PT”
    ANDROİD:İD=”@+İD/BTNADD”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:TEXT=”-”
    ANDROİD:TEXTSİZE=”8PT”
    ANDROİD:İD=”@+İD/BTNSUB”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:TEXT=”*”
    ANDROİD:TEXTSİZE=”8PT”
    ANDROİD:İD=”@+İD/BTNMULT”>
    </BUTTON>
    <BUTTON
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_WEİGHT=”1″
    ANDROİD:TEXT=”/”
    ANDROİD:TEXTSİZE=”8PT”
    ANDROİD:İD=”@+İD/BTNDİV”>
    </BUTTON>
    </LİNEARLAYOUT>
    <TEXTVİEW
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:LAYOUT_MARGİNLEFT=”5PT”
    ANDROİD:LAYOUT_MARGİNRİGHT=”5PT”
    ANDROİD:TEXTSİZE=”12PT”
    ANDROİD:LAYOUT_MARGİNTOP=”3PT”
    ANDROİD:İD=”@+İD/TVRESULT”
    ANDROİD:GRAVİTY=”CENTER_HORİZONTAL”>
    </TEXTVİEW>
    </LİNEARLAYOUT>

    Hesap makinemizde iki tane giriş alanı, dört tane buton ve çıkış alanı olacaktır. Yukarıdaki kodda EditText için inputType (Giriş tipi) numberDecimal olarak belirledim. Bunun amacı giriş alanlarında sadece rakam ve virgül kabul edilmesidir.

    TextView için gravity (ağırlık) metninin pozisyonu belirlenecek. Layout_gravity ile karıştırmayın. Layout_gravity’nin amacı TextView’un pozisyonunu ViewGroup’ta belirlemek.

    Sonraki adımlar giriş alanlarının okunması, hangi butona basıldığının algılanması ve sonucun görüntülenmesidir. MainActivity.java dosyasını açıyoruz ve kodu yazıyoruz.

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

    EDİTTEXT ETNUM1;
    EDİTTEXT ETNUM2;

    BUTTON BTNADD;
    BUTTON BTNSUB;
    BUTTON BTNMULT;
    BUTTON BTNDİV;

    TEXTVİEW TVRESULT;

    STRİNG OPER = “”;

    /** 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);

    // BİLEŞENLERİ BULUYORUZ
    ETNUM1 = (EDİTTEXT) FİNDVİEWBYID(R.İD.ETNUM1);
    ETNUM2 = (EDİTTEXT) FİNDVİEWBYID(R.İD.ETNUM2);

    BTNADD = (BUTTON) FİNDVİEWBYID(R.İD.BTNADD);
    BTNSUB = (BUTTON) FİNDVİEWBYID(R.İD.BTNSUB);
    BTNMULT = (BUTTON) FİNDVİEWBYID(R.İD.BTNMULT);
    BTNDİV = (BUTTON) FİNDVİEWBYID(R.İD.BTNDİV);

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

    // İŞLETİCİYİ BELİRLİYORUZ
    BTNADD.SETONCLİCKLİSTENER(THİS);
    BTNSUB.SETONCLİCKLİSTENER(THİS);
    BTNMULT.SETONCLİCKLİSTENER(THİS);
    BTNDİV.SETONCLİCKLİSTENER(THİS);

    }

    @OVERRİDE
    PUBLİC VOİD ONCLİCK(VİEW V) {
    // TODO AUTO-GENERATED METHOD STUB
    FLOAT NUM1 = 0;
    FLOAT NUM2 = 0;
    FLOAT RESULT = 0;

    // GİRİŞ ALANLARININ BOŞ OLUP OLMADIĞINI KONTROL EDİYORUZ
    İF (TEXTUTİLS.İSEMPTY(ETNUM1.GETTEXT().TOSTRİNG())
    || TEXTUTİLS.İSEMPTY(ETNUM2.GETTEXT().TOSTRİNG())) {
    RETURN;
    }

    // EDİTTEXT’İ OKUYORUZ VE DEĞİŞKENLERE DEĞERLER VERİYORUZ
    NUM1 = FLOAT.PARSEFLOAT(ETNUM1.GETTEXT().TOSTRİNG());
    NUM2 = FLOAT.PARSEFLOAT(ETNUM2.GETTEXT().TOSTRİNG());

    // BASILMIŞ BUTONU BULUYORUZ VE ONA GÖRE İŞLEMİ GERÇEKLEŞTİRİYORUZ
    // OPER DEĞİŞKENE İŞLEMİ YAZDIRIYORUZ, ÇIKIŞ ALANINDA KULLANACAĞIZ
    SWİTCH (V.GETID()) {
    CASE R.İD.BTNADD:
    OPER = “+”;
    RESULT = NUM1 + NUM2;
    BREAK;
    CASE R.İD.BTNSUB:
    OPER = “-“;
    RESULT = NUM1 – NUM2;
    BREAK;
    CASE R.İD.BTNMULT:
    OPER = “*”;
    RESULT = NUM1 * NUM2;
    BREAK;
    CASE R.İD.BTNDİV:
    OPER = “/”;
    RESULT = NUM1 / NUM2;
    BREAK;
    DEFAULT:
    BREAK;
    }

    // ÇIKIŞ ALANI OLUŞTURUYORUZ
    TVRESULT.SETTEXT(NUM1 + ” ” + OPER + ” ” + NUM2 + ” = ” + RESULT);
    }
    }



    Projeyi kaydettiğimiz zaman karşımıza böyle bir uyarı ekranı çıkacaktır.

    [​IMG]



    Bunun sebebi Türkçe karakterleri kullandık. Burada “Save as UTF-8″ seçiyoruz.

    Yukarıdaki kodlamalarda verilen açıklamaları dikkatle okuyun. İlk başta giren değerleri okutuyoruz, basılan butonu buluyoruz, işlemi gerçekleştiriyoruz ve çıkış alanını dolduruyoruz. Basılan butonların işleticisi olarak Activitiy’i (etkileşim) kullanıyoruz.

    Kaydedelim ve çalıştıralım.

    [​IMG]
    Uygulamayı daha kullanışlı bir hale getirmek için bir menü oluşturalım. Menünün seçenekleri giriş ve çıkış alanlarını temizleyecek ve uygulamayı kapatacak. Seçeneklerin ismi Reset ve Quit.

    Menü seçenekleri için iki tane sabit ID ekleyelim.

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

    FİNAL İNT MENU_RESET_ID = 1;FİNAL İNT MENU_QUIT_ID = 2;

    EDİTTEXT ETNUM1;

    (sadece işaretlenmiş kodu ekliyorsunuz)

    Menüyü oluşturmak ve işletmek için aşağıdaki kodu yazalım:

    // MENÜNÜN OLUŞTURULMASI
    @OVERRİDE
    PUBLİC BOOLEAN ONCREATEOPTİONSMENU(MENU MENU) {
    // TODO AUTO-GENERATED METHOD STUB
    MENU.ADD(0, MENU_RESET_ID, 0, “RESET”);
    MENU.ADD(0, MENU_QUIT_ID, 0, “QUİT”);
    RETURN SUPER.ONCREATEOPTİONSMENU(MENU);
    }

    // MENÜ SEÇENEKLERİNİN İŞLETİLMESİ
    @OVERRİDE
    PUBLİC BOOLEAN ONOPTİONSITEMSELECTED(MENUITEM İTEM) {
    // TODO AUTO-GENERATED METHOD STUB
    SWİTCH (İTEM.GETITEMID()) {
    CASE MENU_RESET_ID:
    // ALANLARI TEMİZLİYORUZ
    ETNUM1.SETTEXT(“”);
    ETNUM2.SETTEXT(“”);
    TVRESULT.SETTEXT(“”);
    BREAK;
    CASE MENU_QUIT_ID:
    // UYGULAMAYI KAPATIYORUZ
    FİNİSH();
    BREAK;
    }
    RETURN SUPER.ONOPTİONSITEMSELECTED(İTEM);
    }

    Kaydedelim ve çalıştıralım. İki tane menü seçeneği oluşturulmalı:
    Reset – tüm alanları temizliyor
    Quit – uygulamayı kapatıyor

    [​IMG]



    Dersin tam kodu:

    PACKAGE TR.ANDROİDAPP.SİMPLECALCULATOR;



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

    İMPORT ANDROİD.OS.BUNDLE;

    İMPORT ANDROİD.TEXT.TEXTUTİLS;

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

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

    İ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.EDİTTEXT;

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



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



    EDİTTEXT ETNUM1;

    EDİTTEXT ETNUM2;



    BUTTON BTNADD;

    BUTTON BTNSUB;

    BUTTON BTNMULT;

    BUTTON BTNDİV;



    TEXTVİEW TVRESULT;



    STRİNG OPER = “”;

    FİNAL İNT MENU_RESET_ID = 1;

    FİNAL İNT MENU_QUIT_ID = 2;





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

    // MENÜNÜN OLUŞTURULMASI

    @OVERRİDE

    PUBLİC BOOLEAN ONCREATEOPTİONSMENU(MENU MENU) {

    // TODO AUTO-GENERATED METHOD STUB

    MENU.ADD(0, MENU_RESET_ID, 0, “RESET”);

    MENU.ADD(0, MENU_QUIT_ID, 0, “QUİT”);

    RETURNSUPER.ONCREATEOPTİONSMENU(MENU);

    }



    // MENÜ SEÇENEKLERİNİN İŞLETİLMESİ

    @OVERRİDE

    PUBLİC BOOLEAN ONOPTİONSITEMSELECTED(MENUITEM İTEM) {

    // TODO AUTO-GENERATED METHOD STUB

    SWİTCH (İTEM.GETITEMID()) {

    CASE MENU_RESET_ID:

    // ALANLARI TEMİZLİYORUZ

    ETNUM1.SETTEXT(“”);

    ETNUM2.SETTEXT(“”);

    TVRESULT.SETTEXT(“”);

    BREAK;

    CASE MENU_QUIT_ID:

    // UYGULAMAYI KAPATIYORUZ

    FİNİSH();

    BREAK;

    }

    RETURNSUPER.ONOPTİONSITEMSELECTED(İTEM);

    }



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

    SUPER.ONCREATE(SAVEDINSTANCESTATE);

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



    // BİLEŞENLERİ BULUYORUZ

    ETNUM1 = (EDİTTEXT) FİNDVİEWBYID(R.İD.ETNUM1);

    ETNUM2 = (EDİTTEXT) FİNDVİEWBYID(R.İD.ETNUM2);



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

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

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

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



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



    // İŞLETİCİYİ BELİRLİYORUZ

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

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

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

    BTNDİV.SETONCLİCKLİSTENER(THİS);



    }



    @OVERRİDE

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

    // TODO AUTO-GENERATED METHOD STUB

    FLOAT NUM1 = 0;

    FLOAT NUM2 = 0;

    FLOAT RESULT = 0;



    // GİRİŞ ALANLARININ BOŞ OLUP OLMADIĞINIKONTROL EDİYORUZ

    İF (TEXTUTİLS.İSEMPTY(ETNUM1.GETTEXT().TOSTRİNG())

    || TEXTUTİLS.İSEMPTY(ETNUM2.GETTEXT().TOSTRİNG())) {

    RETURN;

    }



    // EDİTTEXT’İ OKUYORUZ VE DEĞİŞKENLEREDEĞERLER VERİYORUZ

    NUM1 = FLOAT.PARSEFLOAT(ETNUM1.GETTEXT().TOSTRİNG());

    NUM2 = FLOAT.PARSEFLOAT(ETNUM2.GETTEXT().TOSTRİNG());



    // BASILMIŞ BUTONU BULUYORUZ VE ONAGÖRE İŞLEMİ GERÇEKLEŞTİRİYORUZ

    // OPER DEĞİŞKENE İŞLEMİ YAZDIRIYORUZ, ÇIKIŞ ALANINDA KULLANACAĞIZ

    SWİTCH (V.GETID()) {

    CASE R.İD.BTNADD:

    OPER = “+”;

    RESULT = NUM1 + NUM2;

    BREAK;

    CASE R.İD.BTNSUB:

    OPER = “-“;

    RESULT = NUM1 – NUM2;

    BREAK;

    CASE R.İD.BTNMULT:

    OPER = “*”;

    RESULT = NUM1 * NUM2;

    BREAK;

    CASE R.İD.BTNDİV:

    OPER = “/”;

    RESULT = NUM1 / NUM2;

    BREAK;

    DEFAULT:

    BREAK;

    }



    // ÇIKIŞ ALANI OLUŞTURUYORUZ

    TVRESULT.SETTEXT(NUM1 + ” ” + OPER + ” ” + NUM2 + ” = ” + RESULT);

    }

    }


    Android Programlama Ders 18: View nesnelerinin animasyonlarını oluşturuyoruz


    [​IMG]
    Android Programlama derslerimizin 18. bölümünde sizlerle birlikte View nesnelerin animasyonu oluşturmayı öğreneceğiz.
    View nesnelerin:

    – Şeffaflığı (Clarity)

    – Boyutu

    – Hareketi

    – Dönmesi

    Değiştirmeyi öğreneceğiz.

    Yeni proje oluşturalım:

    • Project name: P0018_SimpleAnimation
    • Build Target: Android 4.2
    • Application name: SimpleAnimation
    • Package name: tr.androidApp.simpleAnimation
    • Create Activity: MainActivity
    Dönüşümler XML dosyalarda oluşturuyoruz. Sonra uygulamada (Dönüşümler) okunuyor ve View nesnelere uygulanıyor (View Animation).Pratiğe geçelim.

    Projemizde res klasör mevcuttur. Bu klasörde anim klasörü oluşturuyoruz. Bunu yapmak için res klasöre fareyle sol düğmeye basıyoruz. Ve New -> Folder seçeneği seçiyoruz. Anim klasöründe yeni dosyaları oluşturuyoruz. Bunu yapmak için yukarıdaki gibi adımları gerçekliyoruz (New -> File). Bu dosyalarda animasyonu oluşturacağız.

    Res/anim klasöründe aşağıdaki gibi dosyaları oluşturuyoruz.

    Dosyanın ismi: myalpha.xml

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <ALPHA
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:FROMALPHA=”0.0″
    ANDROİD:TOALPHA=”1.0″
    ANDROİD:DURATİON=”3000″>
    </ALPHA>

    Dönüşümün açıklanması: Üç saniyede şeffaflığı 0’dan 1’e değişeşecektir.

    Dosyanın ismi: myscale.xml

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <SCALE
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:FROMXSCALE=”0.1″
    ANDROİD:TOXSCALE=”1.0″
    ANDROİD:FROMYSCALE=”0.1″
    ANDROİD:TOYSCALE=”1.0″
    ANDROİD:PİVOTX=”50%”
    ANDROİD:PİVOTY=”50%”
    ANDROİD:DURATİON=”3000″>
    </SCALE>



    Dönüşümün açıklanması: Boyutunun değişimi. Varsayılan pozisyondan 0.1’den 1’e kadar değişecektir. Değişim nesnenin ortadaki bulunan noktaya göre olacaktır (pivot X, pivotY). Değişimin süresi üç saniyedir. Dosyanın ismi: mytrans.xml

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?> <TRANSLATE XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD” ANDROİD:FROMXDELTA=”-150″ ANDROİD:TOXDELTA=”0″ ANDROİD:FROMYDELTA=”-200″ ANDROİD:TOYDELTA=”0″ ANDROİD:DURATİON=”3000″> </TRANSLATE>


    Dönüşümün açıklanması: 150’den X – ekseninden ve 200 Y – ekseninden (0,0) pozisyona geçmesi. Süre üç saniyeye eşittir.

    Dosyanın ismi: myrotate.xml



    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <ROTATE
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:FROMDEGREES=”0″
    ANDROİD:TODEGREES=”360″
    ANDROİD:DURATİON=”3000″>
    </ROTATE>

    Dönüşümün açıklanması: Sol üst köşeye göre 360 dereceye dönüş. Süre üç saniyeye eşittir.

    Dosyanın ismi: mycombo.xml



    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <SET
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”>
    <ROTATE
    ANDROİD:FROMDEGREES=”0″
    ANDROİD:TODEGREES=”360″
    ANDROİD:DURATİON=”3000″
    ANDROİD:PİVOTX=”50%”
    ANDROİD:PİVOTY=”50%”>
    </ROTATE>
    <SCALE
    ANDROİD:FROMXSCALE=”0.1″
    ANDROİD:TOXSCALE=”1.0″
    ANDROİD:FROMYSCALE=”0.1″
    ANDROİD:TOYSCALE=”1.0″
    ANDROİD:PİVOTX=”50%”
    ANDROİD:PİVOTY=”50%”
    ANDROİD:DURATİON=”3000″>
    </SCALE>
    </SET>



    Dönüşümün açıklanması: Boyutunun artışı ve aynı anda dönmesi. Süre üç saniyedir. Dikkat edin bu kombinasyon (İki dönüşümü aynı anda kullanmak için) için </set> kullandık.

    Beş animasyon dosyayı oluşturduk.

    [​IMG]

    Şimdi bu dönüşümleri View nesneye uygulayabiliriz.

    Main.xml açıyoruz ve aşağıdaki gibi ekranı oluşturuyoruz.

    <?XML VERSİON=”1.0″ ENCODİNG=”UTF-8″?>
    <FRAMELAYOUT
    XMLNS:ANDROİD=”HTTP://SCHEMAS.ANDROİD.COM/APK/RES/ANDROİD”
    ANDROİD:LAYOUT_WİDTH=”MATCH_PARENT”
    ANDROİD:İD=”@+İD/FRAMELAYOUT1″
    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_VERTİCAL|CENTER_HORİZONTAL”
    ANDROİD:İD=”@+İD/TV”
    ANDROİD:TEXTSİZE=”38SP”>
    </TEXTVİEW>
    </FRAMELAYOUT>

    Ekranın ortasında TextView bulunuyor. Dönüşümleri TextView’da uygulanacağız. Bunun için içerik menü oluşturacağız ve dönüşümleri seçmek için seçenekleri ekleyeceğiz.

    Dersin tam kodu:



    PACKAGE TR.ANDROİDAPP.SİMPLEANİMATİON;

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

    İMPORT ANDROİD.OS.BUNDLE;

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

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

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

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

    İMPORT ANDROİD.VİEW.ANİMATİON.ANİMATİON;

    İMPORT ANDROİD.VİEW.ANİMATİON.ANİMATİONUTİLS;

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

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

    TEXTVİEW TV;

    FİNAL İNT MENU_ALPHA_ID = 1;

    FİNAL İNT MENU_SCALE_ID = 2;

    FİNAL İNT MENU_TRANSLATE_ID = 3;

    FİNAL İNT MENU_ROTATE_ID = 4;

    FİNAL İNT MENU_COMBO_ID = 5;

    /** 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);

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

    // TV İÇİN İÇERİK MENÜ OLUŞTURUYORUZ

    REGİSTERFORCONTEXTMENU(TV);

    }

    @OVERRİDE

    PUBLİC VOİD ONCREATECONTEXTMENU(CONTEXTMENU MENU, VİEW V,

    CONTEXTMENUINFO MENUINFO) {

    // TODO AUTO-GENERATED METHOD STUB

    SWİTCH (V.GETID()) {

    CASE R.İD.TV:

    // SEÇENEKLERİ EKLİYORUZ

    MENU.ADD(0, MENU_ALPHA_ID, 0, “ALPHA”);

    MENU.ADD(0, MENU_SCALE_ID, 0, “SCALE”);

    MENU.ADD(0, MENU_TRANSLATE_ID, 0, “TRANSLATE”);

    MENU.ADD(0, MENU_ROTATE_ID, 0, “ROTATE”);

    MENU.ADD(0, MENU_COMBO_ID, 0, “COMBO”);

    BREAK;

    }

    SUPER.ONCREATECONTEXTMENU(MENU, V, MENUINFO);

    }

    @OVERRİDE

    PUBLİC BOOLEAN ONCONTEXTITEMSELECTED(MENUITEM İTEM) {

    ANİMATİON ANİM = NULL;

    // BASILAN SEÇENEĞİ BULUYORUZ

    SWİTCH (İTEM.GETITEMID()) {

    CASE MENU_ALPHA_ID:

    // ANİM/MYALPHA DOSYADAN ANİMASYONU OLUŞTURUYORUZ

    ANİM = ANİMATİONUTİLS.LOADANİMATİON(THİS, R.ANİM.MYALPHA);

    BREAK;

    CASE MENU_SCALE_ID:

    ANİM = ANİMATİONUTİLS.LOADANİMATİON(THİS, R.ANİM.MYSCALE);

    BREAK;

    CASE MENU_TRANSLATE_ID:

    ANİM = ANİMATİONUTİLS.LOADANİMATİON(THİS, R.ANİM.MYTRANS);

    BREAK;

    CASE MENU_ROTATE_ID:

    ANİM = ANİMATİONUTİLS.LOADANİMATİON(THİS, R.ANİM.MYROTATE);

    BREAK;

    CASE MENU_COMBO_ID:

    ANİM = ANİMATİONUTİLS.LOADANİMATİON(THİS, R.ANİM.MYCOMBO);

    BREAK;

    }

    // TV İÇİN ANİMASYONU BAŞLATIYORUZ

    TV.STARTANİMATİON(ANİM);

    RETURN SUPER.ONCONTEXTITEMSELECTED(İTEM);

    }

    }



    Animasyon AnimationUtils.loadAnimation metodu kullanarak xml dosyayı okunuyor ve çıkışta Animation tipi nesneyi oluşuyor. Bu nesneyi startAnimation, metodunda kullanarak animasyonu başlatıyoruz.

    Projeyi kaydediyoruz ve uygulamayı çalıştırıyoruz. TextView için içerik menü çağırıyoruz ve animasyonu test ediyoruz.

    [​IMG]



    Bu derste tüm imkanları kullanmadık. Mesela android:startOffset (Animasyonun gecikmeyi belirleniyor) parametreyi kullanabilirsiniz. Daha bir parametre android:repeatCount – tekrarlama sayısı belirleniyor. XML parametreleri değiştirerek sonuçları araştırmayı tavsiye ediyorum.​
    Android Programlama Ders 19: İkinci etkileşimi (Activity) Oluşturuyoruz

    [​IMG]
    Android programlama öğrenmeye devam ediyoruz. Bu derste ikinci etkileşimi (Activity) oluşturmayı öğreneceğiz.
    Geçen derslerimizde uygulamalarda tek etkileşimi kullanıyorduk. Normalde Android uygulamalarda birden fazla etkileşim kullanılıyor.

    Yeni bir proje oluşturalım:

    • Project name: P0019_TwoActivity
    • Build Target: Android 4.2
    • Application name: TwoActivity
    • Package name: tr.androidApp.TwoActivity
    • Create Activity: MainActivity
    Main.xml dosyasını açalım ve aşağıdaki gibi 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:ORİENTATİON=”VERTİCAL”
    ANDROİD:LAYOUT_WİDTH=”FİLL_PARENT”
    ANDROİD:LAYOUT_HEİGHT=”FİLL_PARENT”>
    <BUTTON
    ANDROİD:LAYOUT_WİDTH=”WRAP_CONTENT”
    ANDROİD:LAYOUT_HEİGHT=”WRAP_CONTENT”
    ANDROİD:TEXT=”GO TO ACTİVİTY TWO”
    ANDROİD:İD=”@+İD/BTNACTTWO”>
    </BUTTON>
    </LİNEARLAYOUT>



    Ekranda bir tane buton olacaktır. Butona bastığı zaman ikinci etkileşimi etkileneceğiz.

    MainActivity.java’yı açalım ve aşağıdaki kodla dolduralım.

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

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

    BUTTON BTNACTTWO;

    /** 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);

    BTNACTTWO = (BUTTON) FİNDVİEWBYID(R.İD.BTNACTTWO);
    BTNACTTWO.SETONCLİCKLİSTENER(THİS);
    }

    @OVERRİDE
    PUBLİC VOİD ONCLİCK(VİEW V) {
    SWİTCH (V.GETID()) {
    CASE R.İD.BTNACTTWO:
    // TODO CALL SECOND ACTİVİTY
    BREAK;
    DEFAULT:
    BREAK;
    }
    }
    }

    Yukarıdaki kodda btnActTwo belirledik ve işletici olarak etkileşimi (Activity) belirledik. OnClick metodu şuanda tam oluşturmadık bunu biraz sonra yapacağız. Sonra hangi butona bastığınızı buluyoruz. Ve ikinci ekranı (Etkileşimi) çağıracağız. Ama çağırmadan önce ikinci ekranı oluşturmamız gerekiyor. Projeyi oluşturduğu zaman varsayılan etkileşimi (Activity) oluşturuyoruz.

    [​IMG]

    Bu etkileşim için isim veriyoruz. Genelde MainActivity ismi veriyoruz. Sonra MainActivity.java klası oluşuyor. Klasın amacı etkileşimin davranışı kontrol etmek. Bunun dışında etkileşim AndroidManifest.xml dosyasında kayıtlı oluyor.[​IMG]

    AndroidManifest.xml’i açalım.

    [​IMG]

    Aşağıda Application sekmeyi açıyoruz. Sol tarafında MainActivity’yi görüyoruz. Onu açtığı zaman IntentFilter ve iki tane parametreyi görüyoruz. android.intent.action.Main’nın amacı uygulamayı çalıştırdığında ilk açılacak etkileşimi belirlemek. İkinci parametrenin amacı (android.intent.category.LAUNCHER) uygulamayı Android uygulama listesinde yerleştirmek. Sağda Name alanında. MainActivity ismi klası görüyoruz. Klasın amacı etkileşimin çalışması kontrol etmek. Yeni etkileşimi oluşturmak için yeni kası oluşturmamız gerekecektir. Klası oluşturmak için src dosyasında tr.androidApp.TwoActivity seçeneğe farede sağa düğmeye bastıktan sonra New -> Class seçeneği seçiyoruz.

    [​IMG]

    Çıkan pencerede Name alanında ActivityTwo ve Superclass alanında android.app.Activity’yi giriyoruz.

    [​IMG]

    ActivityTwo klası oluşturduk. Ama bu klasın içeriği boştur. Klasta etkileşimi (Activity) oluşturmak için onCreate metodu kullanmamız gerekiyor.

    PACKAGE TR.ANDROİDAPP.TWOACTİVİTY;



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

    İMPORT ANDROİD.OS.BUNDLE;



    PUBLİC CLASS ACTİVİTYTWO EXTENDS ACTİVİTY {



    @OVERRİDE

    PROTECTED VOİD ONCREATE(BUNDLE SAVEDINSTANCESTATE) {

    SUPER.ONCREATE(SAVEDINSTANCESTATE);

    }

    }

    Ekranı oluşturmak için klasta setContentView metod eksiktir. Bu metod giriş olarak layout dosyayı kullanıyor. Yeni bir layout dosyayı oluşturalım (res->layout->new->fıle). Dosyanın ismi two.xml olsun. Bu dosyayı aşağıdaki kodla dolduralım:​

    Kod:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="This is Activity Two">
    </TextView>
    </LinearLayout>

    Ekranımızda bir tane TextView“This is Activity Two” mesajla oluşturduk. Bu dosyayı (two.xml) setContentView metodu uygulayarak ActivityTwo klasta kullanacağız.

    Kod:
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.two);
      }

    (Sadece işaretlenmiş kodu ekliyoruz). Kaydedelim. ActivityTwo klası hazırdır. Klası çalıştırdığımız zaman layout (two.xml) dosyada oluşturduğumuz ekranı çağıracak. Şimdi etkileşimi Manifest dosyasında kayıt yapmamız gerekiyor. AndroidManifest.xml dosyayı açtıktan sonra Application sekmeyi açıyoruz ve Add butona basıyoruz.

    [​IMG]

    Açılan pencerede Activity seçeneği seçiyoruz.

    [​IMG]

    OK butonuna bastıktan sonra. Sağ tarafında Name alanında “Activity Two” ismini giriyoruz. Kaydediyoruz. Manifest dosyasında artık iki tane etkileşimi kayıtlıdır.

    [​IMG]

    MainActivity.java dosyasında boş kalan onClick metodu oluşturalım. OnClick metodu ikinci etkileşimi (ActivityTwo) çağıracaktır. MainActivity.java’yı açalım ve aşağıdaki işaretlenmiş satırları ekleyelim.


    Kod:
    case R.id.btnActTwo:
          Intent intent = new Intent(this, ActivityTwo.class);
          startActivity(intent);
          break;

    Import bölümünü yeniliyoruz (CTRL+SHIFT+O), kaydediyoruz ve emulatörde çalıştırıyoruz. Uygulama açıldığında MainActivity görünüyor.

    [​IMG]



    Butona bastıktan sonra ikinci etkileşime (ActivityTwo) geçiyoruz.



    [​IMG]



    Yeni etkileşimi (Activity) daha iyi anlamak için birkaç tane yeni etkileşimi oluşturabilirsiniz.


    Android Programlama Ders 20: Intent,Intent Filter ve Context


    [​IMG]
    Android programlama öğrenmeye devam ediyoruz. Bu derste intent,intent filter ve context konularından bahsedeceğiz.


    Geçen derslerde (№ 19) projemizde aynı uygulamada iki tane etkileşimi oluşturmayı öğrendik. Hatırlatayım yeni etkileşimi oluşturmak için:

    – Yeni klasla beraber superclass android.app.Activity oluşturuyoruz

    – Etkileşimi Manifest dosyasında kayıt yapmamız gerekiyor. Ve name alanında klasın ismi giriyoruz.


    Şimdi etkileşimi çağırması için kullanılan kodu inceleyelim.


    INTENT İNTENT = NEW INTENT(THİS, ACTİVİTYTWO.CLASS);
    STARTACTİVİTY(İNTENT);

    Burada Intent nesneyi kullandık.

    Intent (Niyet) nedir ?

    Intent bir nesnedir. Nesnenin amacı çağırılacak etkileşimin belirlenmesi. Sonra nesneyi startActivity metodunda kullanıyoruz. Metodun amacı kullanılacak etkileşimi bulmak ve göstermek. Intent nesneyi oluşturduğu zaman Intent (Context packageContext, Class cls) tasarımcı kullandık.

    Tasarımcı iki parametre kullanıyor. Birinci parametre – Context. Context – bir nesnedir amacı uygulamanın temel metodlara erişim sağlamaktır. Etkileşim Context’in alt klasıdır bu yüzden this parametreyi kullanabiliriz. İlerde örnekleri kullanarak Context’in çağırışı ve kullanımı daha iyi anlayacağız. İkinci parametre – klasın ismidir. Hatırlatayım Manifest dosyada etkileşimi belirlediği zaman klasın ismi giriyoruz. Aynı klası Intent nesnede belirliyoruz. Sistem Manifest dosyaya baktığında uyum tespit ettiği zaman uygun etkileşimi gösterecektir.

    Explicit Intent (Açık niyeti)

    Açık Intent kullandığımız zaman hangi etkileşimi kullanacağımızı direk belirliyoruz. Yani klasta hangi etkileşimi çağıracağını açık belirliyoruz. Genelde bu tür Intent uygulamanın içinde kullanılıyor. Şematik olarak aşağıdaki resimde gösterebiliriz:


    [​IMG]



    Burada Intent’i oluşturuyoruz ve parametre olarak Class_B kullanıyoruz. Sonraki adımda startActivity metodu çağırıyoruz ve parametre olarak Intent’i kullanıyoruz. startActivity metodu Manifest dosyayı kontrol ediyor. Kontrolün amacı Class_B’le ilişkili etkileşimi bulmak.

    Implicit Intent (Gizli niyeti)

    İkinci tür Implicit Intent. Birinci Intent’ten fark parametre olarak klası kullanılmıyor onun yerinde üç tane parametre kullanılır. Bu parametre: action (faaliyet), data (veri) ve category (grup,sınıf). Parametrelere diğerler atanabilir. Değerlere göre etkileşimler çağrılabilir. Mesela: e-posta gönderme, metin düzenleme, resimleri görüntüleme, belli bir telefon numarayı arama ve başkaları. Etkileşim için Intent Filter kullanılır. Intent Filter aynı parametre (action,data ve category) kümesi kullanıyor. Intent’in ve Intent Filter’in parametreleri denk geldiği zaman etkileşim (Activity) çağrılıyor. Arama tüm uygulamalarda gerçekleşiyor. Eğer birkaç tane etkileşim bulunuyorsa hangi uygulamayı kullanmak istediğiniz seçim sunuluyor. Mesela eğer sistemde birkaç tane mp3 çalan uygulama bulunuyorsa mp3 formatlı müzik açıldığı zaman size seçim sunacak. Şematik olarak aşağıdaki resimde gösterebiliriz:

    [​IMG]



    Application_1’de Intenti oluşturuyoruz ve action, data ve category parametre dolduruyoruz. Kolaylık sağlamak için parametreleri Param_C olarak isimlendirelim. startActivity kullanarak Intent uygun etkileşimi aramaya başlıyor. Sistemde farklı uygulamalar mevcuttur. Her uygulamada birkaç tane etkileşim bulunuyor. Bazı etkileşimler için IntentFilter belirlenmiş (örnekte Activity_21, Activity_22) bazıları için ise belirlenmemiş (Activity_24). startActivity her etkileşim için Intent’le Intent Filter parametrelerini karşılaştırıyor. Eğer parametreler (Param_C ikisi için) aynı ise etkileşim uygun olarak sayılır.

    Sonuç sadece bir etkileşim bulunduysa gösterilir. Birden fazla etkileşim bulunuyorsa o zaman kullanıcı kendine göre daha uygun uygulamayı seçiyor.



    <ACTİVİTY ANDROİD:NAME=”NOTESLİST” ANDROİD:LABEL=”@STRİNG/TİTLE_NOTES_LİST”>
    <İNTENT-FİLTER>
    <ACTİON ANDROİD:NAME=”ANDROİD.İNTENT.ACTİON.MAIN” />
    <CATEGORY ANDROİD:NAME=”ANDROİD.İNTENT.CATEGORY.LAUNCHER” />
    </İNTENT-FİLTER>
    <İNTENT-FİLTER>
    <ACTİON ANDROİD:NAME=”ANDROİD.İNTENT.ACTİON.VIEW” />
    <ACTİON ANDROİD:NAME=”ANDROİD.İNTENT.ACTİON.EDIT” />
    <ACTİON ANDROİD:NAME=”ANDROİD.İNTENT.ACTİON.PICK” />
    <CATEGORY ANDROİD:NAME=”ANDROİD.İNTENT.CATEGORY.DEFAULT” />
    <DATA ANDROİD:MİMETYPE=”VND.ANDROİD.CURSOR.DİR/VND.GOOGLE.NOTE” />
    </İNTENT-FİLTER>
    <İNTENT-FİLTER>
    <ACTİON ANDROİD:NAME=”ANDROİD.İNTENT.ACTİON.GET_CONTENT” />
    <CATEGORY ANDROİD:NAME=”ANDROİD.İNTENT.CATEGORY.DEFAULT” />
    <DATA ANDROİD:MİMETYPE=”VND.ANDROİD.CURSOR.İTEM/VND.GOOGLE.NOTE” />
    </İNTENT-FİLTER>
    </ACTİVİTY>

    Yukarıdaki verdiğim kodda Intent Filter’in uygulanmasını görebilirsiniz.

    İlerdeki derslerimizde Intent’lerin uygulanması ve aldığı parametreleri (action, data ve category) örnekleri kullanarak daha iyi anlayacaksınız.

    Ders Sonu Notları:
    Bu derste Intent nesnenin ne için kullanılıyor temel bilgileri aldık.​


    25 Aralık 2016
    #1
  2. Android Programlama Dersleri (11,12,13,14,15,16,17,18,19,20) Cevapları

soru sor

Android Programlama Dersleri (11,12,13,14,15,16,17,18,19,20)