安卓开发学习之014 Button应用详解(样式、背景、按钮单击、长按、双击、多击事件)

一、Button简介

按钮也是继承自TextView

二、XML定义方法

  1. <Button
  2. android:id="@+id/button01"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:text="Button_Click"/>

id设置按钮唯一编号
text设置按钮上显示的文本

三、设置按钮背景图片

使用background属性设置背景图片

  1. <!-- 背景设置-->
  2. <Button
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:background="@mipmap/yxs"
  6. android:text="Background"/>

四、设置样式

主要是定义按钮三种状态下分别对应的背景样式
默认状态、获得焦点(android:state_focused=“true”)、
按下时(android:state_pressed=“true”)

  1. <!-- 使用单一shape定义样式-->
  2. <Button
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:background="@drawable/bg_border"
  6. android:text="Button_Shape"/>
  7. <!-- 使用selector定义样式,其中包括三种状态下的shape-->
  8. <Button
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:background="@drawable/button_selector"
  12. android:text="Button_Selector1"/>
  13. <!-- 使用selector定义样式,其中包括三种状态下所使用的图片-->
  14. <Button
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:background="@drawable/selector_button_start"
  18. android:text="Button_Selector2"/>

三个文件drawable文件代码如下:

1.res/drawable/bg_border.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <!-- 圆角 -->
  5. <corners
  6. android:radius="10dp"/>
  7. <!-- 设置圆角半径 -->
  8. <!-- 渐变 -->
  9. <gradient
  10. android:centerColor="#00ff00"
  11. android:endColor="#0000ff"
  12. android:startColor="#ff0000"
  13. android:type="linear"
  14. />
  15. <!-- 间隔 -->
  16. <padding
  17. android:bottom="2dp"
  18. android:left="2dp"
  19. android:right="2dp"
  20. android:top="2dp"/>
  21. <!-- 各方向的间隔 -->
  22. <!-- 大小 -->
  23. <size
  24. android:width="50dp"
  25. android:height="50dp"/>
  26. <!-- 宽度和高度 -->
  27. <!-- 填充 -->
  28. <!--<solid-->
  29. <!--android:color="@android:color/white"/>-->
  30. <!-- 填充的颜色 -->
  31. <!-- 描边 -->
  32. <stroke
  33. android:width="2dp"
  34. android:color="#f0f"
  35. />
  36. </shape>

2.res/drawable/button_selector.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector
  3. xmlns:android="http://schemas.android.com/apk/res/android">
  4. <!--按下时样式-->
  5. <item android:state_pressed="true">
  6. <shape>
  7. <!-- 描边 -->
  8. <stroke
  9. android:width="2dp"
  10. android:color="#fad3cf"/>
  11. <solid android:color="#87CEFF"/>
  12. <padding
  13. android:bottom="10dp"
  14. android:left="10dp"
  15. android:right="10dp"
  16. android:top="10dp"/>
  17. <!-- 圆角 -->
  18. <corners
  19. android:bottomLeftRadius="10dp"
  20. android:bottomRightRadius="10dp"
  21. android:topLeftRadius="10dp"
  22. android:topRightRadius="10dp"/>
  23. </shape>
  24. </item>
  25. <!-- 获得焦点时样式-->
  26. <item android:state_focused="true">
  27. <shape>
  28. <gradient
  29. android:angle="270"
  30. android:centerColor="#00ff00"
  31. android:endColor="#ffc2b7"
  32. android:startColor="#f0f"
  33. android:type="sweep"/>
  34. <stroke
  35. android:width="2dp"
  36. android:color="#dcdcdc"/>
  37. <corners
  38. android:bottomLeftRadius="10dp"
  39. android:bottomRightRadius="10dp"
  40. android:topLeftRadius="10dp"
  41. android:topRightRadius="10dp"/>
  42. <padding
  43. android:bottom="10dp"
  44. android:left="10dp"
  45. android:right="10dp"
  46. android:top="10dp"/>
  47. </shape>
  48. </item>
  49. <!-- 默认样式-->
  50. <item>
  51. <shape>
  52. <!-- 渐变 -->
  53. <gradient
  54. android:centerColor="#00ff00"
  55. android:endColor="#FFFFFF"
  56. android:startColor="#ff8c00"
  57. android:type="linear"/>
  58. <!-- 描边 -->
  59. <stroke
  60. android:width="2dp"
  61. android:color="#dcdcdc"
  62. android:dashGap="3dp"
  63. android:dashWidth="5dp"/>
  64. <!-- 圆角 -->
  65. <corners
  66. android:bottomLeftRadius="10dp"
  67. android:bottomRightRadius="10dp"
  68. android:topLeftRadius="10dp"
  69. android:topRightRadius="10dp"/>
  70. <padding
  71. android:bottom="10dp"
  72. android:left="10dp"
  73. android:right="10dp"
  74. android:top="10dp"/>
  75. <!--<solid android:color="#ffc2b7"/>-->
  76. </shape>
  77. </item>
  78. </selector>

效果如下:


