【问题标题】:Is there any way to change default pressed color for all listviews in android?有什么方法可以更改 android 中所有列表视图的默认按下颜色?
【发布时间】:2015-04-20 19:51:23
【问题描述】:

我正在开发的应用程序有多个项目列表(包括 NavigationDrawer 中的一个、对话框中的一个等)。

当用户在棒棒糖之前的智能手机上按下列表中的一项时,背景会变为浅蓝色(包括 PreferenceActivity 上的首选项)。然而,在棒棒糖设备上,背景变为带有美丽波纹效果的浅灰色。我想要的是所有设备都具有相同的浅灰色(不需要波纹效果)。

我似乎有一些人为 ListView 项目设置背景设置样式的帖子,但我需要一种方法来同时设置所有这些项目的样式。

ps:我的应用使用 Theme.AppCompat.Light.NoActionBar 作为基本主题。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    创建一个文件 res/drawable/listitem_background.xml,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_activated="true" android:drawable="@color/purple_dark" />
        <item android:drawable="@android:color/transparent" />
    </selector>
    

    用您选择的颜色替换@color/purple_dark

    然后,在您的主题中,添加以下行:

    <item name="android:activatedBackgroundIndicator">@drawable/listitem_background</item>
    

    编辑:

    要保留棒棒糖的效果和颜色,而不是将主题放在 values 文件夹中,请将其放在 values-v22

    【讨论】:

    • 这也会覆盖列表视图的棒棒糖动画。
    • android:activatedBackgroundIndicator 和 android:state_activated 似乎适用于 api 11+。有没有类似的兼容 api 8 的东西?
    • @Tinadm 我不这么认为,但我不认为你应该花太多精力来与 Froyo 兼容,根据谷歌developer.android.com/about/dashboards/index.html ,低于 0.4% Android 设备仍然有 froyo,所以我认为支持 api 11 及更高版本就足够了。
    • @El_Mochiq 是的,我认为你是对的......支持 Honeycomb 就足够了。感谢您的帮助!
    • 是否可以让 Kitkat 之前的版本拥有与 Kitkat 相同的选择器,而 Lollipop+ 版本拥有自己的原生选择器?
    【解决方案2】:

    定义一个像这样的样式资源文件

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="MyTheme" parent="android:Theme.AppCompat.Light.NoActionBar">
            <item name="android:listViewStyle">@style/MyListViewStyle</item>
        </style>
    
        <style name="MyListViewStyle" parent="android:Widget.ListView">
            <item name="android:layout_width">match_parent</item>
            <item name="android:layout_height">wrap_content</item>
            <!-- Other stuff you need -->
        </style>
    </resources>
    

    在您的清单集中

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/MyTheme">
    

    现在,您的所有 ListView 都将看起来像您在默认情况下定义的样式。如果您愿意,当然可以更改其中的一些。

    您可以找到更复杂但非常有用的示例HERE

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 1970-01-01
      • 2014-04-08
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多