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

3
在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>

你是想在 @drawable/my_red_selector 中更改焦点时的背景颜色吗? - Sana
嗨,Sana,也许是的,我把我的选择器定义粘贴在上面,可能这就是问题所在? - user291701
你有没有找到可行的解决方案?我也遇到了同样的问题。一个普通的ListView可以正常工作,但是ListFragment却不能按预期工作。 - Tony Maro
1个回答

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>

好的,我尝试了那个选择器,但是效果还是一样,被绘制在后面。我的ListView行也没有出现任何奇怪的情况,它们只是普通的LinearLayout,没有指定背景或其他东西。 - user291701
你的ListView是自定义的ListView还是标准的ArrayAdapter? - Sana
在一个情况下,这是一个自定义的ListView,而在另一个情况下,我正在使用ArrayAdapter。 - user291701
这里我们处理两个列表视图吗? - Sana
嗨,是的,我的项目中有几个列表视图,但它们都是在这两种配置中(自定义列表视图和数组适配器列表视图)。 - user291701
好的,让我们先从自定义列表视图开始。因此,当您将我在答案中提供的XML作为背景应用于自定义列表视图时,您使用的行布局不会将背景更改为红色? - Sana

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