如何在Android中更改所选ListView项目的默认背景颜色?

时间:2014-07-15 20:38:45

标签: android listview android-fragments

我想更改Android中导航抽屉中所选项目的默认颜色(蓝色)。我已经让它在过去的项目中工作,但我不能参与我目前正在进行的项目。

这是应用主题。

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>
    <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item>
    <item name="android:buttonStyle">@style/AppTheme.Button</item>
</style>

这是activated_background drawable。

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@drawable/list_selected"/>
    <item android:state_selected="true" android:drawable="@drawable/list_selected"/>
    <item android:state_pressed="true" android:drawable="@drawable/list_selected"/>
</selector>

最后,这是导航抽屉片段。

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#cccc"
tools:context=".NavigationDrawerFragment" />

就像我说的,这对我来说很有用。我能想到的项目之间的唯一区别是之前,我的应用主题是继承自&#34; Theme.AppCompat&#34;这个项目的主题继承自&#34; android:Theme.Holo.Light.DarkActionBar&#34;。此外,我在我的新项目中使用v4支持片段,而在另一个项目中,我只是使用标准片段。

任何建议都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

编辑:

似乎问题是如何保留所选的ListView中的项目,而不是实际上如何设置所选项目的结果背景。

有关如何更改ListView项目的背景后,请参阅此优秀答案:

Android - Keep ListView's item highlighted once one has been clicked

基本的想法是,当点击项目时,你可以改变它的背景(或其他任何东西)。棘手的部分是您必须让列表适配器记住所选的行。否则当/如果您滚动列表/导航抽屉时,您将失去选择。

原始答案:

您需要在ListView中设置自定义AppTheme样式,并将android:listSelector项目设置为@drawable/activated_background

如果您不希望整个应用程序使用该样式,只需在应用程序抽屉布局中为ListView指定该样式,或者更简单地只设置android:listSelector属性ListView。 1}},甚至不打算定义一种风格。

答案 1 :(得分:1)

我明白了。我没有使用我的主题来尝试应用样式,而是为列表项创建了自己的xml布局,而不是使用默认值并从那里设置选择器。

这是列表项xml的样子。

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@android:id/text1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:textAppearance="?android:attr/textAppearanceListItemSmall"
  android:textColor="@drawable/list_txtcolor"
  android:gravity="center_vertical"
  android:paddingStart="?android:listPreferredItemPaddingStart"
  android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
  android:background="@drawable/activated_background"
  android:minHeight="?android:attr/listPreferredItemHeightSmall">
</TextView>

如您所见,我只是将项目背景设置为我的选择器。

android:background="@drawable/activated_background"

再次,这是我的选择。

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_activated="true" android:drawable="@drawable/list_selected"/>
  <item android:state_selected="true" android:drawable="@drawable/list_selected"/>
  <item android:state_pressed="true" android:drawable="@drawable/list_selected"/>
</selector>