Android,setSelected()和state_selected

sle*_*ica 12 android android-layout android-view

我遇到了麻烦View.setSelected().Views被标记为已选中 - TextViews例如,更改其字体颜色 - 但我的背景选择器似乎没有注册更改.

示例选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/transparent" />

    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <solid android:color="#ff8600" />
        </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

我甚至不确定哪种上下文信息会有用.视图是LinearLayout的子视图,我以编程方式在触摸事件中设置所选状态.正如我所说,它确实有效,因为字体颜色从白色变为灰色,但背景保持不变.

编辑:我在发布之前检查过愚蠢的错误:P.答案不是"添加android:background属性".

Ron*_*nie 32

项目的顺序在选择器xmls中很重要,默认项目应始终位于项目列表的底部.


Opi*_*chs 7

不仅所选的州秩序很重要,即使所有州的顺序都很重要.在我的情况下,我state_pressed首先添加,我没有state_selected工作.所以我改变了这样的顺序,然后它起作用了:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
  <item 
    android:state_selected="false"
    android:drawable="@drawable/chooser_normal"></item>
<item 
    android:state_selected="true"
    android:drawable="@drawable/chooser_pressed"></item>
<item 
    android:state_pressed="true"
    android:drawable="@drawable/chooser_pressed"></item>
<item 
    android:state_pressed="false"
    android:drawable="@drawable/chooser_normal"></item>
 </selector>
Run Code Online (Sandbox Code Playgroud)

编辑

我现在也遇到了问题,如果我按下按钮,它将处于选择状态但不处于按下状态.因此,解决方案必须是,为了订购这样的状态和其他状态,最好添加默认按钮外观:



首先,设置所选状态,然后交替设置与按下状态相同.(目前,stackoverflow没有完全显示我的编辑,不知道为什么,请耐心等待).