3.res/drawable/selector_button_start.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <item android:drawable="@mipmap/search_bar_edit_pressed" android:state_pressed="true"/>
  4. <item android:drawable="@mipmap/button_start_click" android:state_focused="true"/>
  5. <item android:drawable="@mipmap/search_bar_edit_normal"></item>
  6. </selector>

四、按钮点击事件的处理方式

按钮点击有四种处理方法。
第一种是通过onClick属性,通过这个属性设置处理点击事件的方法名,在Activity中实现这个方法。
第二种是典型的事件监听机制setOnClickListener的应用形式,下面详细说明这四种方法。

1.通过onClick属性设置处理方法

  在XML布局文件中设置Button的属性:
  android:onClick=”yourMethodName”
  然后在该布局文件对应的Acitivity中实现该方法:
需要注意的是这个方法必须符合三个条件:
1.public
2.返回void
3.只有一个参数View,这个View就是被点击的这个控件。
也可为多个Button设置同一个方法名,然后在方法内使用switch方法判断点击的是哪个按钮

如下:

  1. <Button
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:background="@drawable/button_selector"
  5. android:onClick="MyClick"
  6. android:text="Button_onClick"/>
  7. java代码中
  8. /**
  9. * 在XML中配置置android:onClick="MyClick"
  10. * 必须设置为public void
  11. */
  12. public void MyClick(View view) {
  13. // switch (view.getId())
  14. // {
  15. // //TODO
  16. // }
  17. Toast.makeText(ButtonActivity.this, "android:onClick=\"MyClick\"", Toast.LENGTH_SHORT)
  18. .show();
  19. }

2.使用setOnClickListener添加监听器对象

  1. Button button01 = (Button) findViewById(R.id.button01);
  2. //短按点击事件监听
  3. button01.setOnClickListener(new View.OnClickListener() {
  4. @Override
  5. public void onClick(View v) {
  6. Toast.makeText(ButtonActivity.this, "OnClickListener", Toast.LENGTH_SHORT).show();
  7. }
  8. });

此种方法还有几个变种:
1.自定义类实现OnClickListener接口

  1. //自定义类实现OnClickListener接口
  2. private MyOnClickListener mOnClickListener = new MyOnClickListener();
  3. private class MyOnClickListener implements View.OnClickListener {
  4. @Override
  5. public void onClick(View v) {
  6. switch (v.getId()) {
  7. //TODO
  8. }
  9. }
  10. }
  11. 然后调用
  12. button01.setOnClickListener(mOnClickListener);
  13. button02.setOnClickListener(mOnClickListener);

此种方法的好处是当多个按钮要处理的事件逻辑是一样的话,不用每个按钮都写一个setOnClickListener监听事件,并实现Onclick方法

2.使Activity实现OnClickListener接口,并在Activity中实现Onclick方法

  1. public class ButtonActivity extends AppCompatActivity implements View.OnClickListener{
  2. @Override
  3. public void onClick(View v) {
  4. switch (v.getId()) {
  5. //TODO
  6. }
  7. }
  8. }

3.长按事件监听

  1. //长按(长按2秒以上)点击事件监听
  2. button01.setOnLongClickListener(new View.OnLongClickListener() {
  3. @Override
  4. public boolean onLongClick(View v) {
  5. Toast.makeText(ButtonActivity.this, "OnLongClickListener", Toast.LENGTH_SHORT)
  6. .show();
  7. return true;
  8. }
  9. });

五、双击事件判定

主要代码如下

  1. private static int DOUBLE_CLICK_TIME = 1000;
  2. private List<Long> times = new ArrayList<>();
  3. private Handler mHandler = new Handler();
  4. private Runnable r;
  5. /**双击事件判断*/
  6. private boolean isDoubleClick() {
  7. if (times.size() == 2) {
  8. //已经完成了一次双击,list可以清空了
  9. if (times.get(times.size() - 1) - times.get(0) < DOUBLE_CLICK_TIME) {
  10. times.clear();
  11. Toast.makeText(ButtonActivity.this, "双击", Toast.LENGTH_SHORT).show();
  12. if (mHandler != null) {
  13. if (r != null) {
  14. //移除回调
  15. mHandler.removeCallbacks(r);
  16. r = null;
  17. }
  18. }
  19. return true;
  20. } else {
  21. //这种情况下,第一次点击的时间已经没有用处了,第二次就是“第一次”
  22. times.remove(0);
  23. }
  24. }
  25. //此处可以添加提示
  26. //showTips();
  27. r = new Runnable() {
  28. @Override
  29. public void run() {
  30. Toast.makeText(ButtonActivity.this, "单击", Toast.LENGTH_SHORT).show();
  31. }
  32. };
  33. //DOUBLE_CLICK_TIME时间后提示单击事件
  34. mHandler.postDelayed(r, DOUBLE_CLICK_TIME);
  35. return false;
  36. }

使用方法:在onClick(View v)方法中调用

  1. Button button02 = (Button) findViewById(R.id.button02);
  2. button02.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. times.add(SystemClock.uptimeMillis());
  6. isDoubleClick();
  7. }
  8. });

