按钮由文本和/或图标组成,用于表明当用户进行何种操作时 点按该图标。
<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>
前面的代码会生成类似于以下内容的内容:
![显示三种类型按钮的图片](https://developer.android.google.cn/static/images/ui/buttons.png?authuser=9&hl=zh-cn)
响应点击事件
当用户点按某个按钮时,
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 文件中定义状态列表,该文件定义了要用于 不同的按钮状态。
如需为按钮背景创建状态列表可绘制对象,请执行以下操作:
- 为按钮背景创建三个位图,分别代表默认、点按和聚焦的位图 按钮状态。为确保您的图片适合各种尺寸的按钮,请创建如下位图: 9-patch 位图。
- 将位图放入项目的
res/drawable/
目录中。为每个位图命名 来反映其代表的按钮状态,例如button_default.9.png
,button_pressed.9.png
和button_focused.9.png
。 - 在
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>
定义按钮处于默认状态时使用的位图 既未被点按,也未聚焦。
此 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 语法(包括如何定义已停用的按钮),
或处于其他状态时,请阅读
StateListDrawable
。