Android应用开发学习之Selector

作者:刘昊昱 

博客:http://blog.csdn.net/liuhaoyutz

 

本文我们来看一个通过selector动态改变ImageButton背景图片的例子,下图是该程序的运行效果:

该程序中有三个ImageButton,最上面的是鼠标按下时的状态;中间的是鼠标没有按下,但是按钮获得了焦点的状态;最下面的是鼠标没有按下,按钮也不具有焦点的状态。

先来看主布局文件main.xml,其内容如下:

<?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" >
    
    <ImageButton 
		android:id="@+id/button1" 
		android:src="@drawable/button_image_selector" 
		android:focusableInTouchMode="true"
		android:background="#0000"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content">
	</ImageButton>
	
    <ImageButton 
		android:id="@+id/button2" 
		android:src="@drawable/button_image_selector" 
		android:focusableInTouchMode="true"
		android:background="#0000"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content">
	</ImageButton>
	
    <ImageButton 
		android:id="@+id/button3" 
		android:src="@drawable/button_image_selector" 
		android:focusableInTouchMode="true"
		android:background="#0000"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content">
	</ImageButton>

</LinearLayout>


在线性布局控件中,放置三个ImageButton,android:src属性指定了背景图片选择器button_image_selector.xml,android:focusableInTouchMode属性标明按钮可以获得焦点。android:background="#0000"属性是为了去掉按钮背后的灰色边框,但是这样做,如果不用背景选择器的话,会看不出点击效果。

按钮背景图片选择器button_image_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/image01"/>
    <item android:state_pressed="false" android:state_focused="true" android:drawable="@drawable/image02"/>
    <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/image03"/>
</selector>


item1指定了鼠标按下时的背景图片,item2指定了鼠标没有按下,但是获得焦点时的背景图片,item3指定了鼠标没有按下,且没有焦点时的背景图片。

主Activity文件没有什么特别的,其内容如下:

package com.liuhaoyu;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
原文地址:https://www.cnblogs.com/riskyer/p/3231110.html