将背景更改为颜色后,对Button的onClick的突出显示效果消失

时间:2013-12-17 14:32:21

标签: java android button colors background

当按钮与默认灰色保持不变时,在执行onClick操作之前单击时会突出显示该按钮。我已将按钮的背景更改为红色,现在点击时的高光效果消失了。如何使用新背景再次实现这一目标?我猜我想要的只是一个突出显示的红色或点击时的浅红色。

我在SO上看了一下,发现很多人都说在onclickbuttonhighlight.xml文件夹中创建一个res/drawable文件。我在下面这样做了。

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/blue"
        android:state_focused="true"
        android:state_pressed="true"/>
    <item
        android:drawable="@color/blue"
        android:state_focused="false"
        android:state_pressed="true"/>
    <item
        android:drawable="@color/blue"
        android:state_focused="true"
        android:state_pressed="false"/>
    <item
        android:drawable="@color/blue"
        android:state_focused="false"
        android:state_pressed="false"/>
</selector>

我不太确定要说android:drawable="@color/blue"的行。我只是用蓝色进行测试。然后在XML文件中,我在按钮下添加了android:background="@drawable/onclickbuttonhighlight"。点击后我没有看到任何高光效果。

我这样做不正确吗?或者有更好的方法吗? XML或以编程方式工作;我没有偏好。

2 个答案:

答案 0 :(得分:3)

对于自定义按钮样式

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

    <item android:drawable="IMAGE_FOR_DISABLED_STATE" android:state_enabled="false"/>
    <item android:drawable="IMAGE_FOR_PRESSED_STATE" android:state_enabled="true" android:state_pressed="true"/>
    <item android:drawable="IMAGE_FOR_FOCUSED_STATE" android:state_enabled="true" android:state_focused="true"/>
    <item android:drawable="IMAGE_FOR_ENABLED_STATE" android:state_enabled="true"/>

</selector>

看到压缩状态和聚焦状态有不同的可绘制(图像)。

如果是默认的android系统,我们有drawables

启用按钮

default holo drawable

对于焦点状态

default focused drawable

default disabled drawable表示禁用状态

因此,当我们按下按钮或对焦时,我们会看到蓝色的边框。

现在,当您更改默认背景时,您正在将drawable更改为颜色值,而您没有通过drawable指定其他按钮状态。因此,系统将颜色值本身用于所有状态,并且您看不到任何悬停效果。

因此,如果您希望实现自定义按钮,而不是直接将颜色设置为背景,请将可绘制文件指定为背景,该文件指定所有按钮状态的颜色/可绘制图像,例如按下,聚焦,启用,禁用

答案 1 :(得分:1)

根据我的经验,覆盖按钮样式的一部分可以摆脱所有样式。 我使用http://android-holo-colors.com/并在那里制作按钮样式。