2012-12-28 18 views
8

Q1) Guardando originale drawable ListView Stato per listSelector abbiamo qualcosa come questo (ho messo a nudo il codice per semplificare l'esempio):Qualche differenza di comportamento da questi drawable di stato leggermente diversi?

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

Ma ho fatto in questo modo sul mio app:

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

Che sembra produrre lo stesso risultato ed è molto più semplice. Noti qualche situazione in cui il primo funzionerà meglio della mia versione? Voglio solo assicurarmi che non mi manca qualcosa di importante perché mi Pefer per mantenere il mio codice più breve possibile ...

Q2) Vedo molti drawable statali con <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> come la voce in alto ma non posso' t capisco perché è necessario. Il state_window_focused mi ha sempre confuso un po '... È davvero necessario?

risposta

2

ho dovuto mettere questo in una risposta, anche se non sono sicuro a questo proposito, ma è quello che penso:

Comincerò con Q2:

state_window_focused corrisponde al comportamento predefinito ("finestra" visibile, ma sfocata) e penso che sia usato solo per indicare il valore predefinito (TRANSPARENT).

Circa Q1:

DRAWABLE2 saranno visualizzati in entrambi i casi e alle stesse condizioni - concentrati e non pressata, perché:

Primo caso:

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

Seconda case:

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

Abbiamo la D2 concentrata, ma nel tuo caso anche se non compressa.

DRAWABLE1 sarà visibile solo se premuto in ogni caso.La differenza è che nel primo caso i due stati aggiuntivi vengono assegnati anche a android:state_focused="true/false", il che non ha alcun senso, quindi le due righe in Caso 1 possono essere ridotte a una (esattamente quella che hai):

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

Quindi, per riassumere le cose:

caso 1 - hai:

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

che è equivalen a:

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

E il vostro caso (caso 2), per il confronto:

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

L'unica differenza che posso vedere finora, è che nel primo caso, il DRAWABLE2 verrà mostrato solo quando concentrati (non importa se premuto o no), ma nel tuo caso deve essere anche non compresso e questa è l'unica condizione che è diversa.