我遇到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属性”。
答案 0 :(得分:32)
项目的顺序在选择器xmls中很重要,默认项目应始终位于项目列表的底部。
答案 1 :(得分: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>
我现在也遇到了问题,如果我按下按钮,它将处于选择状态但不处于按下状态。因此,解决方案必须是,为了订购这样的状态和其他状态,添加默认按钮外观是一个好习惯:
首先,设置所选状态,然后交替设置与按下状态相同。 (现在,stackoverflow没有完全显示我的编辑,不知道为什么,请耐心等待。)
答案 2 :(得分: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>
我希望这有用。