设计具有背景图的按钮------ImageButton的焦点及事件处理

来源:互联网 发布:电脑屏幕监视软件 编辑:程序博客网 时间:2024/06/15 02:51

范例说明

延续前一章按钮事件的应用范例重新设计一个具有背景图的按钮,让按钮有美观的背景图片,只是这次不使用先前的Button Widget,而是改以ImageButton Widget来显示。

 

将按钮背景图预先Import至Drawable里(*.png图形文件),利用这些图片,作为ImageButton的背景图。为了做对照,我们另外在Layout配置一个"一般按钮",运行结果画面中,可以明显看出图片按钮与一般按钮在外观上的差异。

一般来说,要设置ImageButton背景图有许多方法,此程序使用的方法是ImageButton.setImage- Resource(),需要传递的参数即是res/drawable/下面的Resource ID,除了设置背景图片的方法外,程序需要用到onFocusChange与onClick等按钮事件作为按钮事件单击之后的处理,最后通过TextView来显示目前图片按钮的状态为onClick、onFocus,或offFocus,并且同步更新按钮的背景图,让User有动态交互的感觉。

运行结果

范例程序

  1. src/irdc.ex04_02/EX04_02.java

主程序构造三个对象ImageButton、Button与TextView,并在ImageButton上设置onFocus ChangeListener与onClickListener,并实现Image Button图片的置换。

ImageButton.setOnFocusChangeListener()是处理User单击图片按钮之后需要处理的关键,当单击图片按钮的瞬间,以ImageButton.setImageResource()来更换背景图片。

 

  1. /* import程序略 */  
  2. import android.view.View.OnClickListener;  
  3. import android.view.View.OnFocusChangeListener;  
  4.  
  5. public class EX04_02 extends Activity   
  6. {  
  7.   /*声明三个对象变量(图片按钮,一般按钮,与TextView)*/  
  8.   private ImageButton mImageButton1;  
  9.   private Button mButton1;  
  10.   private TextView mTextView1;  
  11.     
  12.   /** Called when the activity is first created. */  
  13.   @Override  
  14.   public void onCreate(Bundle savedInstanceState)  
  15.   {  
  16.     super.onCreate(savedInstanceState);  
  17.     setContentView(R.layout.main);  
  18.       
  19.     /*通过findViewById构造三个对象*/  
  20.     mImageButton1 =(ImageButton) findViewById(R.id.myImageButton1);  
  21.     mButton1=(Button)findViewById(R.id.myButton1);  
  22.     mTextView1 = (TextView) findViewById(R.id.myTextView1);  
  23.       
  24.     /*通过OnFocusChangeListener来响应ImageButton的onFous事件*/  
  25.     mImageButton1.setOnFocusChangeListener(new OnFocusChangeListener()  
  26.     {  
  27.       public void onFocusChange(View arg0, boolean isFocused)  
  28.       {  
  29.         // TODO Auto-generated method stub  
  30.           
  31.         /*若ImageButton状态为onFocus改变ImageButton的图片  
  32.          * 并改变textView的文字*/  
  33.         if (isFocused==true)  
  34.         {  
  35.           mTextView1.setText("图片按钮状态为:Got Focus");  
  36.           mImageButton1.setImageResource(R.drawable.iconfull);  
  37.         }  
  38.         /*若ImageButton状态为offFocus改变ImageButton的图片  
  39.          *并改变textView的文字*/  
  40.         else   
  41.         {  
  42.           mTextView1.setText("图片按钮状态为:Lost Focus");  
  43.           mImageButton1.setImageResource(R.drawable.iconempty);  
  44.         }  
  45.       }  
  46.     });  
  47.          
  48.     /*通过onClickListener来响应ImageButton的onClick事件*/  
  49.     mImageButton1.setOnClickListener(new OnClickListener()  
  50.     {  
  51.       public void onClick(View v)  
  52.       {  
  53.         // TODO Auto-generated method stub  
  54.         /*若ImageButton状态为onClick改变ImageButton的图片  
  55.          * 并改变textView的文字*/  
  56.         mTextView1.setText("图片按钮状态为:Got Click");  
  57.         mImageButton1.setImageResource(R.drawable.iconfull);  
  58.       }     
  59.     });  
  60.         
  61.     /*通过onClickListener来响应Button的onClick事件*/  
  62.     mButton1.setOnClickListener(new OnClickListener()  
  63.     {  
  64.       public void onClick(View v)  
  65.       {  
  66.         // TODO Auto-generated method stub  
  67.         /*若Button状态为onClick改变ImageButton的图片  
  68.          * 并改变textView的文字*/  
  69.         mTextView1.setText("图片按钮状态为:Lost Focus");  
  70.         mImageButton1.setImageResource(R.drawable.iconempty);  
  71.       }   
  72.     });   
  73.   }  

扩展学习

除了在运行时用onFocus()与onClick()事件来设置按钮背景图片外,Android的MVC设计理念可以让程序运行之际初就以xml定义的方式来初始化ImageButton的背景图,这仅需先将图片导入res/drawable。

设置方法为在res/drawable下自行定义一个xml,主要针对按钮的state_focused、state_pressed与drawable属性作设置,如下所示:

  1. drawable/advancedbutton.xml  
  2. <?xml version="1.0" encoding="utf-8"?>    
  3. <selector 
  4.   xmlns:android="http://schemas.android.com/apk/res/android"> 
  5.   <item 
  6.     android:state_focused="true" 
  7.     android:state_pressed="false" 
  8.     android:drawable="@drawable/btnfocused" /> 
  9.   <item 
  10.     android:state_focused="true" 
  11.     android:state_pressed="true" 
  12.     android:drawable="@drawable/btnfocusedpressed" /> 
  13.   <item 
  14.     android:state_focused="false" 
  15.     android:state_pressed="true" 
  16.     android:drawable="@drawable/btnpressed" /> 
  17.   <item android:drawable="@drawable/btndefault" /> 
  18. </selector> 

然后,在main.xml中将advancedbutton赋值给Button组件中background的属性。

  1. layout/main.xml  
  2. <Button   
  3.   android:id="@+id/myButton1" 
  4.   android:background="@drawable/advancedbutton" 
  5.   android:layout_width="wrap_content" 
  6.   android:layout_height="wrap_content" 
  7.   android:text="@string/str_button1" 
  8. /> 

如此一来,即可实现如同本范例程序所展示的效果。
注意:导入图片的方法:把图片放到res/drawable目录下,目录不存在则新建

原创粉丝点击