这些略有不同的状态图形之间是否存在任何行为差异?

8

Q1) 查看 listSelector 的原始 ListView 状态可绘制对象,我们可以得到如下内容(为了简化示例,我删除了一些代码):

<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) 我看到许多状态可绘制对象都带有 <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> 作为顶部项目,但我不明白为什么需要它。 state_window_focused 总是让我有点困惑... 它真的必要吗?

1个回答

2
我必须将这些内容翻译成答案,尽管我不确定,但这就是我的想法:
首先回答Q2:
state_window_focused 对应默认行为(“window”可见但未聚焦),我认为它仅用于指出默认值 (TRANSPARENT)。
关于Q1:
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",这没有任何意义,因此Case 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(无论是否按下),但在您的情况下,它也必须未按下,这是唯一不同的条件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接