更改ListView的背景颜色会禁用高亮颜色

3
我有一个搜索结果列表,它们在ListActivity中显示。当我通过更改第一个LinearLayout(父级)的背景颜色来更改ListActivity项的背景颜色时,OnClick高亮停止工作。为什么会这样?我如何使此高亮在更改项目背景颜色时仍然有效?另外,是否可以更改此高亮的颜色?谢谢。
我的XML大致如下:
<LinearLayout>
<LinearLayout>
 <ImageView>
 <LinearLayout>
  <TextView>
  </TextView>
  <TextView>
  </TextView>
  <TextView>
  </TextView>
 </LinearLayout>
</LinearLayout>

我的活动是这样的:

public class ResultsPage extends ListActivity {
2个回答

5

正如James所说,如果你在代码中更改了背景颜色,当用户在ListView中选择一个项目时,它不会高亮显示该项目。

您可以使用属性drawSelectorOnTop="true"来修复这些行为,在您的ListView定义中。例如:

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="true"
/>

这个可以运行,但是高亮的背景会覆盖在任何你有的textview或image上。 - dbernard
我已经花了数天数小时来解决这个问题。我试图在特定背景下实现涟漪效果。当我有一个背景时,涟漪效果就会消失。现在我既有自定义项目背景,又有涟漪效果。非常感谢。 - tasomaniac

4
这是因为Android处理背景的方式。ListView的默认背景是在XML中定义的选择器可指定不同状态下的不同背景。当你设置ListView有一个特定的背景图像或颜色时,你失去了告诉它在不同状态下该做什么的选择器。
参见此处的“State List”部分http://developer.android.com/guide/topics/resources/drawable-resource.html 另外回答你的第二个问题,是的。如果你想改变高亮背景,只需按照上述页面上的文档进行指定即可。你可以自己定义带有状态列表的可绘制对象,没有问题。

谢谢你指导我朝着正确的方向。这将比我想象的更困难,但我需要解决这个问题。 - TomaszRykala

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