Android Developers:按钮
按钮是有文本或者图标(或者文本和图标)组成,它传达用户触摸它的时候所发生的动作。
你可以在你的布局中使用三种方式创建按钮,取决于你是否想创建文本按钮,突变按钮或者两者都有:
设置文本,使用Button类:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
设置图标,使用ImageButton类:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
... />
设置文本和图标,使用Button类的android:drawableLeft属性:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:drawableLeft="@drawable/button_icon"
... />
响应点击事件
——————————————————————————————————————————————
当用户点击一个按钮,button对象获取一个on-click时间。
为按钮定义时间处理程序,在你的XML布局中的<Button>元素添加android:onClick属性。这个属性的值必须和你想调用响应点击事件的方法的名称相同。显示这个布局的Activity必须然后实现相应的方法。
例如,下面是一个布局,包含一个使用android:onClick属性的按钮:
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
在显示这个布局的Activity中,下面的方法处理这个点击事件:
/** Called when the user touches the button */
public void sendMessage(View view) {
// Do something in response to button click
}
你在android:onClick属性中宣布的方法,必须和上面所显示有拥有相同的名称。 特别的,这个方法必须:
是public
返回void
定义一个View对象,作为唯一的参数(它将是被点击的View对象)
使用OnClickListener
——————————————————————————————————————————————
你也可以更务实的声明点击时间,而不是在一个XML布局文件中。如果你在运行时实例化Button对象或者你需要在Fragmetn的子类中声明点击行为,这个可能就是必须的。
编程声明事件处理,创建一个View.onClickListener对象,并且通过调用setOnClickListener(View.OnClickListener)方法将它指派给按钮。例如:
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
设计你的按钮
——————————————————————————————————————————————
你的按钮的外表(背景图片和前段)可能从一台设备到另一个而不同,因为不同制造厂商的设备通常拥有不同的默认输入控件风格。
你可以精确控制你的控件使用的样式主题,你将它应用在你的整个应用。例如,为了在你的应用程序汇中,确保所有运行Android 4.0和以上的设备使用Holo主题,在你的Mainfest文件中的<application>元素中声明android:theme=”@android:style/Theme.Hoho“。你也可以参阅博客Holo Everywhere信息,关于使用Holo主题支持老的设备。
为了使用不同的背景自定义自己的按钮,使用一个Drawable或者Color资源指定android:background属性。作为另外一种选择,你可以为按钮设置一种样式,它的工作方式类似于HTML样式,定义如背景,字体,大小和其它等多种样式属性。关于应用样式的更多的信息,请查阅Stypes and Themes。
无边框按钮
——————————————————————————————————————————————
一种非常有用的设计师”无边框“按钮。无边框按钮类似于基本的按钮,除了他们没有边框或者背景,但是当不同的状态的时候一直改变显示,例如当它被点击的时候。
为了创建一个无边框的按钮,给按钮应用borderlessButtonStyle属性,例如:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
style="?android:attr/borderlessButtonStyle" />
自定义背景
——————————————————————————————————————————————————
如果你想真正定义你的按钮的外表,你可以指定自定义的背景。替代应用简单的位图或颜色,然而,你的背景应该是一个state list resource,它基于按钮当前的状态改变显示。
你可以在XML文件当中定义state list,定义三种不同的图片或者颜色用于不同的按钮状态。
为你的按钮创建一个state list drawable:
为你的按钮的背景创作三个位图,它代表default,pressed和focused按钮状态。为了去确保你的图片适应按钮的各种大小,创建Nine-path位图。
将位图放于你的项目的/res/drawable目录下。确保每个位图被合适的命名,去映射按钮的每一种显示状态,例如button_default.9.png,button_pressed.9.png和button_focused.9.png。
创建一个xml文件,在res/drawable/目录下(命令如button_custom.xml)。
插入如下XML:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/button_focused"
android:state_focused="true" />
<item android:drawable="@drawable/button_default" />
</selector>
这个定了一个单独的位图资源,它将会改变它的图片,基于按钮的当前状态。
第一个<item>定义了用于按钮被点击的时候的位图(Activited)
第二个<item>定义了用于按钮获取焦点的时候的位图(当用户滚动球或方向键高亮显示按钮时)
第三个<item>定义了用于按钮默认状态的时候的位图(既没有被点击也没有获取焦点)
注意:<item>元素的顺序是重要的。当位图被引用的时候,<item>元素遍历顺序来决定哪个适合当前的按钮的状态。因为默认的位图是在最后,只有当android:state_pressed和android:state_focused的状态都被认为false的时候才使用。
XML文件现在代表一个单独的位图资源,并且被一个Button作为它的background引用,图片将会基于三种状态而改变。
4. 然后简单将drawable XML文件应用于Button bakgroud:
<Button
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage"
android:background="@drawable/button_custom" />
关于XML语法的更多信息,包含如何定义一个不可用的,循环的,或者其它按钮状态,阅读State List Drawable。
Android Developers:按钮的更多相关文章
- 【Android Developers Training】 8. 定义Action Bar风格
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 7. 添加Action Buttons
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 4. 启动另一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 3. 构建一个简单UI
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 105. 显示一个位置地址
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 96. 运行一个同步适配器
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 79. 连接到网络
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 72. 缩放一个视图
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 54. 打印自定义文档
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- 使用FTP发布和更新Windows Azure网站
在Windows Azure中,FTP的用户名和密码与管理门户的用户名和密码不一样,需要另外设置. →依次点击左侧的"网站",网站名称,右侧的"设置部署凭据", ...
- Windows Phone本地数据库(SQLCE):2、LINQ to SQL(翻译)(转)
首先.要说到的是,windows phone 7.1上基本的数据库功能是SQL Compact关于Mango的一个实现,使用linq to sql访问存储在数据库上的数据. 1.LINQ to S ...
- jquery.jCal.js显示日历插件
描述:日历插件jCal用于需要输入日期的表单文本框. 兼容浏览器:IE浏览器/Firefox/Google Chrome 官方链接: http://www.overset.com/2008/05/1 ...
- JS --- reduce()函数
定义: reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值.对空数组是不会执行回调函数的. 案例 计算数组总和 var num = [1,2,3,4,5 ...
- Orchard模块开发全接触5:深度改造前台第二部分
在这一部分,我们继续完善我们的购物车,我们要做以下一些事情: 1:完成 shoppingcart.cshtml: 2:让用户可以更新数量及从购物车删除商品: 3:创建一个 widget,在上面可以看到 ...
- Svg.Js A标签,链接操作
一.创建a标签,为a标签添加内容 <div id="svg1"></div> <script> //SVG.A 链接创建 var draw = ...
- RF的特征子集选取策略(spark ml)
支持连续变量和类别变量,类别变量就是某个属性有三个值,a,b,c,需要用Feature Transformers中的vectorindexer处理 上来是一堆参数 setMaxDepth:最大树深度 ...
- 关于SqlBulkCopy SQL批量导入需要注意,列名是区分大小写的
最近在做数据从Excel批量导入MSSQL时,传统的是使用Insert Into Table方法,不过这个方便比较慢 通过使用 SqlBulkCopy 可以批量导入到数据库. 默认批量导入数据库,需要 ...
- Zookeeper Tutorial 1 -- Overview
ZooKepper: 一个分布式应用的分布式协调服务(Distributed Coordination Service) 分布式服务难以管理, 他们容易造成死锁和竞争, ZooKepper的动机就是为 ...
- Intellij IDEA打开就闪退或关闭
找到idea安装目录的bin目录,搜索vmoptions可以看到两个文件, idea.exe.vmoptions idea64.exe.vmoptions 1 这两个文件就是IDEA的一些配置文件,带 ...