当按钮被按下时,应用不同的样式

9

当按钮被按下时,是否有一种方法可以将样式应用于按钮?

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

<resources>
    <style name="test">
        <item name="android:textStyle">bold</item>
    </style>
</resources>
中的选择器:
<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"/>

谢谢!

7个回答

7

5
您可以通过使用XML按钮定义来实现此目的。
请在您的drawable文件夹中创建以下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等应该也是您的drawable文件夹中的.PNG文件)。

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

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

选择器XML文件可以像任何图片文件一样从drawable文件夹中引用。

1
这并没有真正回答我的问题...这只允许我更改按钮的背景图像。我想知道当按下按钮时,是否可以通过XML应用样式(例如,加粗文本)。 - user440308

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文件

在您的drawable文件夹中创建一个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>

Source here.


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" />

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

我尝试使用了这个,但它不起作用... 你自己试过了吗?让我知道! - user440308
是的,应该可以正常工作 - 请参见此处ImageView的示例 http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList - Alex Volovoy
请从button.xml中删除style="@style/test",它应该放在<Button>标签内。 - Alex Volovoy
但是如果我将style="@style/test"移动到<Button>,那么这不会将@style/test应用于按钮的所有状态吗?我的问题是是否有一种方法可以在按下按钮时将@style/test应用于按钮。 - user440308

0

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

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

至于加粗,我也没尝试过,但也许你可以在选择器中提及文字样式,而不是引用它的样式:

android:textStyle="bold"

如果这个方法还是不行的话,你可以在按钮的onClick()事件中执行它。

android:background在button.xml中忽略了我的“pressed”状态的样式。我以前尝试过,我认为我不会轻易地通过XML应用样式到按钮上。 - user440308

-3

我没有尝试过,但是你可以在你的选择器中包含android:id="button"


我对你的回答有点困惑。你能详细解释一下吗?所以我会在我的布局中使用android:id="button"引用button.xml文件? - user440308

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接