2012-12-28 3 views
8

Q1) im ursprünglichen Zustand ListView ziehbar der Suche nach listSelector wir so etwas wie dieses (ich einige Code gestrippt, um das Beispiel zu vereinfachen):Irgendwelche Verhaltensunterschiede von diesen etwas anderen Zustand Zeichens?

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

Aber ich habe wie das schon auf meine app tun es:

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

Das scheint das gleiche Ergebnis zu produzieren, und es ist viel einfacher. Fällt dir irgendeine Situation auf, in der die erste besser funktioniert als meine eigene Version? Ich möchte nur sicherstellen, dass ich nicht etwas Wichtiges Ursache fehlt ich pefer meinen Code zu halten, so kurz wie möglich ...

Q2) ich viele staatliche Drawables mit <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> als Top-Artikel zu sehen, aber ich kann‘ Ich verstehe, warum es gebraucht wird. Die state_window_focused verwirrte mich immer ein bisschen ... Ist es wirklich notwendig?

Antwort

2

Ich hatte dies in einer Antwort zu setzen, auch wenn ich es nicht sicher bin, aber das ist, was ich denke:

ich mit Q2 beginnen werde:

state_window_focused entspricht dem Standardverhalten ("Fenster" sichtbar, aber unfokussiert) und ich denke, es wird nur verwendet, um den Standard (TRANSPARENT) hervorzuheben.

über Q1:

DRAWABLE2 wird in beiden Fällen und unter den gleichen Bedingungen sichtbar gemacht werden - konzentriert und unpressed, denn:

Erster Fall:

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

Zweite Fall:

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

Wir haben die D2 zwar fokussiert, aber in Ihrem Fall auch nicht gedrängt.

DRAWABLE1 wird nur sichtbar sein, während in jedem Fall gedrückt wird.Der Unterschied besteht darin, dass im ersten Fall die beiden zusätzlichen Zustände ebenfalls android:state_focused="true/false" sind, was keinen Sinn ergibt. Daher können die beiden Zeilen in Fall 1 auf eins geschrumpft werden (genau das, was Sie haben):

Also, Fassend kann ich sagen:

Fall 1 - Sie haben:

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

die zu equivalen ist:

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

Und Ihr Fall (Fall 2), zum Vergleich:

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

Der einzige Unterschied, den ich so weit sehen kann, dass, wenn gedrückt im ersten Fall kann die DRAWABLE2 nur gezeigt werden, wenn fokussiert (egal oder nicht), aber in Ihrem Fall muss es auch nicht gepresst sein und das ist die einzige Bedingung, die anders ist.

Verwandte Themen