Android Programlama Ders 15: Çalışan Uygulama Ekranında View-nesnelerinin Oluşumu

In Mobil, Pratik by Victor CuiumjuLeave a Comment

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 version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<RadioGroup
android:layout_height=”wrap_content”
android:layout_width=”match_parent”
android:orientation=”horizontal”
android:id=”@+id/rgGravity”>
<RadioButton
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:checked=”true”
android:text=”Left”
android:id=”@+id/rbLeft”>
</RadioButton>
<RadioButton
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:text=”Center”
android:id=”@+id/rbCenter”>
</RadioButton>
<RadioButton
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:text=”Right”
android:id=”@+id/rbRight”>
</RadioButton>
</RadioGroup>
<LinearLayout
android:id=”@+id/linearLayout1″
android:layout_width=”match_parent”
android:orientation=”horizontal”
android:layout_height=”wrap_content”>
<EditText
android:layout_height=”wrap_content”
android:layout_width=”wrap_content”
android:layout_weight=”1″
android:id=”@+id/etName”
android:fadeScrollbars=”true”>
</EditText>
<Button
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Create”
android:id=”@+id/btnCreate”>
</Button>
<Button
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Clear”
android:id=”@+id/btnClear”>
</Button>
</LinearLayout>
<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:id=”@+id/llMain”
android:orientation=”vertical”>
</LinearLayout>
</LinearLayout>

 

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.

dynamic_layout2

Ekranı hazırladıktan sonra bileşenleri aktif hale getirelim. Bunu yapmak için MainActivity.java dosyası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.

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) {
// 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.

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

dynamicLayout Butonlar

 

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:

    case R.id.btnClear:
      llMain.removeAllViews();
      Toast.makeText(this, "Silindi", Toast.LENGTH_SHORT).show();
      break;

 

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:

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
      // 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 derslerinde gelecek konumuzda ekranda var olan nesnelerin  layout-parametrelerini değiştiriyoruz.