2012-12-28 10 views
8

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> 

Но я делал это, как это на моем приложении:

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

Который, кажется, производит тот же результат, и это намного проще. Вы заметили какую-либо ситуацию, когда первая будет работать лучше, чем моя собственная версия? Я просто хочу, чтобы убедиться, что я не хватает чего-то важного, потому что я pefer держать мой код как можно короче ...

Q2) Я вижу много государственных <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> с вводимого коэффициента в качестве верхнего элемента, но я могу» Понимаете, зачем это нужно. state_window_focused всегда меня немного смутил ... Это действительно необходимо?

ответ

2

я должен был поставить это в ответ, даже если я не уверен в этом, но вот что я думаю:

Начну с Q2:

state_window_focused соответствует поведение по умолчанию («окно» видимо, но не сфокусировано), и я думаю, что он используется, чтобы указать значение по умолчанию (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", что не имеет никакого смысла, поэтому две линии в случае 1 могут быть сжаты до одного (именно того, который у вас есть):

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

Итак, подведем вещи вверх:

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

Который equivalen к:

<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 будет показано только при фокусировке (независимо от того, при нажатии или нет), но в вашем случае он также должен быть не нажатым, и это единственное условие, которое отличается.