2012-12-28 27 views
8

क्यू 1)listSelector हम कुछ इस तरह की है के लिए मूल ListView राज्य drawable को देखते हुए (मैं उदाहरण) सरल करने के लिए कुछ कोड छीन:इन थोड़ा अलग राज्य drawables से कोई व्यवहार अंतर?

<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 दोनों ही मामलों में और एक ही परिस्थितियों में देखे जा होगा - ध्यान केंद्रित और unpressed, क्योंकि:

पहला मामला:

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

दूसरा मामला:

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

हमारे पास ध्यान केंद्रित करते समय डी 2 है, लेकिन आपके मामले में भी दबाए गए हैं।

DRAWABLE1 प्रत्येक मामले में दबाए जाने पर ही दिखाई देगा।अंतर यह है कि पहले मामले में, दो अतिरिक्त राज्यों को भी android:state_focused="true/false" दिया जाता है, जो कोई समझ नहीं आता है, इसलिए केस 1 में दो पंक्तियों को एक से घटाया जा सकता है (बिल्कुल आपके पास):

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

बातें तो, योग करने के लिए ऊपर:

केस 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 अगर दबाया केवल जब ध्यान केंद्रित दिखाया जाएगा (कोई बात नहीं है या नहीं), लेकिन आपके मामले में इसे भी दबाया जाना चाहिए और यही एकमात्र शर्त है जो अलग है।