Android按钮的各个样式设置
安卓开发学习之014 Button应用详解(样式、背景、按钮单击、长按、双击、多击事件)
一、Button简介
按钮也是继承自TextView

二、XML定义方法
<Button
android:id="@+id/button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button_Click"/>
id设置按钮唯一编号
text设置按钮上显示的文本
三、设置按钮背景图片
使用background属性设置背景图片
<!-- 背景设置-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/yxs"
android:text="Background"/>
四、设置样式
主要是定义按钮三种状态下分别对应的背景样式
默认状态、获得焦点(android:state_focused=“true”)、
按下时(android:state_pressed=“true”)
<!-- 使用单一shape定义样式-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_border"
android:text="Button_Shape"/>
<!-- 使用selector定义样式,其中包括三种状态下的shape-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
android:text="Button_Selector1"/>
<!-- 使用selector定义样式,其中包括三种状态下所使用的图片-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector_button_start"
android:text="Button_Selector2"/>
三个文件drawable文件代码如下:
1.res/drawable/bg_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 圆角 -->
<corners
android:radius="10dp"/>
<!-- 设置圆角半径 -->
<!-- 渐变 -->
<gradient
android:centerColor="#00ff00"
android:endColor="#0000ff"
android:startColor="#ff0000"
android:type="linear"
/>
<!-- 间隔 -->
<padding
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp"/>
<!-- 各方向的间隔 -->
<!-- 大小 -->
<size
android:width="50dp"
android:height="50dp"/>
<!-- 宽度和高度 -->
<!-- 填充 -->
<!--<solid-->
<!--android:color="@android:color/white"/>-->
<!-- 填充的颜色 -->
<!-- 描边 -->
<stroke
android:width="2dp"
android:color="#f0f"
/>
</shape>
2.res/drawable/button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<!--按下时样式-->
<item android:state_pressed="true">
<shape>
<!-- 描边 -->
<stroke
android:width="2dp"
android:color="#fad3cf"/>
<solid android:color="#87CEFF"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
<!-- 圆角 -->
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
</shape>
</item>
<!-- 获得焦点时样式-->
<item android:state_focused="true">
<shape>
<gradient
android:angle="270"
android:centerColor="#00ff00"
android:endColor="#ffc2b7"
android:startColor="#f0f"
android:type="sweep"/>
<stroke
android:width="2dp"
android:color="#dcdcdc"/>
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
</shape>
</item>
<!-- 默认样式-->
<item>
<shape>
<!-- 渐变 -->
<gradient
android:centerColor="#00ff00"
android:endColor="#FFFFFF"
android:startColor="#ff8c00"
android:type="linear"/>
<!-- 描边 -->
<stroke
android:width="2dp"
android:color="#dcdcdc"
android:dashGap="3dp"
android:dashWidth="5dp"/>
<!-- 圆角 -->
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp"/>
<!--<solid android:color="#ffc2b7"/>-->
</shape>
</item>
</selector>
效果如下:

3.res/drawable/selector_button_start.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@mipmap/search_bar_edit_pressed" android:state_pressed="true"/>
<item android:drawable="@mipmap/button_start_click" android:state_focused="true"/>
<item android:drawable="@mipmap/search_bar_edit_normal"></item>
</selector>
四、按钮点击事件的处理方式
按钮点击有四种处理方法。
第一种是通过onClick属性,通过这个属性设置处理点击事件的方法名,在Activity中实现这个方法。
第二种是典型的事件监听机制setOnClickListener的应用形式,下面详细说明这四种方法。
1.通过onClick属性设置处理方法
在XML布局文件中设置Button的属性:
android:onClick=”yourMethodName”
然后在该布局文件对应的Acitivity中实现该方法:
需要注意的是这个方法必须符合三个条件:
1.public
2.返回void
3.只有一个参数View,这个View就是被点击的这个控件。
也可为多个Button设置同一个方法名,然后在方法内使用switch方法判断点击的是哪个按钮
如下:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
android:onClick="MyClick"
android:text="Button_onClick"/>
java代码中
/**
* 在XML中配置置android:onClick="MyClick"
* 必须设置为public void
*/
public void MyClick(View view) {
// switch (view.getId())
// {
// //TODO
// }
Toast.makeText(ButtonActivity.this, "android:onClick=\"MyClick\"", Toast.LENGTH_SHORT)
.show();
}
2.使用setOnClickListener添加监听器对象
Button button01 = (Button) findViewById(R.id.button01);
//短按点击事件监听
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ButtonActivity.this, "OnClickListener", Toast.LENGTH_SHORT).show();
}
});
此种方法还有几个变种:
1.自定义类实现OnClickListener接口
//自定义类实现OnClickListener接口
private MyOnClickListener mOnClickListener = new MyOnClickListener();
private class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
//TODO
}
}
}
然后调用
button01.setOnClickListener(mOnClickListener);
button02.setOnClickListener(mOnClickListener);
此种方法的好处是当多个按钮要处理的事件逻辑是一样的话,不用每个按钮都写一个setOnClickListener监听事件,并实现Onclick方法
2.使Activity实现OnClickListener接口,并在Activity中实现Onclick方法
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()) {
//TODO
}
}
}
3.长按事件监听
//长按(长按2秒以上)点击事件监听
button01.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(ButtonActivity.this, "OnLongClickListener", Toast.LENGTH_SHORT)
.show();
return true;
}
});
五、双击事件判定
主要代码如下
private static int DOUBLE_CLICK_TIME = 1000;
private List<Long> times = new ArrayList<>();
private Handler mHandler = new Handler();
private Runnable r;
/**双击事件判断*/
private boolean isDoubleClick() {
if (times.size() == 2) {
//已经完成了一次双击,list可以清空了
if (times.get(times.size() - 1) - times.get(0) < DOUBLE_CLICK_TIME) {
times.clear();
Toast.makeText(ButtonActivity.this, "双击", Toast.LENGTH_SHORT).show();
if (mHandler != null) {
if (r != null) {
//移除回调
mHandler.removeCallbacks(r);
r = null;
}
}
return true;
} else {
//这种情况下,第一次点击的时间已经没有用处了,第二次就是“第一次”
times.remove(0);
}
}
//此处可以添加提示
//showTips();
r = new Runnable() {
@Override
public void run() {
Toast.makeText(ButtonActivity.this, "单击", Toast.LENGTH_SHORT).show();
}
};
//DOUBLE_CLICK_TIME时间后提示单击事件
mHandler.postDelayed(r, DOUBLE_CLICK_TIME);
return false;
}
使用方法:在onClick(View v)方法中调用
Button button02 = (Button) findViewById(R.id.button02);
button02.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
times.add(SystemClock.uptimeMillis());
isDoubleClick();
}
});
六、多击事件
/**多击事件判断*/
private boolean isMultiClick() {
int size = times.size();
//处理多击事件
if (size > 1) {
if (times.get(size - 1) - times.get(size - 2) < DOUBLE_CLICK_TIME) {
Toast.makeText(ButtonActivity.this, size + "连击", Toast.LENGTH_SHORT).show();
if (mHandler != null) {
if (r != null) {
//移除回调
mHandler.removeCallbacks(r);
}
}
return true;
} else {
//这种情况下,以前存储的点击的时间已经没有用处了,最后一次就是“第一次”
long oldtime = times.get(size - 1);
times.clear();
times.add(oldtime);
}
}
//此处可以添加提示
//showTips();
r = new Runnable() {
@Override
public void run() {
Toast.makeText(ButtonActivity.this,"单击", Toast.LENGTH_SHORT).show();
}
};
//DOUBLE_CLICK_TIME时间后提示单击事件
mHandler.postDelayed(r, DOUBLE_CLICK_TIME);
return false;
}
效果如下:

开发工具:Android Studio1.4
SDK: Android 6.0
API 23
代码下载:Button.zip
版权声明:本文为博主原创文章,如需转载请注明来源。
Android按钮的各个样式设置的更多相关文章
- 改变Android按钮背景颜色的高效方法
本文将介绍一种有效改变Android按钮颜色的方法. 按钮可以在状态改变时改变其颜色(例如按下,禁用,高亮显示).但是,这需要一一说明每个状态.这篇文章将提供你一个根据状态变化轻松改变按钮颜色的方法. ...
- 【Android 应用开发】Android - 按钮组件详解
总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN : http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...
- 安卓 ToolBar 颜色样式设置
设置Toolbar弹出菜单的字体颜色和背景颜色,包括三个点菜单颜色和返回图标的颜色. 布局文件xml <LinearLayout xmlns:android="http://schem ...
- Android - 按钮组件详解
总结了Android中常用的按钮用法 示例源码下载地址 : -- CSDN : http://download.csdn.net/detail/han1202012/6852091 -- GitHu ...
- Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置
解决思路: 1.找个可用的Aspose.Cells(有钱还是买个正版吧,谁开发个东西也不容易): 2.在.Net方案中引用此Cells: 3.写个函数ToExcel(传递一个DataTable),可以 ...
- 关于java中JButton的样式设置(的一些我们应该知道的函数)(转)
1. 对JButton大小的设置 ——因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用 button.setPreferredSize(new Dim ...
- Android 自定义RadioButton的样式
Android 自定义RadioButton的样式 我们知道Android控件里的button,listview可以用xml的样式自定义成自己希望的漂亮样式. 最近用到RadioButton,利用xm ...
- PowerDesigner的样式设置
原文:PowerDesigner的样式设置 PD提供了强大的配置功能,可以对生成的数据库对象命名.数据模型的展现进行设置.这里首先讲下样式的设置. 颜色和字体设置 1.单独设置某个对象的颜色和字体 1 ...
- Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManife ...
随机推荐
- 用css实现三级导航菜单
主要使用css的hover伪类来实现该功能. 主要思路:先搭出三级菜单的框架,然后使用css的:hover来实现! 对li添加类selected,对该类添加position:relative属性,然后 ...
- html+js 的一些小问题
html+js 的一些小问题: 选择器+遍历函数: $("#taskStatusList tr:gt(0)").find("td:eq(3)").find(&q ...
- 75篇关于Tomcat源码和机制的文章
75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报 分类: tomcat内核(82) 版权声明:本文为 ...
- STM32命名原则
每种STM32的产品都由16个字母或数字构成的编号标示,用户向ST订货时必须使用这个编号指定需要的产品.这16个字符分为8个部分,下面通过一个例子说明它们的意义: STM32 F 103 C ...
- java中Array/List/Map/Object与Json互相转换详解
http://blog.csdn.net/xiaomu709421487/article/details/51456705 JSON(JavaScript Object Notation): 是一种轻 ...
- System.Data.SqlClient.SqlError:无法对过程'XXX' 执行 删除,因为它正用于复制。消息 3724,级别 16
遇到这么一个错误,想对[northwindcs]这个数据库搭建复制,从B服务器发布订阅到C服务器,采用备份还原进行初始化,但是在数据库还原时,报无法对过程‘XXX’执行删除,因为它正用于复制.表面上一 ...
- zookeeper能做什么?
Zookeeper是Hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zo ...
- node.js基础 1之 HTTP流程实例
好详细的说,要反复看反复使用~~~ 通过分析其中的Timing可以分析页面慢的瓶颈在哪 与上图对应: Stalled: 等待时机,浏览器要发生请求,到能发出请求的时间.不包括DNS查询和连接建立时间 ...
- 20145224&20145238 《信息安全系统设计基础》 第三次实验
20145224&20145238 <信息安全系统设计基础>第三次实验 课程:信息安全系统设计基础 班级:1452 姓名:陈颢文 荆玉茗 学号:20145224 20145238 ...
- 懒加载实现的分页&&网站footer自适应
最近在做手机端,发现下拉刷新和上拉加载的jq控件很少而且自我感觉不好用,比如iscroll之类-- 然后自己写了个懒加载的,也很简单,最基础的代码[不喜勿喷,但蛮实用的] wap手机端懒加载分页: 用 ...