View Reference Link
View sınıfı android.view
içerisindedir.
View : Her bir görsel elemana view denir . buton , checkbox ,editText gibi.
View group: görünür view elemanlarının grup halinde olanı denilebilir. RadioButton Group gibi.
Projelerde tercih ettiğimiz İsimlendirme
Button
- Button sınıfı android.widget isimli sınıftan türetilmiştir.
- C# daki gibi event yapısı yok.
Butona basılma durumunu ele alma 3 şekilde yapılabilir.
Listener
sınıflarla yapılır. Android 1.5'den sonra C# daki yapıya benzer bir yapı getirildi.Butona ait Property'denonClick
metodu tanımlanarak yapılabilir.View.OnClickListener
interface'ini destekleyen bir sınıf yazarakMainActivity'ye
View.OnClickListiner
interface'i implemente edilerek
Butonun xml yapısı
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="center_horizontal"
/>
android:layout_width
- fill parrent : deprecated
- match parrent : layoutun boyutu kadar yap
- wrap content : içerik kadar boyut oluştur.
- inch, pixel, dpi da verilebilir.
android:id
android:id="@+id/MAINCACTIVITY_BUTTON_SEND"
Elemana ait idnin verilmesi burada yapılır.İsimlendirme yaparken Activity adı , View elemanının cinsi gibi bilgiler ve elemanın görevi girilirse projede kolaylık sağlar. Stringin başlangıcındaki "@+id/" ise R sınıfının içinde verilen isimde veri elemanı generate et anlamına gelmektedir.Verilen isimlendirme
R
sınıfı altındapublic static final int
olarak sayısal bir değerin adı olarak tanımlanır.Erişmek için
R.id.MAINACTIVTY_BUTTON_SEND
ile ulaşılabilir.
1. onClick
Metoduyla Butonun Kullanımı
Bu yöntem tüm View elemanlarında geçerli değildir.
- property'den
onClick
metodu eklenerek ya da - content_main.xml içersine ilgili butona
android:onClick="<BUTONAAITMETOD>"
eklenir. - MainActiviy içerisine metod ,
public void <BUTONAAITMETOD>(View v)
olacak şekilde yazılır.
content_main.xml
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="BUTTON1"
android:id="@+id/button"
android:layout_gravity="center_horizontal"
android:onClick="okButtonClick"
/>
MainActivity.java
package csd.samples.gui;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void okButtonClick(View w)
{
Toast.makeText(this , "Basildi" , Toast.LENGTH_SHORT).show();
}
}
Tek metodla birden fazla buton Handle etmek için
content_main.xml
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="OK"
android:id="@+id/MAINACTIVITY_BUTTON_OK"
android:onClick="ButtonClick"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="CLOSE"
android:id="@+id/MAINACTIVITY_BUTTON_CLOSE"
android:onClick="ButtonClick"
/>
MainActivity
public void ButtonClick(View v)
{
switch(v.getId())
{
case R.id.MAINACTIVITY_BUTTON_OK:
Toast.makeText(this , "Ok butonuna basildi" , Toast.LENGTH_SHORT).show();
break;
case R.id.MAINACTIVITY_BUTTON_CLOSE:
Toast.makeText(this , "Close butonuna basildi" , Toast.LENGTH_SHORT).show();
break;
}
}
2. View.OnClickListener
Interface'ini destekleyen bir sınıf yazarak
Button m_buttonStartStop
yaratılır.onCreate metodunda
m_buttonStartStop
'un ilk değer atamasıfindViewById(R.id.<BUTONID>)
'nin döndürdüğü değerin (View) Buttona cast edilmesi ile yapılır.Bu butonun
setOnClickListener
metodunaOnClickListiner
Interface'ini destekleyen bir sınıf geçilir.
content_main.xml
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/MAINACTIVITY_BUTTON_STARTSTOP"
android:layout_gravity="center_horizontal"/>
OnClickListiner'ın anonim yaratılmış hali
MainActivity.java
package csd.samples.gui;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity
{
private Button m_buttonStartStop;
private void init()
{
m_buttonStartStop = (Button)this.findViewById(R.id.MAINACTIVITY_BUTTON_STARTSTOP);
View.OnClickListener listener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
m_buttonStartStop.setText(m_buttonStartStop.getText().toString().compareTo("Start") == 0 ? "Stop" : "Start");
}
};
m_buttonStartStop.setOnClickListener(listener);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.init();
}
}
OnClickListiner'ın ayrı bir classda implemente edilmiş hali
MainActivity.java
private void init()
{
m_buttonStartStop = (Button)this.findViewById(R.id.R_id_MAINACTIVITY_BUTTON_STARTSTOP);
m_buttonStartStop.setOnClickListener(new StartStopButtonListener());
}
class StartStopButtonListener implements View.OnClickListener
{
@Override
public void onClick(View view)
{
m_buttonStartStop.setText(m_buttonStartStop.getText().toString().compareTo("Start") == 0 ? "Stop" : "Start");
}
}
3. MainActivity'ye View.OnClickListiner
Interface'i implemente edilerek
- 2.yöntemden farkı , yeni bir sınıf yazıp onun
OnClickListiner
'i desteklemesini sağlamak yerine direk MainActivity'iOnClickListiner
'i destekler hale getirmek - MainActivity'ye
OnclickListener
'i implemente ediyoruz. onClick
metodunu override ediyoruz.- Butonun
setOnClickListener
metodunaOnClickListiner
Interface'ini destekleyen (kendisini)this
ile geçiyoruz.
content_main.xml
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="On"
android:id="@+id/MAINACTIVITY_BUTTON_ONOFF"/>
MainActivity.java
package csd.samples.gui;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
private Button m_buttonOnOff;
private void init()
{
m_buttonOnOff = (Button)this.findViewById(R.id.MAINACTIVITY_BUTTON_ONOFF);
m_buttonOnOff.setOnClickListener(this); //3.Yöntem
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.init();
}
@Override
public void onClick(View v)
{
m_buttonOnOff.setText(m_buttonOnOff.getText().toString().compareTo("On") == 0 ? "Off" : "On");
}
}
EditText (TextBox)(Label)
- Klavyeden yazı girişini sağlar.
- android.widget.TextView sınıfından türetilmiştir.
android.widget paketi içerisindedir.
Property'den inputType özelliğiyle kullanıcının sadece istenilen formatta giriş yapması sağlanır.- Plain Text : tüm karakterler girilebilir.
- Person Name: sadece isim
- email : email formatında
- ...
activity_main.xml
android:inputType="textAutoComplete"/> //tek giriş seçimi
android:inputType="number|numberSigned|numberDecimal" //birden fazla giriş için
- maxLength : EditText'e girilecek olan yazının max uzunluğu
- maxLines minLines : InputType Multiline seçildiğinde max ve min satır sayısı ile sınırlandırılabilir.
Örnek Kod
EditTexte girilen Text'i Butona basılınca Toast Mesaja yazdır.
content_main.xml
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Adinizi Giriniz"
android:id="@+id/MAINACTIVITY_EDITTEXT_NAME"
android:inputType="text"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/MAINACTIVITY_BUTTON_OK"
android:text="OK"
/>
MainActivity.java
package csd.samples.gui;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText m_editTextTest;
private Button m_button;
private void init()
{
m_editTextTest = (EditText)this.findViewById(R.id.MAINACTIVITY_EDITTEXT_NAME);
m_button = (Button)this.findViewById(R.id.MAINACTIVITY_BUTTON_OK);
m_button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(getBaseContext(), m_editTextTest.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.init();
}
}
CheckBox & Switch(Andorid 4.0) Kontrolleri
- Listener Interface'i
CompoundButton.OnCheckedChangeListener
- Override Edilmesi gereken metod (Ctrl+ O)
public void onCheckedChanged(CompoundButton compoundButton, boolean b){}
- CheckBox'ın setListener metodu
switch.setOnCheckedChangeListener(this);
.
- onClickListiner ile de click metodu yazilabilir.Fakat Android'in Sürümlerinde tema değiştiğinde onClick metodu çalışmayabilir.
- ID standarti burada da gecerli.
- xml tarafindan ya da property sekmesinden default degeri degistirilebilir.
- Screen Orientation'da son konumu kendisi saklar.Xml dosyasındaki tum durumlar otomatik saklanır.
- Android'de 2 durum söz konusu
- check
- uncheck
- Windows'ta 3 durum söz konusu
- check
- uncheck
- undetermined belirsiz
boolean checkBox.isChecked()
: check edildi mivoid checkBox.setChecked(Boolean b)
: true check , false uncheck yaparswitch1.setTextOff("Off");
false olduğundaki textswitch1.setTextOn("On");
true olduğundaki text
Örnek Kod
CheckBox değiştiğinde Toast mesajda checkBox stateini yaz.
CompoundButton.OnCheckedChangeListener
implemente edilir.onCheckedChanged
metodu override edilir.setOnCheckedChangeListener(this)
ile Listener set edilir.onCheckedChanged
metodu içinde isChecked* ile checkBox kontrol edilir.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.csystem.checkbox.MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<Switch
android:text="Switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/MAINACTIVITY_SWITCH_1"/>
<Switch
android:text="Switch2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/MAINACTIVITY_SWITCH_2"/>
<Switch
android:text="Switch3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/MAINACTIVITY_SWITCH_3"/>
</LinearLayout>
</LinearLayout>
MainActivity.java
package org.csystem.checkbox;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener
{
private Switch m_switch1 , m_switch2 , m_switch3;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init()
{
m_switch1 = (Switch)this.findViewById(R.id.MAINACTIVITY_SWITCH_1);
m_switch2 = (Switch)this.findViewById(R.id.MAINACTIVITY_SWITCH_2);
m_switch3 = (Switch)this.findViewById(R.id.MAINACTIVITY_SWITCH_3);
m_switch1.setOnCheckedChangeListener(this);
m_switch2.setOnCheckedChangeListener(this);
m_switch3.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b)
{
Switch s = (Switch)compoundButton;
Toast.makeText(MainActivity.this , s.isChecked()? s.getText()+" Acik" : s.getText()+" Kapali" , Toast.LENGTH_SHORT).show();
}
}
Toggle
- Açma Kapama işlemlerinde kullanılır.
- Switch Benzeridir.
- Listener Interface'i OnClickListener
toggle.getTextOn()//getTextOff
xmlde ya da kodda verilen isimlendirmeleri almakta kullanılır.toogleButton.toogle()
diyerek durumunun değili alinanbilir.Butun iki durumlu kontroller icin gecerlidir.boolean checkBox.isChecked()
: check edildi mivoid checkBox.setChecked(Boolean b)
: true check , false uncheck yapar
Radio Group
- Tüm Gui Sistemlerinde bulunur.
- Birden fazla seçenekden sadece birinin seçilmesini sağlar.
Birden fazla oldugu icin gruplayabilmek adina RadioGrouplar vardir.
- Fiziksel elemanlari gruplandirmak icin = Layout
- Mantiksal gruplandirma yapmak icin = Viewgroup-Radio Group
listeneri
RadioButton.OnCheckedChangeListener
RadioGroup
Kullanılacak olan radio butonlarını gruplamak için kullanılır.Ve hangi radio butonun seçildiğini bulmayı kolaylaştırmak içindir.
setOnCheckedChangeListener()
ile Listineri set edilir.OnCheckedChangeListener sınıfının metodu :
public void onCheckedChanged(RadioGroup radioGroup, int id)
- id : hangi radioButton seçildiyse onun idsini veririr.
- group : hangi radio grubundaki radiobutonun secildigini verir.
Seçili Radio Butonunu bulmanın kolay yolu
Seçili olan butonun id'sini almak için:
RadioButton kb = (radioGroup)this.findById(m_radioGroupMs.getCheckedRadioButtonId)
Seçili olmayan Radio Butonunu bulmanın kolay yolu
- getChildCount ile RadioGroupun kac elemani oldugu alinir
- getChildAt ile View turunden elemanlarina ulasilir.
for(int i=0 ; i< radiosGroup.getChildCount ; i++)
{
RadioButton rb = getChildAt(i);
if(!rb.isChecked())
msg += rb.getText;
}
Test Sorusu Örneği
- 4 Şıklı bir soru sorulsun ve cevap seçilip butona basılınca doğru yanlıs olarak cevaplansın
- Seçilen her şıkta bir toast açılır ve seçilen şık ekrana yazıdırılır.
- Cevabı göster butonuna basılınca seçilen cevap doğru mu yanlış mı kontrol edilir.
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="org.csystem.radiogroupsample.MainActivity"
tools:showIn="@layout/activity_main"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SORU : 3*4+2 = ?"
android:id="@+id/textView"/>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/MAINACTIVITY_RADIOGROUP_QUESTION1">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A)18"
android:id="@+id/MAINACTIVITY_RADIOBUTTON_A"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B)16"
android:id="@+id/MAINACTIVITY_RADIOBUTTON_B"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C)14"
android:id="@+id/MAINACTIVITY_RADIOBUTTON_C"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D)12"
android:id="@+id/MAINACTIVITY_RADIOBUTTON_D"/>
</RadioGroup>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="CEVABI GOSTER"
android:id="@+id/MAINACTIVITY_BUTTON_SHOWANSWER"
android:layout_gravity="center_vertical"/>
</LinearLayout>
MainActivity.java
package org.csystem.radiogroupsample;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity
{
private RadioGroup m_radioGroup_question1;
private Button m_button_showAnswer;
private void InitializeComponent()
{
m_radioGroup_question1 = (RadioGroup)this.findViewById(R.id.MAINACTIVITY_RADIOGROUP_QUESTION1);
m_button_showAnswer = (Button) this.findViewById(R.id.MAINACTIVITY_BUTTON_SHOWANSWER);
//RadioGroup icerisinde hangi RadioButton secilirse onu ekrana yazma Listineri
m_radioGroup_question1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int id)
{
RadioButton rb = (RadioButton) MainActivity.this.findViewById(id);
Toast.makeText(MainActivity.this , String.format("Secilen şık:%s",rb.getText().toString()),Toast.LENGTH_SHORT).show();
}
});
//Butona tiklandiginda secilen cevapla dogru cevabi karsilastir ve ekrana yazdir.
m_button_showAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
String msg = m_radioGroup_question1.getCheckedRadioButtonId() == R.id.MAINACTIVITY_RADIOBUTTON_C ? "Doğru Cevap" : "Yanlış Cevap";
Toast.makeText(MainActivity.this , msg ,Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitializeComponent();
}
}