在布局上设置背景会覆盖listSelector

时间:2014-12-30 18:55:08

标签: android xml

所以,我有一个布局(作为ListView中的一行),我有listSelector。这个listSelector工作正常,直到我向布局添加背景。我想将此背景作为起始背景(并将随listSelector一起更改)。但是一旦我添加了背景,listSelector就不再有效了,当我按下它时,我的布局不会改变颜色(如预期的那样)。为什么是这样?感谢。

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/listview_background"
android:listSelector="@drawable/listview_selector"
android:minHeight="140dip"
android:paddingLeft="5dp"
android:paddingRight="5dp" >

<ImageView
    android:id="@+id/imgIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="2dip"
    android:layout_toRightOf="@id/tvTime"
    android:adjustViewBounds="true"
    android:maxWidth="100dip"
    android:padding="4dip"
    android:scaleType="centerInside"
    android:src="@drawable/ic_launcher" />

</RelativeLayout>

背景:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
            <!-- The border color -->
            <solid android:color="#CCCCCC" />
        </shape>
    </item>

    <item android:left="5dp" android:right="5dp" >
        <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
            <!-- The fill color-->
            <solid android:color="#FFFFFF" />
        </shape>
    </item>

</layer-list> 

列表选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/listview_bg_hover" android:state_pressed="true"/>
    <item android:drawable="@drawable/listview_background" android:state_focused="true"/>
    <item android:drawable="@drawable/listview_background"/>

</selector>

1 个答案:

答案 0 :(得分:0)

实际上,listSelector仍在&#34;工作&#34;。但是,问题是项目视图是在其上面绘制的。因此,如果它具有不透明背景,则选择器将完全隐藏。

有两种可能的解决方案:

  • 您可以使用drawSelectorOnTop,它会在您的视图顶部绘制选择器。但是,这仅在选择器稍微透明(默认情况下不是)时才有效。
  • 选择时使用StateListDrawable作为透明的背景(因此,允许显示选择器)。

查看Romain Guy的 List of ListView 谈话,他特别提到了这一点: