为什么我的RelativeLayout不使用选择器?

时间:2016-01-22 19:07:45

标签: android android-selector

我有一个RelativeLayout

<Window.Resources>
   <sys:String x:Key="strHelloWorld">Hello, world!</sys:String>
</Window.Resources>

我定义了一个选择器

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_centerInParent="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:background="@drawable/animated_bg">

但是当我按下布局时,它不会改变颜色。

任何人都可以注意到为什么会这样?

更新

这是完整的xml文件

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ripple_color">
<item>
    <selector>
        <item android:state_pressed="true"
            android:drawable="@color/grey_1" />

        <item android:state_focused="true"
            android:drawable="@color/grey_1" />

        <item android:drawable="@color/white" />
    </selector>
</item>

2 个答案:

答案 0 :(得分:2)

我已经使用选择器测试了你的布局。它运作良好。但是,我不知道你的相对布局中是否有任何其他视图/布局?如果RelativeLayout有子视图。这些视图可能会消耗您的事件press,导致背景不会改变其颜色。在我的测试中,我的相对布局中没有任何子视图。你能发布整个布局文件吗?

更新: 如果您的子视图不需要处理click事件,您可以设置android:clickable="false",以便将click事件传递给您的父相对布局。如果不是这样,那么link可能对您有所帮助。

答案 1 :(得分:0)

在你的xml选择器颜色为android:state_pressed android:state_focused是相同的:@ color / grey_1。尝试为两者提供不同的颜色。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ripple_color">
<item>
    <selector>
        <item android:state_pressed="true"
            android:drawable="@color/grey_1" />

        <item android:state_focused="true"
            android:drawable="@color/grey_1" />

        <item android:drawable="@color/white" />
    </selector>
</item>