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"
>
<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:
FirstYou 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.
SecondYou 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;
}
}
}
ThirdSince 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 ImageButtonThe
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"
/>
<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
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
}
heres what its gonna look like:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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>