我有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
。
有人知道我的问题在哪里吗?
谢谢!
答案 0 :(得分:36)
确保您的RelativeLayout可点击
答案 1 :(得分:5)
尝试添加到您的ImageView android:clickable =“true”
答案 2 :(得分:5)
您也可以在android:addStatesFromChildren="true"
而不是RelativeLayout
中设置android:clickeable="true"
。如果您的孩子已经是可以解答的,可以集中精力等等。您不应该使RelativeLayout
成为可笑或焦点。
答案 3 :(得分:2)
在我看来,您应该使用Button
并为其创建选择器,而不是通过创建RelativeLayout
并放置ImageView
和TextView
来制作自定义按钮。
然后你可以使用android:drawableTop="@drawable/your_contact_icon"
。之后,您可以检查您的选择器是否正常工作。
答案 4 :(得分:1)
希望这些可以帮到某人;
android:clickable,android:descendantFocusability,android:focusable,android:focusableInTouchMode
在样式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