2012-12-28 29 views
8

Q1) Nhìn vào gốc drawable ListView nhà nước cho listSelector chúng tôi có một cái gì đó như thế này (tôi bị tước một số mã để đơn giản hóa ví dụ):Bất kỳ sự khác biệt về hành vi nào từ các bản vẽ trạng thái hơi khác nhau này?

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

Nhưng tôi đã làm nó như thế này trên ứng dụng của tôi:

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

Điều này dường như tạo ra kết quả tương tự và đơn giản hơn nhiều. Bạn có nhận thấy bất kỳ tình huống nào trong đó trường hợp đầu tiên sẽ hoạt động tốt hơn phiên bản của riêng tôi? Tôi chỉ muốn chắc chắn rằng tôi không bỏ lỡ điều gì đó quan trọng vì tôi muốn giữ mã của mình càng ngắn càng tốt ...

Q2) Tôi thấy nhiều trạng thái có thể rút được với <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/> làm mặt hàng đầu nhưng tôi có thể ' t hiểu tại sao nó lại cần thiết. state_window_focused luôn làm tôi bối rối ... Có thực sự cần thiết không?

Trả lời

2

tôi đã phải đặt này vào một câu trả lời, mặc dù tôi không chắc chắn về điều đó, nhưng đó là những gì tôi nghĩ:

Tôi sẽ bắt đầu với Q2:

state_window_focused tương ứng với hành vi mặc định ("cửa sổ" hiển thị, nhưng không tập trung) và tôi nghĩ rằng nó được sử dụng chỉ để chỉ ra mặc định (TRANSPARENT).

Về Q1:

DRAWABLE2 sẽ được hình dung trong cả hai trường hợp và theo các điều kiện tương tự - tập trung và unpressed, bởi vì:

trường hợp đầu tiên:

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

Second trường hợp:

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

Chúng tôi có D2 trong khi tập trung, nhưng trong trường hợp của bạn cũng trong khi không được nhấn.

DRAWABLE1 sẽ chỉ hiển thị khi được nhấn trong từng trường hợp.Sự khác biệt là trong trường hợp đầu tiên, hai trạng thái bổ sung được đưa ra quá android:state_focused="true/false", không có nghĩa gì cả, do đó, hai dòng trong Trường hợp 1 có thể được thu nhỏ thành một (chính xác là bạn có):

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

Vì vậy, tóm lại:

Trường hợp 1 - bạn có:

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

Đó là equivalen tới:

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

Và trường hợp của bạn (trường hợp 2), để so sánh:

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

Sự khác biệt duy nhất tôi có thể nhìn thấy cho đến nay, đó là trong trường hợp đầu tiên, DRAWABLE2 sẽ được hiển thị chỉ khi tập trung (không có vấn đề nếu ép hay không), nhưng trong trường hợp của bạn, nó cũng phải được giải nén và đó là điều kiện duy nhất khác.

Các vấn đề liên quan