Android Drawable选择器在Jelly Bean中不起作用

Android Drawable选择器在Jelly Bean中不起作用,android,android-layout,drawable,android-4.2-jelly-bean,Android,Android Layout,Drawable,Android 4.2 Jelly Bean,我有一个可绘制的选择器作为列表视图中每个项目的背景,以突出显示所选行。在冰淇淋三明治里,一切都很好,但在果冻豆里似乎不起作用。找不到任何文档说明哪些更改可能导致它停止工作,以及我需要做什么来修复它 “不工作”是指当我单击列表视图中的一行时,项目的背景色不会变为@color/blue颜色,但在ICS中会变为蓝色 这是我正在使用的选择器代码(清单_selector.xml): 这是蓝色资源: <resources> <color name="blue">#ff33b5

我有一个可绘制的选择器作为
列表视图中每个项目的背景,以突出显示所选行。在冰淇淋三明治里,一切都很好,但在果冻豆里似乎不起作用。找不到任何文档说明哪些更改可能导致它停止工作,以及我需要做什么来修复它

“不工作”是指当我单击
列表视图中的一行时,项目的背景色不会变为
@color/blue
颜色,但在ICS中会变为蓝色

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

这是蓝色资源:

<resources>
    <color name="blue">#ff33b5e5</color>       
</resources>
更新2:

另外,在
列表视图上尝试添加以下内容:

    <ListView android:id="@android:id/list"
        android:layout_width="wrap_content"  
        android:layout_height="fill_parent" 
        android:listSelector="@drawable/listing_selector"   
    />

更新3:

我想这可能是我的代码中的某个内容,但我从
列表视图的
onListItemClick
中删除了所有代码,而且
选择器仍然不起作用

更新4:

我已经把它缩小到
state\u selected
state\u activated
不工作,而
state\u pressed
似乎正在工作

更新5:

我想我错了。我认为选择器根本没有被识别。我混淆了内置的
ListView
突出显示作为我的选择器。我现在想知道这是否与我的项目设置方式有关。我在库类中有选择器。从ICS到JB,可能发生了一些变化,但是将选择器移动到我的应用程序的项目似乎并没有修复它

更新6:

好的,在进一步拉扯头发之后,我再次将其缩小到
state\u selected
state\u activated
不被识别,因为更改
state\u pressed
的颜色确实有效,这意味着我的选择器被识别。从中的评论来看,这似乎与我的应用程序有关,因为其他人已经能够让选择器使用Jelly Bean

尽管另一件有趣的事情是,无法识别更改默认状态的
drawable
值。如果我有
color/transparent
,我会认为将其更改为一种颜色会导致列表更改为该颜色,但事实并非如此

而且,这在ICS中也不起作用

更新7:

在做了更多的头发拉扯之后,我发现长时间按菜单项会导致菜单项的颜色发生变化。仅仅点击一个项目仍然不起作用。甚至不知道这是什么意思

**最后更新:**


我放弃了,我删除了选择器,只是在单击时刷新
列表视图
,记住单击的位置并从代码中突出显示它。不理想,但不值得尝试修复。

listing\u selector.xml
必须位于
res/drawable
文件夹中,并设置RelativeLayout的
android:background
属性,如下所示:

<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="@drawable/listing_selector"    
>

我说不出它在一个版本中工作而在另一个版本中不工作的原因,但我找到了另一种解决方案

在资源中将颜色定义为可绘制颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="blue">#00F</drawable>
    ...
</resources>

#00F
...
在选择器中使用此颜色可绘制

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/blue" />
    ...
    ...
</selector>

...
...

试试这个,让我知道。

好的,我认为这是您的选择器的问题。请尝试删除“聚焦”状态和“激活”状态。您可以为选择器尝试以下操作:

<!-- 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>

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


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

我认为它工作正常

选择器xml文件代码:-

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:drawable="@color/gray" android:state_focused="true"/>
        <item android:drawable="@color/gray" android:state_pressed="true"/>
        <item android:drawable="@color/orange" android:state_activated="true"/>
        <item android:drawable="@color/orange" android:state_selected="true"/>
        <item android:drawable="@color/orange"/>

    </selector>

现在在res文件夹下创建一个文件夹values-v16,并将此颜色文件放入其中

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="gray">#4f4f4f</color>
    <color name="orange">#e26c0e</color>

</resources>

#4F4F
#e26c0e
然后是listview:

<ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:listSelector="@drawable/listing_selector" >
</ListView>

希望这能奏效!在4.1版上测试,来自:

注意:记住Android应用状态列表中的第一项 与对象的当前状态匹配的。那么,如果 该列表不包含上述任何状态属性,则为 每次都应用,这就是为什么默认值应始终为 最后一个(如下例所示)

因此,尝试根据建议的顺序重新排列选择器的状态。在您的情况下,可能是这样的:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" android:drawable="@color/blue" />
   <item android:state_focused="true" android:drawable="@color/blue" />
   <item android:state_selected="true" android:drawable="@color/blue_selected" />
   <item android:state_activated="true" android:drawable="@color/blue_selected" />  
   <item android:drawable="@android:color/transparent" />
</selector>


listing\u selector.xml
移动到
res/drawable
文件夹,但仍然不起作用。@KrisB K\u Anas强调了这一行:
@drawable/listing\u selector
@SherifelKhatib不确定你的意思。我将
listing_selector.xml
移动到
res/drawable
,并将该行代码从
android:background=“@color/listing_selector”
更改为
android:background=“@drawable/listing_selector”
。我还遗漏了什么吗?@KrisB嗯,我以为你遗漏了那句话(因为你的评论)。你能试着删除这一行并将listSelector添加到你的ListView吗?@SherifelKhatib yep,也试过了,娜达。我将更新我的OP,使其更加清晰。当您尝试更新2时,是否从列表项中删除了android:background。我对列表使用android:listSelector,然后没有为列表项定义android:background;一切都适合我。另外,我不确定它是否相关,但我也有android:cacheColorHint=“@null”。@Chris Yea,尝试过也没有用。我添加了一个新的更新(#5)。我想知道这个问题是不是
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="gray">#4f4f4f</color>
    <color name="orange">#e26c0e</color>

</resources>
<ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:listSelector="@drawable/listing_selector" >
</ListView>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" android:drawable="@color/blue" />
   <item android:state_focused="true" android:drawable="@color/blue" />
   <item android:state_selected="true" android:drawable="@color/blue_selected" />
   <item android:state_activated="true" android:drawable="@color/blue_selected" />  
   <item android:drawable="@android:color/transparent" />
</selector>