14

我遇到了麻烦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>

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

编辑:我在发布之前检查了愚蠢的错误:P。答案不是“添加 android:background 属性”。

4

3 回答 3

34

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

于 2011-09-30T15:05:57.107 回答
8

不仅选择的状态顺序很重要,甚至所有状态的顺序也很重要。就我而言,我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>

编辑

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



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

于 2012-09-30T17:19:54.613 回答
0

原因尚不清楚,但我认为这可能有效(注意添加了 state_selected="false"):

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

<item android:state_selected="true">
    <shape android:shape="rectangle">
        <solid android:color="#ff8600" />
    </shape>
</item>

我希望这会有所帮助。

于 2011-09-30T14:37:00.393 回答