Android ListView选择器颜色

Android ListView选择器颜色,android,android-listview,Android,Android Listview,大家好, 关于Android中的ListView,我有两个问题: 如何获取列表视图聚焦行的颜色? 我尝试使用ListView.getSelector()方法,根据它的文档,它应该能提供我想要的东西,但它给了我一个可绘制的对象,我不知道如何从中检索颜色(如果可能的话…) 如何设置listview聚焦行的颜色? 在这里,我尝试在listview上使用setSelector()方法,向它传递一个可着色的对象,但这样做的结果是列表视图的整个背景都是以该颜色绘制的。。。这不是我想要的当然 谢谢 列表选择器

大家好,

关于Android中的ListView,我有两个问题:

  • 如何获取列表视图聚焦行的颜色? 我尝试使用ListView.getSelector()方法,根据它的文档,它应该能提供我想要的东西,但它给了我一个可绘制的对象,我不知道如何从中检索颜色(如果可能的话…)

  • 如何设置listview聚焦行的颜色? 在这里,我尝试在listview上使用setSelector()方法,向它传递一个可着色的对象,但这样做的结果是列表视图的整个背景都是以该颜色绘制的。。。这不是我想要的当然


  • 谢谢

    列表选择器drawable是一个-它包含对列表中每个状态的多个drawable的引用,例如选择、聚焦、按下、禁用

    虽然您可以使用
    getSelector()
    检索可绘制文件,但我不相信您可以从
    StateListDrawable
    检索特定的
    drawable
    ,也不可能通过编程直接从
    ColorDrawable
    检索颜色

    至于设置颜色,您需要一个如上所述的
    StateListDrawable
    。您可以使用
    android:listSelector
    属性在列表中设置该属性,定义可在XML中绘制的内容,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_enabled="false" android:state_focused="true"
            android:drawable="@drawable/item_disabled" />
      <item android:state_pressed="true"
            android:drawable="@drawable/item_pressed" />
      <item android:state_focused="true"
            android:drawable="@drawable/item_focused" />
    </selector>
    
    
    
    要添加的内容:如果您使用的是颜色而不是绘图,则API 7/8(根据@Jonny的正确评论)不起作用。(在我的测试中,根据Christopher的工作原理使用可拉丝)

    以下是使用颜色时2.3及以下版本的修复:

    根据@Charles Harley,2.3及以下版本中存在一个缺陷,即用颜色填充列表项会导致颜色在整个列表中溢出。他的解决办法是定义一个包含你想要的颜色的
    形状
    可绘制图形,并用它代替颜色


    如果您只想使用颜色作为选择器,并且目标是Android 2(或至少允许Android 2),我建议您查看此链接。

    我还建议将列表选择器指定给自定义主题,以便应用程序中的所有列表看起来都一样@drawable/my_list_Highlight这至少在API 7/8中不起作用。当按下时,它似乎会将整个背景更改为相同的按下颜色,包括其他行的背景,以及行与行之间的边距线(我有黑色)。@Jonny它对我在使用drawables时有效,但在使用颜色时无效。我已经添加了一个很好的解决方案,它适用于颜色。您好,我正试图像您建议的那样在我的列表视图中使用选择器,但它有9个PNG而不是颜色,我还有一个自定义布局,我在我的列表视图中充气,并使用选择器作为自定义布局的背景,您能建议吗?这可能会有所帮助(有问题也有解决方案):Android 2中似乎存在一个导致颜色影响整个背景的缺陷-请检查我的答案,该答案链接到另一个问题的解决方法。这刚才再次让我感到困惑,谢谢你提醒我真正的问题是什么。