Sunday, March 28, 2010

Android Button Controls

Android offers three types of button controls


1. The Basic Button.

2. Image Button

3. Toggle Button.

The Basic Button:


The android standard button. It is a subclass of the TextView class so it inherits all of its properties.

<linearlayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"
>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me"
/>
</linearlayout>


If you want to implement the OnClick event handler for a button there are three ways to do it:
First
You can implement the OnClickListner Interface for each single button in the activity like this:

Button btn=(Button)findViewById(R.id.btn);

btn.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
Button btn=(Button)v;
btn.setText("You clicked on the button");
}
}
);

But this will lead to large code blocks with lots of redundancy cause you will do it for each button in your activity.

Second
You can use an activity that implements the OnClickListner Interface and use the onClick method by switching between the buttons IDs:
public class ButtonControls extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.btn1:
//Do something
break;
case R.id.btn2:
// Do something
break;
}
}
}


Third
Since Android 1.6 there was a new cool feature which is the ability to define the on click handlers for the bttons from the XML layout definition. Which is similar to that in ASP.NET.

<button 
android:id="@+id/btn1" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:onClick="ClickHandler" 
android:text="Click Me"
/>
<button 
android:id="@+id/btn2" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:onclick="ClickHandler" 
android:text="Click Me too" 
/>
Then you define the event handler method in your class file in the same normal way

public void ClickHandler(View v) { 
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.btn1:
//Do something
break;
case R.id.btn2:
// Do something
break;
}
}

The ImageButton
The ImageButton control is similar to the Button except it represents a button with an image instead of the text
<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"
/>
<imagebutton 
android:id="@+id/btn1" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:src="@drawable/globe"
/>
</linearlayout>

You can set the image source property from the code like this:
ImageButton btn=(ImageButton)findViewById(R.id.btn1);
btn.setImageResource(R.drawable.globe);


TheToggleButton:
The toggle button is like a check box or radio button, it has two states: On or Off.
The default behavior of ToggleButton is Off state, it displays a gray bar and the text Off.
When in On state it displays a green bar and has the text On.
<?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"
>
<ToggleButton
android:id="@+id/tb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch On"
/>
</LinearLayout>


See that despite we specified the android:text property of the toggle button, it displays the default text “Off”.
This is because ToggleButton inherits from TextView. But practically the android:text property is useless.
Instead we define the android:textOn and android:textOff properties.

In code to check the state of the Toggle button programmatically you can define the click handler in the regular way:
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="Switch On"
android:textOn="Switch Off"
android:id="@+id/btn"
android:onClick="ClickHandler"
/>

Then check the state of it like this:
public void ClickHandler(View v)
{
ToggleButton tg=(ToggleButton)v;
if(tg.isChecked())
//Do something
else
//Do something else
}

here's what it's gonna look like:
<?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"
>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="Switch On"
android:textOn="Switch Off"
/>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="Switch On"
android:textOn="Switch Off"
/>
</LinearLayout>


No comments:

Post a Comment