标签:
按钮是需要与用户进行互动的控件。
Button
继承自TextView
,凡是TextView
有的特定,它都有。
public class Button extends TextView {
......
}
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);
}
Button
的使用方式Button
被点击后,需要有所响应。其实不仅是Button
,所有的View
(包括TextView
)都可以添加响应。
安卓提供了两种响应的方式。
给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;
}
在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
的子类,所以它们设置监听的方法也都是一样的。
除了使用系统设计的按钮样式,也可以自己定义按钮按下去和没有按下去的效果。
在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\mimap\
目录下。对应的selector就应该写成,
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@mipmap/normal"/>
<item android:state_pressed="true" android:drawable="@mipmap/pressed"/>
</selector>
给Button
的android:background
属性,使用drawable selector,
<Button
......
android:background="@drawable/button_selector"/>
标签:
原文地址:http://blog.csdn.net/anddlecn/article/details/51555693