安卓如何设置按钮按下后的背景颜色

3

我希望在ImageButton被按下时能够改变其背景颜色。

这是我的做法:

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

    <solid android:color="@color/rose_normal" />
    <solid
        android:state_pressed="true"
        android:color="@color/rose_fonce" />

    <stroke
        android:width="1sp"
        android:color="@color/rose_fonce" />

</shape>

我的按钮的正常颜色是“玫瑰正常”,但按下时从未变成“玫瑰深色”。

问题出在哪里?

编辑:问题已解决:

创建一个名为background_rounded_button.xml的xml文件:

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

    <item android:drawable="@drawable/rounded_button_rose_fonce" android:state_selected="true"></item>
    <item android:drawable="@drawable/rounded_button_rose_fonce" android:state_pressed="true"></item>
    <item android:drawable="@drawable/rounded_button_rose_normal"></item>

</selector>

rounded_button_rose_fonce.xml:

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

    <solid android:color="@color/rose_fonce" />

    <stroke
        android:width="1sp"
        android:color="@color/rose_fonce" />

</shape>

rounded_button_rose_normal.xml :

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

    <solid android:color="@color/rose_normal" />

    <stroke
        android:width="1sp"
        android:color="@color/rose_fonce" />

</shape>

最后,为按钮应用背景:
 <ImageButton
        android:id="@+id/all_annonce_button_search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/background_rounded_button.xml"
        android:padding="16dp"
        android:src="@drawable/ic_action_search" />
1个回答

5
问题在于您使用了形状而不是选择器。
试试这段代码(button_selector.xml,将其放入您的“drawable”文件夹中):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/rose_fonce" android:state_selected="true"></item>
    <item android:drawable="@color/rose_fonce" android:state_pressed="true"></item>
    <item android:drawable="@color/rose_normal"></item>

</selector>

将此选择器设置为 Button 的背景时,它在正常状态下将具有“rose_normal”颜色,在按下或选定时将具有“rose_fonce”颜色。

示例:

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

谢谢,它运行良好,但我失去了按钮的椭圆形状。我该如何重新添加这个椭圆形? - wawanopoulos
1
@wawanopoulos,请尝试设置您自定义的两个椭圆形图像,而不是颜色。 - Haresh Chhelana

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