Android官方文档—User Interface(Input Controls)(Buttons)

Buttons

按钮由文本或图标(或文本和图标两者)组成,用于传达用户触摸时发生的操作。

根据您是否需要带有文本,图标或两者的按钮,您可以通过三种方式在布局中创建按钮:

  • 使用文本,使用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"
    ... />

响应Click事件


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

要为按钮定义click事件处理程序,请将android:onClick属性添加到XML布局中的<Button>元素。此属性的值必须是您要响应click事件时要调用的方法的名称。然后,托管布局的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中,以下方法处理click事件:

/** Called when the user touches the button */
public void sendMessage(View view) {
    // Do something in response to button click
}

您在android:onClick属性中声明的方法必须具有完全如上所示的签名。具体来说,该方法必须:

  • 公开
  • 返回 void
  • 将View定义为唯一参数(这将是单击的View)

使用OnClickListener

您还可以以编程方式而不是XML布局声明click事件处理程序。如果在运行时实例化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
    }
});

美化你的按钮


按钮(背景图像和字体)的外观可能因设备而异,因为不同制造商的设备通常具有不同的输入控件默认样式。

您可以使用应用于整个应用程序的主题精确控制控件的样式。例如,要确保运行Android 4.0及更高版本的所有设备都在您的应用中使用Holo主题,请在清单的<application>元素中声明android:theme =“@ android:style / Theme.Holo”。另请阅读博客文章Holo Everywhere,了解有关在支持旧设备时使用Holo主题的信息。

要自定义具有不同背景的单个按钮,请使用drawable或color resource指定android:background属性。或者,您可以为按钮应用样式,该样式的工作方式类似于HTML样式,以定义多个样式属性,例如背景,字体,大小等。有关应用样式的更多信息,请参阅样式和主题。

无边框按钮

一种有用的设计是“无边框”按钮。无边框按钮类似于基本按钮,除了它们没有边框或背景,但在不同状态(例如单击时)仍然会改变外观。

要创建无边框按钮,请将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" />

自定义背景

如果要真正重新定义按钮的外观,可以指定自定义背景。但是,您的背景应该是状态列表资源,而不是提供简单的位图或颜色,根据按钮的当前状态更改外观。

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

要为按钮背景创建可绘制的状态列表:

1.为按钮背景创建三个位图,表示默认,按下和聚焦按钮状态。

要确保图像适合各种大小的按钮,请将位图创建为九个修补程序位图。

2.将位图放入项目的res / drawable /目录中。确保每个位图都被正确命名以反映它们各自代表的按钮状态,例如button_default.9.png,button_pressed.9.png和button_focused.9.png。

3.在res / drawable /目录中创建一个新的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>元素的顺序很重要。当引用此drawable时,将按顺序遍历<item>元素以确定哪个元素适合当前按钮状态。因为默认位图是最后一个,所以只有当条件android:state_pressed和android:state_focused都被评估为false时才会应用它。

此XML文件现在表示单个可绘制资源,当Button为其背景引用时,显示的图像将根据这三种状态而更改。

4.然后只需将drawable 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的信息。

猜你喜欢

转载自blog.csdn.net/weixin_42703445/article/details/83858903
今日推荐