Listview 项目在单击时突出显示(不需要)

Posted

技术标签:

【中文标题】Listview 项目在单击时突出显示(不需要)【英文标题】:Listview item got highlighted on click (not wanted) 【发布时间】:2015-02-17 21:03:25 【问题描述】:

我有一个包含项目的 TabHost,我希望它们仅在单击时突出显示。

我以前有过它,但我在 ListViews 本身上没有改变任何东西,但在 TabHost 上(我认为这应该没关系..)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context="at.htl3r.appmosphere.MainActivity$PlaceholderFragment" >

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_
                android:layout_ >
            </TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_
                android:layout_ >

                <ListView
                    android:id="@+id/tab1"
                    android:layout_
                    android:layout_ >
                </ListView>

                <ListView
                    android:id="@+id/tab2"
                    android:layout_
                    android:layout_ >
                </ListView>

                <ListView
                    android:id="@+id/tab3"
                    android:layout_
                    android:layout_ >
                </ListView>

                <ListView
                    android:id="@+id/tab4"
                    android:layout_
                    android:layout_ >
                </ListView>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
</RelativeLayout>

我阅读了一些如何禁用它的帖子,但 I don't want to disable it complete 因为我将处理点击操作

我尝试添加choiceMode="none"selector

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/darkgreen_light" android:state_pressed="true"/>
    <item android:drawable="@android:color/transparent" android:state_activated="true"/>
    <item android:drawable="@android:color/transparent" android:state_checked="true"/>
    <item android:drawable="@android:color/transparent" android:state_selected="true"/>
    <item android:drawable="@android:color/transparent"/>

</selector>

更新

更好的选择:ViewPagerIndicator

【问题讨论】:

【参考方案1】:

您应该将列表视图的选择模式保持为单选(以便能够检测项目选择/点击),并将列表选择器覆盖为透明(@null 适用于旧版本的 android,但不适用于 16+):

<style name="YourTheme.ListView" parent="@android:style/Widget.ListView">
    <item name="android:listSelector">@drawable/listSelector</item>
    <item name="android:choiceMode">singleChoice</item>
</style>

<?xml version="1.0" encoding="utf-8"?>

您的 listSelector.xml 可能如下所示:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/darkgreen_light" android:state_pressed="true"/> <!-- pressed -->
    <item android:drawable="@color/darkgreen_light" android:state_focused="true"/> <!-- focused -->
    <item android:drawable="@android:color/transparent"/> <!-- default -->

</selector>

更新

如果您不想要任何关于项目点击的视觉反馈,只需将列表视图样式中的@drawable/listSelector 更改为@android:color/transparent

【讨论】:

我只想处理点击而不是选择;没有改变任何东西......仍然选择点击的项目...... 我的意思是它不应该是恒定的,如果我点击它,它应该只在新闻期间突出显示,而不是之后

以上是关于Listview 项目在单击时突出显示(不需要)的主要内容,如果未能解决你的问题,请参考以下文章

在android的listview中突出显示所选项目

ListView 项目在滚动后保持突出显示

Android listview 不再突出显示单击时的选择

如何选择/突出显示列表视图中的项目而不触摸它?

Android - 单击后保持 ListView 的项目突出显示

删除 ListView 中所有项目的 onClick 突出显示