2013-04-23 84 views
15

RelativeLayout这样的:的Android RelativeLayout的选择state_pressed不起作用

<?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 dosn't似乎工作。

我有几个上面提到的RelativeLayouts和没有人与state_pressed一起工作。

有谁知道我的问题在哪里?

谢谢!

回答

35

确保你的RelativeLayout是可点击

+0

+1和V的快速响应 – 2013-04-23 09:14:55

+0

我已经添加** android:clickable =“true”**到RelativeLayout,然后在RelativeLayout上随处点击导致内部的stateListener行动起来! – TacB0sS 2014-12-24 11:28:49

+0

它与'Relativelayout'一起使用,包含'TextView'和'ImageView',因为我需要将选择器应用到Rl Bg – Herry 2015-01-06 13:34:40

5

尝试添加到您的ImageView的机器人:可点击=“真”

2

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

+0

那么,与RelativeLayout的我可以改变文本,不要把它变成图像的最低标准。 – 2013-04-23 09:09:25

+0

@MaximShoustin好吧,非常足够;) – mmBs 2013-04-23 09:23:20

4

您还可以设置android:addStatesFromChildren="true"RelativeLayout而不是android:clickeable="true"。如果你的孩子已经是可以点击,可以对焦的等等。你不应该使你的可以对齐或者可以对焦。

+0

您是对的,如果您有已经注册的子视图Click Listeners,那么您需要添加addStatesFromChildren =“true”以及clickable =“true”以使选择器工作在父级布局。 – iAviatorJose 2016-04-15 06:53:09

+0

谢谢。这个对我有用, – 2016-05-07 10:05:25

0

希望这些帮助某人;

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

机器人:点击,安卓descendantFocusability,机器人:可聚焦,安卓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> 
    

    Ref;

    在每个状态变化,状态列表顶部运行至底部 和匹配当前状态下使用,在 选择不是基于第一项“最佳匹配”,而仅仅是第一项 符合国家

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