向应用添加按钮

试用 Compose 方式
Jetpack Compose 是推荐在 Android 设备上使用的界面工具包。了解如何在 Compose 中添加组件。
<ph type="x-smartling-placeholder"></ph> 按钮 →

按钮由文本和/或图标组成,用于表明当用户进行何种操作时 点按该图标。

<ph type="x-smartling-placeholder">

您可以通过以下三种方式在布局中创建按钮,具体取决于 您想要包含文字和/或图标的按钮:

  
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:paddingLeft="16dp"
      android:paddingRight="16dp"
      android:orientation="vertical" >
  
      <Button
          android:id="@+id/supabutton"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="I'm a button" />
  
      <ImageButton
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:contentDescription="A tiny Android icon"
          android:src="@drawable/baseline_android_24"
          app:tint="#ff0000" />
  
      <Button
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:drawableStart="@drawable/baseline_android_24"
          android:drawablePadding="4dp"
          android:drawableTint="#ff0000"
          android:text="I'm a button with an icon" />
  </LinearLayout>

前面的代码会生成类似于以下内容的内容:

显示三种类型按钮的图片
图 1. 三种按钮样式。

响应点击事件

当用户点按某个按钮时, Button 对象收到 事件。

要以程序化方式声明事件处理脚本,请创建 View.OnClickListener 对象,并通过调用以下代码将其分配给按钮: setOnClickListener(View.OnClickListener), 如以下示例中所示:

Kotlin

findViewById<Button>(R.id.supabutton)
  .setOnClickListener {
      Log.d("BUTTONS", "User tapped the Supabutton")
  }

Java

Button button = (Button) findViewById(R.id.supabutton);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
      Log.d("BUTTONS", "User tapped the Supabutton");
    }
});

设置按钮样式

按钮的外观(背景图片和字体)因设备、 因为不同制造商的设备通常会采用不同的默认输入样式 控件。

要使用不同背景自定义各个按钮,请指定 android:background 属性 并且包含可绘制资源或颜色资源或者,您也可以为按钮应用样式, 其工作原理与 HTML 样式类似,用于定义多个样式属性,例如背景、 字体和大小如需详细了解如何应用样式,请参阅 样式和主题

无边框按钮

“无边框”按钮可能会是一种非常有用的设计。无边框按钮与基本按钮类似 只不过它们没有边框或背景,但仍会在不同状态下改变外观, 例如点按时

要创建无边框按钮,请将 borderlessButtonStyle 样式,如下例所示:

<Button
  android:id="@+id/supabutton"
  style="?android:attr/borderlessButtonStyle"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="I'm a button" />

自定义背景

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

您可以在 XML 文件中定义状态列表,该文件定义了要用于 不同的按钮状态。

如需为按钮背景创建状态列表可绘制对象,请执行以下操作:

  1. 为按钮背景创建三个位图,分别代表默认、点按和聚焦的位图 按钮状态。为确保您的图片适合各种尺寸的按钮,请创建如下位图: 9-patch 位图。
  2. 将位图放入项目的 res/drawable/ 目录中。为每个位图命名 来反映其代表的按钮状态,例如 button_default.9.pngbutton_pressed.9.pngbutton_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> 定义按钮处于默认状态时使用的位图 既未被点按,也未聚焦。
    。 <ph type="x-smartling-placeholder">

    此 XML 文件表示单个可绘制资源。当 Button 引用 背景时,显示的图片会根据按钮的状态而变化。

  4. 应用可绘制 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 语法(包括如何定义已停用的按钮), 或处于其他状态时,请阅读 StateListDrawable