9

有没有办法在按下按钮时将样式应用于按钮?

如果我在style.xml中有一个样式:

<resources>
    <style name="test">
        <item name="android:textStyle">bold</item>
    </style>
</resources>

button.xml中的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/test_pressed"
              style="@style/test"
          android:state_pressed="true"/>
    <item android:drawable="@drawable/test_focused"
          android:state_focused="true"/>
    <item android:drawable="@drawable/test_normal"/>
</selector>

那么我将如何在我的布局中引用button.xml呢?

<Button
        ...
        android:???="button"/>

谢谢!

4

7 回答 7

7

Romain Guy 认为这是不可能的:

http://code.google.com/p/android/issues/detail?id=8941

“选择器仅适用于可绘制对象,不适用于文本外观。目前没有计划实现这一点。”

于 2011-10-09T20:36:14.017 回答
5

您可以通过使用 XML 按钮定义来实现此目的。

在您的可绘制文件夹中创建一个 XML 文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:state_pressed="true"
        android:drawable="@drawable/green_button" /> 

        <!-- <item android:state_focused="true"
        android:drawable="@drawable/button_focused" /> --> 

        <item android:drawable="@drawable/black_button" />
</selector>

如您所见,这允许您定义不同的按钮图像以用于不同的状态(black_button、green_button 等也应该是可绘制文件夹中的 .PNG 文件)

现在,从您的 layout.xml 文件中,您可以将按钮背景设置为指向按钮选择器:

<Button android:text="Play" android:id="@+id/playBtn"
            android:background="@drawable/button_selector"
            android:textColor="#ffffff" />

然后可以像任何图像文件一样从可绘制文件夹中引用选择器 XML。

于 2010-09-24T10:02:20.553 回答
2

在单击/按下颜色时更改 Android 按钮:

定义颜色值

要定义颜色值,您必须在项目值目录中创建 colors.xml 文件并添加以下内容。res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="button_pressed">#ff8a00</color>
    <color name="button_focused">#ff8a00</color>
    <color name="button_default">#1c76bb</color>
</resources>

在 Drawable 目录中创建一个 XML 文件

在您的可绘制文件夹中创建一个 button_background.xml 文件,并添加按钮按下/单击、聚焦和默认颜色。button_background.xml 文件的最终代码如下所示。res/drawable/button_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@color/button_pressed"/> <!-- pressed -->
    <item android:state_focused="true"
        android:drawable="@color/button_focused"/> <!-- focused -->
    <item android:drawable="@color/button_default"/> <!-- default -->
</selector>

添加按钮

res/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/button_background"
        android:text="Click Me"
        android:textColor="#fff" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_marginTop="16dp"
        android:background="@drawable/button_background"
        android:text="Click Me"
        android:textColor="#fff" />

</RelativeLayout>

来源在这里

于 2018-04-12T08:47:27.777 回答
2

您可以使用颜色状态列表资源

来自链接的示例:

保存在 res/color/button_text.xml 的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

此布局 XML 会将颜色列表应用于视图:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
于 2016-09-21T13:55:29.560 回答
0
<Button
        android:background="@drawable/button"/>
于 2010-09-16T21:59:43.043 回答
0

要引用选择器,您必须将其作为该按钮的背景。

<Button
     android:background="@drawable/button"
/> 

对于按下时的粗体,我也没有尝试过,但也许您可以在选择器中提及文本样式,iso 指的是其中的样式:

android:textStyle="bold"

如果这也不起作用,您可以在按钮的 onClick() 中执行此操作。

于 2010-09-24T09:48:24.940 回答
-3

我没有尝试过,但大概您可以将其包含android:id="button"在您的选择器中。

于 2010-09-16T19:55:10.280 回答