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