当我触摸ImageView时,为什么我的状态列表可绘制对象(state-list-drawable)没有使用按下状态(drawable for pressed-state)?

3

我在XML中定义了我的ImageView如下:

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_imageView"
        android:src="@drawable/ic_photo"
        android:background="@drawable/button_state_list_drawable" />
button_state_list_drawable.xml 是一个按钮状态列表的可绘制文件。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

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

    <item android:drawable="@drawable/button_enabled_state_drawable"
        android:state_enabled="true" />

</selector>

button_pressed_state_drawable.xml 是:

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

    <size android:width="50dp"
        android:height="50dp" />

    <padding android:left="25dp"
        android:right="25dp"
        android:top="25dp"
        android:bottom="25dp" />

    <stroke android:color="#fff"
        android:width="1dp" />

    <solid android:color="#1aafd0" />

</shape>

button_enabled_state_drawable.xml 是:

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

    <size android:width="50dp"
        android:height="50dp" />

    <padding android:left="25dp"
        android:right="25dp"
        android:top="25dp"
        android:bottom="25dp" />

    <stroke android:color="#fff"
        android:width="1dp" />

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

</shape>

问题在于当我点击/触摸ImageView时,似乎没有使用button_pressed_state_drawable,也就是说我看不到<solid android:color="#1aafd0" />的效果(这基本上是两个drawable之间唯一的区别),也就是说背景色仍然是透明的,而不是变成蓝色。我错在哪里了?
2个回答

5

我认为你的ImageView不可点击。

尝试使用ImageView.setClicked(true)使其可点击。

或者

        android:clickable="true"

同时确保您的图像资源不会覆盖您的背景。
这就是我所做的,它运行良好。
    <ImageView
        android:id="@+id/fragment_imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_state_list_drawable"
        android:clickable="true"
        android:padding="20dp"
        android:src="@drawable/ic_launcher"/>

谢谢你,伙计。没有设置这个单属性让我头痛不已。 - Monish Kamble

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

<item android:drawable="@drawable/button_enabled_state_drawable"
    android:state_enabled="true" />

一个按钮可以同时被“按下”和“启用”。尝试从第二个项目中删除android:state_enabled="true"。

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