六、多击事件

  1. /**多击事件判断*/
  2. private boolean isMultiClick() {
  3. int size = times.size();
  4. //处理多击事件
  5. if (size > 1) {
  6. if (times.get(size - 1) - times.get(size - 2) < DOUBLE_CLICK_TIME) {
  7. Toast.makeText(ButtonActivity.this, size + "连击", Toast.LENGTH_SHORT).show();
  8. if (mHandler != null) {
  9. if (r != null) {
  10. //移除回调
  11. mHandler.removeCallbacks(r);
  12. }
  13. }
  14. return true;
  15. } else {
  16. //这种情况下,以前存储的点击的时间已经没有用处了,最后一次就是“第一次”
  17. long oldtime = times.get(size - 1);
  18. times.clear();
  19. times.add(oldtime);
  20. }
  21. }
  22. //此处可以添加提示
  23. //showTips();
  24. r = new Runnable() {
  25. @Override
  26. public void run() {
  27. Toast.makeText(ButtonActivity.this,"单击", Toast.LENGTH_SHORT).show();
  28. }
  29. };
  30. //DOUBLE_CLICK_TIME时间后提示单击事件
  31. mHandler.postDelayed(r, DOUBLE_CLICK_TIME);
  32. return false;
  33. }

效果如下:

开发工具:Android Studio1.4
SDK: Android 6.0
API 23

代码下载:Button.zip

版权声明:本文为博主原创文章,如需转载请注明来源。

Android按钮的各个样式设置的更多相关文章

  1. 改变Android按钮背景颜色的高效方法

    本文将介绍一种有效改变Android按钮颜色的方法. 按钮可以在状态改变时改变其颜色(例如按下,禁用,高亮显示).但是,这需要一一说明每个状态.这篇文章将提供你一个根据状态变化轻松改变按钮颜色的方法. ...

  2. 【Android 应用开发】Android - 按钮组件详解

    总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN :  http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...

  3. 安卓 ToolBar 颜色样式设置

    设置Toolbar弹出菜单的字体颜色和背景颜色,包括三个点菜单颜色和返回图标的颜色. 布局文件xml <LinearLayout xmlns:android="http://schem ...

  4. Android - 按钮组件详解

    总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN :  http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...

  5. Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置

    解决思路: 1.找个可用的Aspose.Cells(有钱还是买个正版吧,谁开发个东西也不容易): 2.在.Net方案中引用此Cells: 3.写个函数ToExcel(传递一个DataTable),可以 ...

  6. 关于java中JButton的样式设置(的一些我们应该知道的函数)(转)

    1. 对JButton大小的设置 ——因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用 button.setPreferredSize(new Dim ...

  7. Android 自定义RadioButton的样式

    Android 自定义RadioButton的样式 我们知道Android控件里的button,listview可以用xml的样式自定义成自己希望的漂亮样式. 最近用到RadioButton,利用xm ...

  8. PowerDesigner的样式设置

    原文:PowerDesigner的样式设置 PD提供了强大的配置功能,可以对生成的数据库对象命名.数据模型的展现进行设置.这里首先讲下样式的设置. 颜色和字体设置 1.单独设置某个对象的颜色和字体 1 ...

  9. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)

    在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManife ...

随机推荐

  1. CVE-2016-4758: UXSS in Safari's showModalDialog

    I would like to share about details of Safari's UXSS bug(CVE-2016-4758). This bug was fixed in Safar ...

  2. 23.mysql集群(master-master)

    参考: http://blog.csdn.net/mr__fang/article/details/8692480 http://www.2cto.com/database/201201/116756 ...

  3. Lua热更系统

    1.介绍 使用脚本开发游戏业务逻辑其中一个好处就是代码可线上热更,不停机修复bug.而热更代码的写法与需要被热更的文件的代码又有着密切的关系,本文介绍一种热更方法. 2.热更原理 Lua提供一个叫re ...

  4. About next_permutation

    哈哈没错这个又是我们C++党的语言优势之一,用这个函数可以求当前排序的下一个排序,也就是说可以方便的求全排列,用这个函数需要用到algorithm这个头文件. 与这个函数相反的是prev_permut ...

  5. MyBatis 简介

    MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis ...

  6. Android判断GPS是否开启和强制帮用户打开GPS

    引子:在我们的应用为用户提供定位服务时,通常想为用户提供精确点的定位服务,这是需要用户配合的.我们必须先检测用户手机的GPS当前是否打开,若没打开则弹出对话框提示.用户若不配合我们也没办法,只能采用基 ...

  7. PPTP协议

    PPTP协议 PPTP(Point-to-Point Tunneling Protocol)点对点隧道协议是PPP协议的一种扩展,它将PPP帧封装进IP包中,通过IP网络进行传输.它通过PPTP控制连 ...

  8. memset函数

    函数介绍 void *memset(void *s, int ch, size_t n); 函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 ...

  9. 菜鸟学自动化测试(一)---- selenium IDE

    http://www.cnblogs.com/fnng/archive/2011/10/23/2222157.html

  10. spring-boot启动信息中non-fatal error

    java.lang.ClassNotFoundException: org.springframework.data.web.config.EnableSpringDataWebSupport缺少依赖 ...