安卓开发学习之014 Button应用详解(样式、背景、按钮单击、长按、双击、多击事件)
一、Button简介
按钮也是继承自TextView
二、XML定义方法
id设置按钮唯一编号
text设置按钮上显示的文本
三、设置按钮背景图片
使用background属性设置背景图片
<Buttonandroid:layout_width&#61;"wrap_content" android:layout_height&#61;"wrap_content" android:background&#61;"&#64;mipmap/yxs" android:text&#61;"Background"/>
四、设置样式
主要是定义按钮三种状态下分别对应的背景样式
默认状态、获得焦点&#xff08;android:state_focused&#61;“true”&#xff09;、
按下时&#xff08;android:state_pressed&#61;“true”&#xff09;
<Buttonandroid:layout_width&#61;"wrap_content" android:layout_height&#61;"wrap_content" android:background&#61;"&#64;drawable/bg_border" android:text&#61;"Button_Shape"/> <Button android:layout_width&#61;"wrap_content" android:layout_height&#61;"wrap_content" android:background&#61;"&#64;drawable/button_selector" android:text&#61;"Button_Selector1"/> <Button android:layout_width&#61;"wrap_content" android:layout_height&#61;"wrap_content" android:background&#61;"&#64;drawable/selector_button_start" android:text&#61;"Button_Selector2"/>
三个文件drawable文件代码如下&#xff1a;
1.res/drawable/bg_border.xml
<shape xmlns:android&#61;"http://schemas.android.com/apk/res/android" android:shape&#61;"rectangle"> <corners android:radius&#61;"10dp"/> <gradient android:centerColor&#61;"#00ff00" android:endColor&#61;"#0000ff" android:startColor&#61;"#ff0000" android:type&#61;"linear" /> <padding android:bottom&#61;"2dp" android:left&#61;"2dp" android:right&#61;"2dp" android:top&#61;"2dp"/> <size android:width&#61;"50dp" android:height&#61;"50dp"/> <stroke android:width&#61;"2dp" android:color&#61;"#f0f" /> shape>
2.res/drawable/button_selector.xml
<selectorxmlns:android&#61;"http://schemas.android.com/apk/res/android"> <item android:state_pressed&#61;"true"> <shape> <stroke android:width&#61;"2dp" android:color&#61;"#fad3cf"/> <solid android:color&#61;"#87CEFF"/> <padding android:bottom&#61;"10dp" android:left&#61;"10dp" android:right&#61;"10dp" android:top&#61;"10dp"/> <corners android:bottomLeftRadius&#61;"10dp" android:bottomRightRadius&#61;"10dp" android:topLeftRadius&#61;"10dp" android:topRightRadius&#61;"10dp"/> shape> item> <item android:state_focused&#61;"true"> <shape> <gradient android:angle&#61;"270" android:centerColor&#61;"#00ff00" android:endColor&#61;"#ffc2b7" android:startColor&#61;"#f0f" android:type&#61;"sweep"/> <stroke android:width&#61;"2dp" android:color&#61;"#dcdcdc"/> <corners android:bottomLeftRadius&#61;"10dp" android:bottomRightRadius&#61;"10dp" android:topLeftRadius&#61;"10dp" android:topRightRadius&#61;"10dp"/> <padding android:bottom&#61;"10dp" android:left&#61;"10dp" android:right&#61;"10dp" android:top&#61;"10dp"/> shape> item> <item> <shape> <gradient android:centerColor&#61;"#00ff00" android:endColor&#61;"#FFFFFF" android:startColor&#61;"#ff8c00" android:type&#61;"linear"/> <stroke android:width&#61;"2dp" android:color&#61;"#dcdcdc" android:dashGap&#61;"3dp" android:dashWidth&#61;"5dp"/> <corners android:bottomLeftRadius&#61;"10dp" android:bottomRightRadius&#61;"10dp" android:topLeftRadius&#61;"10dp" android:topRightRadius&#61;"10dp"/> <padding android:bottom&#61;"10dp" android:left&#61;"10dp" android:right&#61;"10dp" android:top&#61;"10dp"/> shape> item> selector>
效果如下&#xff1a;
3.res/drawable/selector_button_start.xml
<selector xmlns:android&#61;"http://schemas.android.com/apk/res/android" > <item android:drawable&#61;"&#64;mipmap/search_bar_edit_pressed" android:state_pressed&#61;"true"/> <item android:drawable&#61;"&#64;mipmap/button_start_click" android:state_focused&#61;"true"/> <item android:drawable&#61;"&#64;mipmap/search_bar_edit_normal">item> selector>
四、按钮点击事件的处理方式
按钮点击有四种处理方法。
第一种是通过onClick属性&#xff0c;通过这个属性设置处理点击事件的方法名&#xff0c;在Activity中实现这个方法。
第二种是典型的事件监听机制setOnClickListener的应用形式&#xff0c;下面详细说明这四种方法。
1.通过onClick属性设置处理方法
在XML布局文件中设置Button的属性&#xff1a;
android:onClick&#61;”yourMethodName”
然后在该布局文件对应的Acitivity中实现该方法&#xff1a;
需要注意的是这个方法必须符合三个条件&#xff1a;
1.public
2.返回void
3.只有一个参数View&#xff0c;这个View就是被点击的这个控件。
也可为多个Button设置同一个方法名&#xff0c;然后在方法内使用switch方法判断点击的是哪个按钮
如下&#xff1a;
2.使用setOnClickListener添加监听器对象
Button button01 &#61; (Button) findViewById(R.id.button01);//短按点击事件监听button01.setOnClickListener(new View.OnClickListener() {&#64;Overridepublic void onClick(View v) { Toast.makeText(ButtonActivity.this, "OnClickListener", Toast.LENGTH_SHORT).show(); } });
此种方法还有几个变种:
1.自定义类实现OnClickListener接口
//自定义类实现OnClickListener接口private MyOnClickListener mOnClickListener &#61; new MyOnClickListener();private class MyOnClickListener implements View.OnClickListener { &#64;Override public void onClick(View v) { switch (v.getId()) { //TODO } } } 然后调用 button01.setOnClickListener(mOnClickListener); button02.setOnClickListener(mOnClickListener);
此种方法的好处是当多个按钮要处理的事件逻辑是一样的话&#xff0c;不用每个按钮都写一个setOnClickListener监听事件&#xff0c;并实现Onclick方法
2.使Activity实现OnClickListener接口,并在Activity中实现Onclick方法
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener{ &#64;Override public void onClick(View v) { switch (v.getId()) { //TODO } } }
3.长按事件监听
//长按(长按2秒以上)点击事件监听button01.setOnLongClickListener(new View.OnLongClickListener() {&#64;Overridepublic boolean onLongClick(View v) { Toast.makeText(ButtonActivity.this, "OnLongClickListener", Toast.LENGTH_SHORT) .show(); return true; } });
五、双击事件判定
主要代码如下
private static int DOUBLE_CLICK_TIME &#61; 1000;private List
使用方法&#xff1a;在onClick&#xff08;View v&#xff09;方法中调用
Button button02 &#61; (Button) findViewById(R.id.button02);button02.setOnClickListener(new View.OnClickListener() {&#64;Overridepublic void onClick(View v) { times.add(SystemClock.uptimeMillis()); isDoubleClick(); } });
六、多击事件
/**多击事件判断*/private boolean isMultiClick() {int size &#61; times.size(); //处理多击事件 if (size > 1) { if (times.get(size - 1) - times.get(size - 2)
效果如下&#xff1a;
开发工具&#xff1a;Android Studio1.4
SDK: Android 6.0
API 23
代码下载&#xff1a;Button.zip
版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请注明来源。