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

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

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 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”>
<SeekBar
android:layout_height=”wrap_content”
android:layout_width=”match_parent”
android:max=”100″
android:progress=”50″
android:layout_marginTop=”20dp”
android:id=”@+id/sbWeight”>
</SeekBar>
<LinearLayout
android:id=”@+id/linearLayout1″
android:layout_width=”match_parent”
android:orientation=”horizontal”
android:layout_height=”wrap_content”
android:layout_marginTop=”30dp”>
<Button
android:layout_height=”wrap_content”
android:id=”@+id/btn1″
android:text=”Button1″
android:layout_weight=”1″
android:layout_width=”wrap_content”>
</Button>
<Button
android:layout_height=”wrap_content”
android:id=”@+id/btn2″
android:text=”Button2″
android:layout_weight=”1″
android:layout_width=”wrap_content”>
</Button>
</LinearLayout>
</LinearLayout>

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.

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:

public class MainActivity extends Activity implements OnSeekBarChangeListener {

İşleticinin metodlarını da eklememiz gerekiyor.

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

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

layoutFile

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.

    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.

dynamicLayout 3

 

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

Uygulamanın tam kodu:

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. Sonraki derste yapacağımız uygulamada hesap makinesini  oluşturacağız.