15

我有RelativeLayout这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/contacts"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight="0.2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:contentDescription="@string/content_description_contacts"
    android:scaleType="fitXY"
    android:src="@drawable/contacts" />

<TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignBottom="@id/image"
    android:paddingBottom="10dp"
    android:textColor="@drawable/text_color"
    android:text="@string/button_contacts"
    android:textSize="12sp" />    
</RelativeLayout>

在此处输入图像描述

看起来像:

在此处输入图像描述

我的contacts选择器似乎:

<?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/contacts_over" />
<item android:state_selected="true"
    android:drawable="@drawable/contacts_selected" />
<item
     android:drawable="@drawable/contacts_default" />
</selector>

如您所见,我有 3 张图像:默认情况下,选中并按下。

但我有一个问题:只有默认值和state_selected图像按预期工作,但state_pressed似乎不起作用。

我上面提到了几个RelativeLayouts,没有人使用state_pressed.

有人知道我的问题在哪里吗?

谢谢!

4

5 回答 5

38

确保您的 RelativeLayout 是可点击的

于 2013-04-23T08:30:07.827 回答
6

您也可以设置android:addStatesFromChildren="true"在 yourRelativeLayout而不是android:clickeable="true". 如果您的孩子已经可点击、可聚焦等。您不应该让您的RelativeLayout可点击或可聚焦。

于 2015-12-21T19:05:08.930 回答
5

尝试添加到您的 ImageView android:clickable="true"

于 2013-04-23T08:09:29.617 回答
2

在我看来,您应该Button为它使用和创建选择器,而不是通过创建RelativeLayout和放置自定义按钮ImageViewTextView. 然后你可以使用android:drawableTop="@drawable/your_contact_icon". 之后,您可以检查您的选择器是否正常工作。

于 2013-04-23T08:14:55.120 回答
1

希望这些对某人有所帮助;

  1. 确保查看可点击。后代可以阻止点击事件。更多信息搜索以下属性。

android:可点击,android:descendantFocusability,android:focusable,android:focusableInTouchMode

  1. 在样式 xml 中,您应该定义项目元素状态属性或确保没有属性的项目必须位于末尾。

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/lightGold"/>
            <stroke android:width="1dp" android:color="@color/lightGrey"/>
            <padding android:bottom="@dimen/padding1" android:left="@dimen/padding1" android:right="@dimen/padding1" android:top="@dimen/padding1"/>
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="@color/white_two"/>
            <stroke android:width="1dp" android:color="@color/lightGrey"/>
            <padding android:bottom="@dimen/padding1" android:left="@dimen/padding1" android:right="@dimen/padding1" android:top="@dimen/padding1"/>
        </shape>
    </item>
    

但是这个样本不起作用;

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape>
        <solid android:color="@color/white_two"/>
        <stroke android:width="1dp" android:color="@color/lightGrey"/>
        <padding android:bottom="@dimen/padding1" android:left="@dimen/padding1" android:right="@dimen/padding1" android:top="@dimen/padding1"/>
    </shape>
</item>
<item android:state_pressed="true">
    <shape>
        <solid android:color="@color/lightGold"/>
        <stroke android:width="1dp" android:color="@color/lightGrey"/>
        <padding android:bottom="@dimen/padding1" android:left="@dimen/padding1" android:right="@dimen/padding1" android:top="@dimen/padding1"/>
    </shape>
</item>

或者您可以为这两个项目定义状态属性。所以顺序并不重要。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape>
            <solid android:color="@color/white_two"/>
            <stroke android:width="1dp" android:color="@color/lightGrey"/>
            <padding android:bottom="@dimen/padding1" android:left="@dimen/padding1" android:right="@dimen/padding1" android:top="@dimen/padding1"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/lightGold"/>
            <stroke android:width="1dp" android:color="@color/lightGrey"/>
            <padding android:bottom="@dimen/padding1" android:left="@dimen/padding1" android:right="@dimen/padding1" android:top="@dimen/padding1"/>
        </shape>
    </item>
</selector>

参考;

在每次状态更改期间,从上到下遍历状态列表并使用与当前状态匹配的第一项——选择不是基于“最佳匹配”,而只是满足状态最低标准的第一项

状态列表 https://developer.android.com/guide/topics/resources/drawable-resource.html

于 2017-03-02T08:28:33.837 回答