Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Interface: Custom Button and ImageView


In this article begins a series of articles on customizing applications interface for Android. Today let's talk how to change the appearance of buttons and use the Imageview as a button.



What is used

As the buttons will be used widgets Button and ImageView. The main property for customization in the xml file when creating these widgets for change of appearance:
  • for Button: android:background – background image widget
  • for ImageView:
- android:src – front-end image for widget.
To customize the behavior of the elements necessary to use selector. This is xml-file that specifies which image to use for the different states of the element.
For Button, we use Nine-Patch images that have been created for this article.
For example, we use:
  • ex4_2.9.png - for the normal state of the button (rename to btn_normal.9.png);
  • ex4_3.9.png - for the pressed state of the button (rename to btn_pressed.9.png);
  • ex4_4.9.png - for the disable state of the button (rename to btn_disable.9.png);
Our selector will look like this (drawable/btn_selector.xml):
xml version="1.0" encoding="utf-8"?>
selector xmlns:android="http://schemas.android.com/apk/res/android">
item android:state_pressed="true"
android:drawable="@drawable/btn_pressed" />
      item android:state_enabled="true"
            android:drawable="@drawable/btn_normal" />
      item android:state_enabled="false"
            android:drawable="@drawable/btn_disable" />
selector>
- android:state_pressed="true|false" indicates pressed or normal state of the button;
- android:state_enabled="true|false" indicates an enable or disable state of the button.
Attribute android:drawable is used to set a specific image for the selected state of the element.
We will create a selector to ImageView. For this item, we will use only two states: normal and pressed, and the images we take the usual, not Nine-Patch.
This article describes how to optimize those images for different screen resolutions.
Our selector to ImageView will look like this (drawable/img_selector.xml):
xml version="1.0" encoding="utf-8"?>
selector xmlns:android="http://schemas.android.com/apk/res/android">
      item android:state_pressed="true"
android:drawable="@drawable/img_pressed" />
      item android:state_enabled="true"
android:drawable="@drawable/img_normal" />
selector>

Practice

Now we need to create our interface. We will modify the file main.xml. To add an element selector, use the following construction:
android:background="@drawable/btn_selector"
btn_selector – is the name of xml-file of our selector.
xml version="1.0" encoding="utf-8"?>
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        Button
            android:id="@+id/btn_1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/btn_selector"
            android:text="@string/btn_1" />

        Button
            android:id="@+id/btn_2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/btn_selector"
            android:enabled="false"
            android:text="@string/btn_2" />
    LinearLayout>

    Button
        android:id="@+id/btn_3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_selector"
        android:text="@string/btn_3" />

    ImageButton
        android:id="@+id/img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/img_selector"
        android:scaleType="fitXY"
        android:visibility="invisible" />

LinearLayout>
Now we need to add a behavior to each button in the program. In this example, a 4 elements: 2 buttons width at half-screen, one button for the whole width of the screen and the image size of 100 dp x 100 dp.
 
public class CustomButtonExampleActivity extends Activity{

private Button btn_1, btn_2, btn_3;
private ImageView img;
private Context context;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

this.btn_1 = (Button)findViewById(R.id.btn_1);
this.btn_2 = (Button)findViewById(R.id.btn_2);
this.btn_3 = (Button)findViewById(R.id.btn_3);
this.img = (ImageView)findViewById(R.id.img);
this.context = this;

this.btn_1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
btn_2.setEnabled(true);
v.setEnabled(false);
}
});

this.btn_2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
btn_1.setEnabled(true);
v.setEnabled(false);
}
});

this.btn_3.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
img.setVisibility((img.isShown()) ? View.INVISIBLE : View.VISIBLE);
}
});

this.img.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Toast.makeText(context, "Click", Toast.LENGTH_SHORT).show();
}
});
}

Links

  • The source codes of this project can be downloaded here: zip


This post first appeared on Android Blog By Snowpard, please read the originial post: here

Share the post

Interface: Custom Button and ImageView

×

Subscribe to Android Blog By Snowpard

Get updates delivered right to your inbox!

Thank you for your subscription

×