按钮
这是自己在Google官方文档的基础上翻译的,当中也有自己的穿插讲述,若有什么错误,还请大家指出。
原网址https://developer.android.com/guide/topics/ui/controls/button.html#Style
一个按钮通常由文本或者图片(或者二者兼有)组成,当用户点击按钮时,一般会执行某个动作(前提你要绑定监听器哟)。
你可以根据你的喜好创建任何一种:
如果你喜欢文本,便用Button类:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
如果你喜欢图片,便使用ImageButtonl类:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
... />
如果你喜欢二者兼有,便使用带有android:drawableLeft属性的Button类:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:drawableLeft="@drawable/button_icon"
... />
响应点击事件
当用户点击按钮后,这个Button对象便接受到了一个响应请求。
为了定义这个按钮的响应请求,要在XML文件中添加andeoid:onClick属性,需要注意的是该属性的值必须和你在Activity中定义的方法一致。
例如:在XML文件中定义了andeoid:onClick属性的值为sendMessage
<?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" />
在Aactivity中必须有一个方法要以sendMessage为名:
public void sendMessage(View view) {
// Do something in response to button click
}
该方法必须做到以下几点:
- 修饰符为public
- 返回值为空
- 定义一个View作为其唯一参数
使用一个 OnClickListener
你也可以不在XML文件中定义Button的onClick属性, 可以在Activity中用代码实现,
例如:
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
}
});
按钮类型化
由于不同生产厂家有不同默认的输入类型和不同版本,你的按钮会因为这些原因而呈现不同的外形。
你可以你的整个应用申请一个主题来预防上述问题的产生,比如你可以在manifest的application元素下这样声明
android:theme="@android:style/Theme.Holo"
这样便可以让在Android 4.0以及更高版本的设备上设置为Holo主题。
你也可以定制自己的按钮专属类型,用android:background属性来引用图片或者颜色资源,另外,你也可以设置font,size等其他的属性。
无边界按钮
一种有用的设计模式便是“无边界按钮“,顾名思义,这种按钮只是没有边界,其他一切都和普通的按钮一样。
例如:
<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" />
看起来根本不是一个按钮,却特别像一个TexiView,这其实是个按钮,如果将
style="?android:attr/borderlessButtonStyle"
去掉,将会非常明显
这样一看,大家就应该明白了.
自定义背景
如果你确实想重新定义你的按钮,你可以指定一个自定义背景,你的背景应该是在按钮根据不同的情形下的一系列状态列表资源,这句话有点绕口,其实就是按钮在不同的情形下有不同的背景,比如按之前一个背景,按的时候一个背景,松开后又一个背景.
- 创建按钮在默认,点击,松开三种状态下的背景,为了确保你的图片能适应不同大小的按钮尺寸,先用9-patch工具修改你的图片
- 把修改后的图片放到你项目的res/drawable/文件夹目录中,确保每张图命名正确以保证能清楚的反应按钮点击前后的状态,例如button_default.9.png, button_pressed.9.png, and button_focused.9.png.
- 新建一个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定义了当按钮被点击时的背景
- 第二份item定义了当按钮被松开时的背景
- 第三个item定义了按钮默认情况下的背景
关于Button,就翻译到这里,希望能帮助到大家。