热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android按钮的各个样式设置

安卓开发学习之014Button应用详解(样式、背景、按钮单击、长按、双击、多击事件)一、Button简介按钮也是继承自TextView二、XML定义方

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

一、Button简介

按钮也是继承自TextView
这里写图片描述

二、XML定义方法

id="@+id/button01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button_Click"/>

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;

"wrap_content"android:layout_height&#61;"wrap_content"android:background&#61;"&#64;drawable/button_selector"android:onClick&#61;"MyClick"android:text&#61;"Button_onClick"/> java代码中 /** * 在XML中配置置android:onClick&#61;"MyClick" * 必须设置为public void */ public void MyClick(View view) { // switch (view.getId()) // { // //TODO // } Toast.makeText(ButtonActivity.this, "android:onClick&#61;\"MyClick\"", Toast.LENGTH_SHORT) .show(); }

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 times &#61; new ArrayList<>(); private Handler mHandler &#61; new Handler(); private Runnable r; /**双击事件判断*/ private boolean isDoubleClick() { if (times.size() &#61;&#61; 2) { //已经完成了一次双击&#xff0c;list可以清空了 if (times.get(times.size() - 1) - times.get(0) this, "双击", Toast.LENGTH_SHORT).show(); if (mHandler !&#61; null) { if (r !&#61; null) { //移除回调 mHandler.removeCallbacks(r); r &#61; null; } } return true; } else { //这种情况下&#xff0c;第一次点击的时间已经没有用处了&#xff0c;第二次就是“第一次” times.remove(0); } } //此处可以添加提示 //showTips(); r &#61; new Runnable() { &#64;Override public void run() { Toast.makeText(ButtonActivity.this, "单击", Toast.LENGTH_SHORT).show(); } }; //DOUBLE_CLICK_TIME时间后提示单击事件 mHandler.postDelayed(r, DOUBLE_CLICK_TIME); return false; }

使用方法&#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) this, size &#43; "连击", Toast.LENGTH_SHORT).show(); if (mHandler !&#61; null) { if (r !&#61; null) { //移除回调 mHandler.removeCallbacks(r); } } return true; } else { //这种情况下&#xff0c;以前存储的点击的时间已经没有用处了&#xff0c;最后一次就是“第一次” long oldtime &#61; times.get(size - 1); times.clear(); times.add(oldtime); } } //此处可以添加提示 //showTips(); r &#61; new Runnable() { &#64;Override public void run() { Toast.makeText(ButtonActivity.this,"单击", Toast.LENGTH_SHORT).show(); } }; //DOUBLE_CLICK_TIME时间后提示单击事件 mHandler.postDelayed(r, DOUBLE_CLICK_TIME); return false; }

效果如下&#xff1a;
这里写图片描述

开发工具&#xff1a;Android Studio1.4
SDK: Android 6.0
API 23

代码下载&#xff1a;Button.zip

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请注明来源。


转:https://www.cnblogs.com/feilin/p/5220229.html



推荐阅读
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
author-avatar
莫一鸣2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有