Android RelativeLayoutselect器state_pressed不起作用

我有这样的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> 

在这里输入图像说明

看起来像:

在这里输入图像说明

我的contactsselect器似乎:

 <?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个图像:默认情况下,select和按下。

但我有一个问题: 只有默认和state_selected图像工作正常,但state_pressed似乎没有工作。

我有几个上面提到RelativeLayouts和没有人与state_pressed

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

谢谢!

Solutions Collecting From Web of "Android RelativeLayoutselect器state_pressed不起作用"

确保你的RelativeLayout是可点击的

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

你也可以在你的RelativeLayout设置android:addStatesFromChildren="true" ,而不是android:clickeable="true" 。 如果你的孩子已经clickeable,focusable等你不应该让你的RelativeLayout clickeable或focusable。

在我看来,你应该使用Button并为其创buildselect器,而不是通过创buildRelativeLayout并放置ImageViewTextView来创build自定义button。 然后你可以使用android:drawableTop="@drawable/your_contact_icon" 。 之后,你可以检查你的select器是否正常工作。

希望这些帮助某人;

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

android:clickable,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> 

参考值;

在每个状态改变期间,状态列表被自上而下遍历,并使用与当前状态相匹配的第一个项目 – select不是基于“最佳匹配”,而是仅仅是满足状态的最低标准的第一项

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