ListView:drawSelectorOnTop在主题中被忽略了吗?

时间:2012-06-15 05:37:38

标签: android listview

在styles.xml中,我为ListView项定义了一个主题和一个样式:

// styles.xml
<style name="MyTheme">
    <item name="android:listViewStyle">@style/ListView</item>
</style>

<style name="ListView">
    <item name="android:drawSelectorOnTop">true</item>
    <item name="android:listSelector">@drawable/my_red_selector</item>
</style>

我正在使用ListFragment,我可以看到我的listview选择器的颜色受到尊重(“@ drawable / my_red_selector”),但似乎忽略了drawSelectorOnTop属性 - 我的选择器仍在下面绘制。

如果我定义自己的布局文件并执行:

<ListView
    android:id="@+id/foo"
    ...
    style="@style/ListView" />

然后尊重样式中的drawSelectorOnTop属性。有没有什么我可能在这里做错了,我的选择器在顶部属性被忽略了?

由于

----编辑---------

以下是“my_red_selector”的定义:

// my_red_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/red_on"/>
  <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/red_on"/>
  <item android:state_focused="true" android:drawable="@drawable/red_on"/>
  <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/transparent"/>
</selector>

// red_on.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
  <solid android:color="@color/red" />
</shape>

1 个答案:

答案 0 :(得分:2)

如果您有自定义行,请在ListView的列表项行上尝试以下选择器        

    <!-- Active tab -->
    <item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
    <!-- Inactive tab -->
    <item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
    <!-- Pressed tab -->
    <item android:drawable="@drawable/red_on" android:state_pressed="true"/>
    <!-- Selected tab (using d-pad) -->
    <item android:drawable="@drawable/red_on" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>

</selector>