自定义按钮

在本部分中,你将使用 Button 小组件和 XML 文件创建一个包含自定义图像而不是文本的按钮,其中该文件定义了用于不同按钮状态的三个不同的图像。 按下该按钮后,将显示一条短消息。

右键单击并下载下面的三个图像,然后将它们复制到项目的 Resources/drawable 目录。 这些图像将用于不同的按钮状态。

Green Android icon for normal stateOrange Android icon for focused stateYellow Android icon for pressed state

在 Resources/drawable 目录中创建一个名为 android_button.xml 的新文件。 插入以下 XML:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/android_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/android_focused"
          android:state_focused="true" />
    <item android:drawable="@drawable/android_normal" />
</selector>

这定义了单个可绘制的资源,它将根据按钮的当前状态更改其图像。 第一个 <item> 定义当按下按钮(激活按钮)时图像为 android_pressed.png;第二个 <item> 定义按焦点在按钮上时(使用轨迹球或方向键高亮按钮时)图像为 android_focused.png;第三个 <item> 定义在普通状态下(既没按下按钮,焦点也不在按钮上时)图像为 android_normal.png。 此 XML 文件现在表示单个可绘制的资源,当被 Button 引用作为背景时,显示的图像将根据这三个状态进行更改。

注意

<item> 元素的顺序非常重要。 引用这个可绘制资源时,会按顺序遍历 <item>,来确定哪一个元素适合当前的按钮状态。 “普通”图像是最后一个图像,因此仅在条件 android:state_pressedandroid:state_focused 的计算结果均为 false 时才应用。

打开 Resources/layout/Main.axml 文件并添加 Button 元素:

<Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:background="@drawable/android_button" />

android:background 属性指定要用于按钮背景的可绘制资源(保存在 Resources/drawable/android.xml 中时,被引用为 @drawable/android)。 这将替换整个系统中按钮使用的普通背景图像。 为了使可绘制资源根据按钮状态更改其图像,必须对背景应用图像。

若要使按钮在被按下时执行某些操作,请在 OnCreate() 方法的末尾添加以下代码:

Button button = FindViewById<Button>(Resource.Id.button);

button.Click += (o, e) => {
    Toast.MakeText (this, "Beep Boop", ToastLength.Short).Show ();
};

这会捕获布局中的 Button,然后添加一条 Toast 消息,在单击 Button 时显示。

现在,运行应用程序。

本页的部分内容是根据 Android 开源项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 Attribution License 中的条款进行使用。