Drawable选择器不能在Jelly Bean中工作

Kri*_*s B 13 android drawable android-layout android-4.2-jelly-bean

我有一个drawable选择器作为a中每个项目的背景,ListView以突出显示所选行.Eveything在冰淇淋三明治中运作良好,但似乎在果冻豆中不起作用.找不到任何文档说明哪些更改可能导致它停止工作以及我需要做些什么来解决它.

通过不工作,我的意思是当我点击ListView项目的背景颜色中的一行时没有转动@color/blue颜色,但它在ICS中.

这是我正在使用的选择器代码(listing_selector.xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

   <item android:state_focused="true" android:drawable="@color/blue" />

   <item android:state_pressed="true" android:drawable="@color/blue" />

   <item android:state_activated="true" android:drawable="@color/blue_selected" />  

   <item android:state_selected="true" android:drawable="@color/blue_selected" />

   <item android:drawable="@android:color/transparent" />

</selector>
Run Code Online (Sandbox Code Playgroud)

这是项目的布局ListView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"  
    android:layout_height="fill_parent" 
    android:orientation="horizontal"
    android:background="@color/listing_selector"    
>

    <TextView 
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true" 
    />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

这是蓝色资源:

<resources>
    <color name="blue">#ff33b5e5</color>       
</resources>
Run Code Online (Sandbox Code Playgroud)

更新1:

尝试将选择器从color文件夹移动到drawable文件夹并将代码更新为:

android:background="@drawable/listing_selector"
Run Code Online (Sandbox Code Playgroud)

更新2:

另外,在ListView试图添加这个:

    <ListView android:id="@android:id/list"
        android:layout_width="wrap_content"  
        android:layout_height="fill_parent" 
        android:listSelector="@drawable/listing_selector"   
    />
Run Code Online (Sandbox Code Playgroud)

更新3:

我想这可能是东西在我的代码,但我删除所有代码onListItemClickListView,目前仍是selector不能正常工作.

更新4:

我把它缩小到state_selectedstate_activated不合作,state_pressed似乎在起作用

更新5:

我想我错了.根本不认为选择器被识别.我把内置的ListView高亮显示混淆为我的选择器.我现在想知道它是否与我的项目设置方式有关.我在库类中有选择器.也许从ICS到JB的情况有所改变,但是将选择器移动到我的应用程序的项目似乎没有解决它.

更新6:

好了,一些更揪头发后,我已经收窄,再次,要么 state_selected还是state_activated被认可并非如改变颜色state_pressed没有工作,这意味着我的选择得到了肯定.从评论看起来似乎与我的应用程序有关,因为其他人已经能够让选择器与Jelly Bean一起工​​作.

虽然其他有趣的事情drawable是无法识别更改默认状态的值.我所拥有的color/transparent,我认为将其改为颜色会导致列表更改为该颜色,但事实并非如此.

此外,这也不适用于ICS.

更新7:

在更多的头发拉动后,我发现长按菜单项会导致该项目的颜色发生变化.只是点击一个项目仍然无法正常工作.甚至不确定是什么意思.

**最终更新:**

我放弃了,我删除了选择器,只是刷新ListView点击并记住点击的位置并从代码中突出显示它.不理想,但不值得尝试修复.

Chr*_*ist 2

好吧,我认为这是你的选择器的问题。尝试删除 state_focused 和 state_activated。你可以为你的选择器尝试这个:

<!-- Disabled State -->
<item
    android:state_enabled = "false"
    android:state_focused = "true"
    android:state_pressed = "true"
    android:drawable="@android:color/transparent">
</item>
<item
    android:state_enabled = "false"
    android:state_focused = "true"
    android:drawable="@android:color/transparent">
</item>

<!-- Pressed State -->
<item
    android:state_pressed = "true"
    android:state_focused = "true">
    <shape>
        <solid android:color="@color/blue"/>
    </shape>
</item>
<item
    android:state_pressed = "true"
    android:state_focused = "false">
    <shape>
        <solid android:color="@color/blue"/>
    </shape>
</item>

<!-- Normal State -->
<item
    android:drawable="@android:color/transparent">
</item>
Run Code Online (Sandbox Code Playgroud)

我发现我也需要使用形状对象而不是android:drawable,因为在 ICS 之前的手机上,整个列表将突出显示该颜色而不是按下的列表项。

您也可以添加state_selected代码,但我不确定它将如何使用。查看 jelly bean 的默认选择器代码以了解它们使用的状态:list_selector_background.xml