按键 – Buttons -Anroid UI

Buttons

原文地址:http://docs.eoeandroid.com/guide/topics/ui/controls/button.html

译文地址:http://wiki.eoeandroid.com/Buttons

目录

按键 – Buttons

按钮包括文字或者图标,或者两者兼而有之,当用户触摸到按钮时就会触发事件。

button-types.png

取决于你需要按钮有文本、图标或两者兼而有之,您可以以三种方式创建按钮布局:

需要有文字的按钮,使用<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"
    ... />

需要有文字和图标的按钮,使用具有android:drawableLeft属性的<Button>类:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:drawableLeft="@drawable/button_icon"
    ... />

点击事件的响应 – Responding to Click Events

当用户点击一个按钮时,<Button>对象就会收到一个单击事件。

为了定义一个按钮的点击事件处理程序,在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>属性声明的方法必须完全按照上面显示。具体来说,该方法必须:

是公共的

返回void

定义一个<View>作为其唯一的参数(点击时将会看作这个<View>)

使用监听器 – Using an OnClickListener

您也可以声明单击事件处理程序,而不是在XML布局中。这可能是必要的,如果你在运行时实例化<Button>,或者你需要在一<Fragment>子类中声明单击事件。

为了声明事件处理程序,创建一个<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
    }
});

按钮的样式 – Styling Your Button

按钮的外观(背景图片和字体)可能会因为机器不同而有所不同,因为不同厂家的设备的输入控件的默认样式往往不同。

您可以控制控件使用适用于整个应用程序的样式。例如,要确保所有运行Android4.0甚至更高版本的设备在您的应用程序使用Holo主题,需要在manifest的 <application>元素中声明android:theme=”@android:style/Theme.Holo”。通过阅读博客文章得知,Holo Everywhere使用了Holo的主题,同时支持低版本的设备。

为了给按钮定制不同的背景,指定<android:background>属性为可绘制或彩色的资源。另外,您可以使用一种类似于HTML的样式来定义按钮的样式,可以定义多种属性,如背景、字体、大小等等。关于应用样式的更多信息,请参阅<Styles and Themes>。

无边框按钮 – Borderless button

一种有用的设计是无边框按钮。无边框按钮与基本按钮相似,但是无边框按钮没有无边框或背景,但在不同状态如点击时,会改变外观。

要创建一个无边框“按钮,为按钮应用<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" />

定制背景 – Custom background

如果你想真正重新定义按钮的外观,你可以指定一个自定义的背景。而不是提供一个简单的位图或颜色,然而,你的背景应该是一个状态列表资源,取决于按钮的当前状态而改变外观,。

您可以在一个XML文件中定义状态列表,定义三种不同的图像或颜色,用于不同的按钮状态。

要为按钮的背景创建一个状态列表资源:

创建三个按钮背景位图以表示默认、按下和选中的按钮状态。

为了确保图像适合不同大小的按钮,以<9-patch>的格式创建图像。

位图放到你工程的res/drawable/ directory。确保每个位图命名正确能够反映它们分别代表的按钮状态,如button_default.9.png、button_pressed.9.png以及button_focused.9.png。

在res/drawable/ directory下创建一个新的XML文件(命名类似于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>定义了按下按钮(激活)时使用的位图。

第二个<item>定义了按钮按下时(按钮高亮时,使用轨迹球或方向键)使用的位图。

第三个<item>定义了默认状态下的按钮(既不是按下也不是选中)使用的位图。

注意:<item>元素的顺序是重要的。当图像可用时,按顺序遍历<item>元素,以确定哪一个适合当前按钮状态。因为默认的位图在最后,当android:state_pressed 和android:state_focused的值都为false时才会被应用。

现在这个XML文件代表一个单一的绘制资源,当<Button>引用它作为背景,图像将基于按钮的三种状态而改变。

然后,只需应用此XML文件作为按钮的背景:

<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>。

Leave a Comment