8

Q1)查看ListView可绘制的原始状态,因为listSelector我们有这样的东西(我剥离了一些代码以简化示例):

<selector>
    <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="true" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="false" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>
</selector>

但我一直在我的应用程序上这样做:

<selector>
    <item android:drawable="<DRAWABLE_2>" android:state_pressed="false" android:state_focused="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/>
    <item android:drawable="<TRANSPARENT>" />
</selector>

这似乎产生了相同的结果,而且更简单。您是否注意到第一个比我自己的版本更好的情况?我只是想确保我没有遗漏一些重要的东西,因为我喜欢让我的代码尽可能短......

Q2)我看到许多状态drawables<item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>作为最重要的项目,但我不明白为什么需要它。总是让state_window_focused我有点困惑……真的有必要吗?

4

1 回答 1

2

尽管我不确定,但我不得不将其放入答案中,但这就是我的想法:

我将从 Q2 开始:

state_window_focused对应于默认行为(“窗口”可见,但未聚焦),我认为它仅用于指出默认行为(TRANSPARENT)。

关于第一季度:

DRAWABLE2在这两种情况下和相同的条件下都将被可视化 - 专注和不受压力,因为:

第一种情况:

<item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>

第二种情况:

`<item android:drawable="<DRAWABLE_2>" android:state_focused="true" android:state_pressed="false"/>`

我们有 D2,虽然专注,但在你的情况下,也有没有压力。

DRAWABLE1只有在每种情况下按下时才可见。不同之处在于,在第一种情况下,也给出了两个额外的状态android:state_focused="true/false",这没有任何意义,因此案例 1 中的两行可以缩小为一个(正是你拥有的那个):

<item android:drawable="<DRAWABLE_1>"  android:state_pressed="true"/>

所以,总结一下:

案例 1 - 你有:

<selector>
    <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="true" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="false" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>
</selector>

这相当于:

<selector>
    <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>
    <item android:drawable="<DRAWABLE_1>"  android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_2>"  android:state_focused="true"/>
</selector>

和你的案例(案例2),进行比较:

<selector>
    <item android:drawable="<DRAWABLE_2>" android:state_pressed="false" android:state_focused="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/>
    <item android:drawable="<TRANSPARENT>" />
</selector>

到目前为止我能看到的唯一区别是,在第一种情况下,DRAWABLE2只有在聚焦时才会显示(无论是否按下),但在你的情况下,它也必须是未按下的,这是唯一不同的条件.

于 2013-07-30T07:52:08.730 回答