Ric*_*ral 8 android android-selector android-drawable
Q1)查看原始ListView状态drawable 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>
Run Code Online (Sandbox Code Playgroud)
但我一直在我的应用程序上这样做:
<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>
Run Code Online (Sandbox Code Playgroud)
这似乎产生了相同的结果,而且更加简单.你是否注意到第一个比我自己的版本更好的情况?我只是想确保我没有遗漏一些重要因素,因为我希望尽可能缩短我的代码...
Q2)我看到许多州的drawables <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>作为顶级项目,但我不明白为什么需要它.该state_window_focused总是弄得我有点...是不是真的有必要吗?
我必须将其放入答案中,尽管我不确定,但这就是我的想法:
我将从 Q2 开始:
state_window_focused对应于默认行为(“窗口”可见,但未聚焦),我认为它只是用来指出默认行为(TRANSPARENT)。
关于第一季度:
DRAWABLE2将在两种情况下以及相同的条件下可视化 - 聚焦和未按下,因为:
第一种情况:
<item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>
Run Code Online (Sandbox Code Playgroud)
第二种情况:
`<item android:drawable="<DRAWABLE_2>" android:state_focused="true" android:state_pressed="false"/>`
Run Code Online (Sandbox Code Playgroud)
我们有 D2,虽然专注,但在你的情况下,也没有压力。
DRAWABLE1仅在每种情况下按下时才可见。不同之处在于,在第一种情况下,还给出了两个附加状态android:state_focused="true/false",这没有任何意义,因此情况 1 中的两行可以缩小为一个(正是您所拥有的):
<item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/>
Run Code Online (Sandbox Code Playgroud)
所以,总结一下:
案例 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>
Run Code Online (Sandbox Code Playgroud)
这相当于:
<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>
Run Code Online (Sandbox Code Playgroud)
和你的案例(案例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>
Run Code Online (Sandbox Code Playgroud)
到目前为止我能看到的唯一区别是,在第一种情况下,DRAWABLE2仅在聚焦时才会显示(无论是否按下),但在您的情况下它也必须未按下,这是唯一不同的条件。
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |