Android,setSelected()和state_selected

时间:2011-09-30 14:00:28

标签: 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>

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

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

3 个答案:

答案 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>

我希望这有用。