Android RelativeLayout选择器state_pressed不起作用

时间:2013-04-23 08:06:07

标签: android android-relativelayout

我有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>

enter image description here

似乎:

enter image description here

我的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

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

谢谢!

5 个答案:

答案 0 :(得分:36)

确保您的RelativeLayout可点击

答案 1 :(得分:5)

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

答案 2 :(得分:5)

您也可以在android:addStatesFromChildren="true"而不是RelativeLayout中设置android:clickeable="true"。如果您的孩子已经是可以解答的,可以集中精力等等。您不应该使RelativeLayout成为可笑或焦点。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

希望这些可以帮到某人;

  1. 确保视图可点击。后代可以阻止点击事件。更多信息搜索以下属性。
  2. 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>
      

    2. 但这个样本不起作用;

      <?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