Android 在布局替代列表选择器上设置背景
因此,我有一个布局(作为ListView中的一行)和listSelector。在我向布局添加背景之前,此listSelector工作正常。我希望这个背景作为起始背景(并将随listSelector而改变)。但是,一旦我添加了背景,listSelector就不再工作,当我按下它时,我的布局也不会改变颜色(如预期的那样)。为什么会这样?谢谢 布局:Android 在布局替代列表选择器上设置背景,android,xml,Android,Xml,因此,我有一个布局(作为ListView中的一行)和listSelector。在我向布局添加背景之前,此listSelector工作正常。我希望这个背景作为起始背景(并将随listSelector而改变)。但是,一旦我添加了背景,listSelector就不再工作,当我按下它时,我的布局也不会改变颜色(如预期的那样)。为什么会这样?谢谢 布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:androi
<?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>
实际上,
列表选择器仍然“工作”。但是,问题是项目视图是在它上面绘制的。因此,如果它具有不透明背景,则选择器将完全隐藏
有两种可能的解决方案:
- 您可以使用
drawSelectorOnTop
,它将在视图顶部绘制选择器。但是,只有当选择器是透明的(默认情况下不是透明的)时,这才有效
- 使用
StateListDrawable
作为背景,当选择时,背景是透明的(因此,允许显示选择器)
查看Romain Guy的ListView谈话世界,他特别提到:
- (幻灯片33)