如何为ListView项目设置高亮颜色?

9
我需要为ListView项制作另一种高亮颜色。我使用自定义适配器来处理项,以下是我的代码:
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:weightSum="1.0"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_weight="0.13"
        android:background="@drawable/booklist_header"
        android:orientation="horizontal"
        android:layout_height="0dp" >

        <ImageView
            android:id="@+id/imageViewBookListBack"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:src="@drawable/back_button" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="fill_parent"
        android:layout_weight="0.77"
        android:layout_height="0dp" >

        <ListView
            android:id="@+id/listViewCurrentList"
            android:listSelector="@drawable/selector"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        </ListView>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayoutBooklistAdwhirl"
        android:layout_width="fill_parent"
        android:layout_weight="0.1"
        android:layout_height="0dp" >
    </LinearLayout>

</LinearLayout>

商品布局的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageViewBookListItemImage"
        android:layout_width="120dp"
        android:layout_marginTop="15dp"
        android:layout_height="120dp" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="135dp"
        android:layout_marginTop="15dp"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textViewBookListItemTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium Text"
            android:textColor="#000000"
            android:textStyle="bold"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textViewBookListItemAuthor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium Text"
            android:textColor="#000000"
            android:textAppearance="?android:attr/textAppearanceMedium" />

    </LinearLayout>

</LinearLayout>

选择器的代码:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/green" /> <!-- focused -->
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/green" /> <!-- focused and pressed-->
    <item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed -->
    <item android:drawable="@color/green" /> <!-- default -->
</selector> 

颜色.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="green">#006400</color>
    <color name="white">#FFFFFF</color>


</resources>

但是我有一个问题:ListView项目不会在点击时改变颜色!它总是白色。我哪里出错了?
4个回答

27

这是如何做的:

首先,在你的ListView中,放置以下内容:

 android:listSelector="#00000000"

这会使得你的listSelector(通常在点击ListView时看到的颜色)变为透明。

接下来,将你的item layout中的LinearLayout设置为以下内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/selector"
    android:orientation="horizontal" >

几天前我也遇到了同样的问题,花了很长时间才弄清楚。希望这对你有用!


4
有两行包含 android:background。请更正。 - Maksim Dmitriev

2
您可以尝试将 android:drawSelectorOnTop="true" 添加到 ListView 的定义中。
希望这能帮到您!
P.S. 您可以优化主要布局并删除不必要的布局。您可以使用 layoutopt 进行此操作。

1
谢谢。但是现在当我点击该项时整个ListView的颜色都变为绿色,但我只需要一个项目。我该如何修复它? - user1078760
嗯,对于这个问题,你可以在这里查找解决方案:https://dev59.com/VnE85IYBdhLWcg3w43wX。我也会尽快检查并回复你。 - Dimitris Makris

0
android:drawSelectorOnTop="true"

0
即使这个问题已经晚了,我想分享一个更简单的解决方案,甚至为了我的未来自己:
在你的ListView中只需设置:
android:listSelector="@drawable/selector"

在您的列表项中,您需要移除背景。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接