更新时间 | 修改意见 |
---|---|
2016-08-02 | 陈敏 |
第4节 Button
按钮是需要与用户进行互动的控件。
![](https://i-blog.csdnimg.cn/blog_migrate/900970ea3ec0dfe88b8ffdb947733ebe.png)
Button
继承自TextView
,凡是TextView
有的特定,它都有。
public class Button extends TextView {
......
}
4.1 与TextView
的不同
Button
是使用了特别style的TextView
。在Button
创建的过程中,它使用了一个系统内部的style,
public Button(Context context, AttributeSet attrs) {
//创建Button的时候,系统給它使用了特别的style:com.android.internal.R.attr.buttonStyle
this(context, attrs, com.android.internal.R.attr.buttonStyle);
}
4.2 Button
的使用方式
Button
被点击后,需要有所响应。其实不仅是Button
,所有的View
(包括TextView
)都可以添加响应。
安卓提供了两种响应的方式。
4.2.1 在xml布局文件中设置响应
给
Button
添加一个属性android:onClick,让它的值等于监听函数的函数名。例如,叫onClick<Button ...... <!--设置监听函数onClick()--> android:onClick="onClick"/>
在java源码当中,创建一个
onClick()
函数,声明成public
, 返回void
类型,传入参数View
,public void onClick(View v) { }
使用
View
的getId()
,识别需要响应的对象,添加响应代码,public void onClick(View v) { //使用getId(),识别需要响应的对象 switch(v.getId()) { //添加需要响应的操作代码; case R.id.button1: break; } break; }
4.2.2 在java源码中设置响应
在java源码当中,创建监听器,
OnClickListener mListener = new OnClickListener() { //这个onClick()函数与4.2.1中定义的完全一样 public void onClick(View v) { //使用getId(),识别需要响应的对象 switch(v.getId()) { //添加需要响应的操作代码; } break; } }
通过
findViewById()
得到Button
;再通过View
的setOnClickListener
设置监听器mListener
,//获取xml中的Button对象 Button btn = (Button) findViewById(R.id.my_button); //设置监听器 btn.setOnClickListener( mListener );
虽然这里讲的是Button
响应的onClick
,但实际上,所有的View
都可以响应点击操作。
所有的控件或者布局都是View
的子类,所以它们设置监听的方法也都是一样的。
4.3 按钮点击效果
除了使用系统设计的按钮样式,也可以自己定义按钮按下去和没有按下去的效果。
在
res\drawable\
目录上,点击右键,启动创建drawable resource的向导;创建selector drawable的xml文件,文件名为
button_selector
;这样,就在
res\drawable\
目录下创建了一个名为button_selector.xml
的drawable文件。根据
Button
是否被按下的状态android:state_pressed
,分别为它们设置不同的drawable。android:state_pressed=true
,说明当前按钮被按下,
android:state_pressed=false
,说明当前按钮没有被按下;这里我们用
ColorDrawable
演示设置Drawable。在res\values\colors.xml
中定义的颜色的名字;给android:drawable
属性设置颜色,<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:drawable="@color/colorBtnNormal"/> <item android:state_pressed="true" android:drawable="@color/colorBtnPressed"/> </selector>
如果使用其它类型的Drawable,使用方式类似。
例如背景是图片:按下使用
normal.png
,未按下使用pressed.png
。将这些图片放在res\drawable\
目录下。对应的selector就应该写成,<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:drawable="@drawable/normal"/> <item android:state_pressed="true" android:drawable="@drawable/pressed"/> </selector>
给
Button
的android:background
属性,使用drawable selector,<Button ...... android:background="@drawable/button_selector"/>
/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。
*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。
*最后再次感谢各位读者对安豆
的支持,谢谢:)
/*******************************************************************/