2013-04-22 9 views
7

मैं जानना चाहता था कि क्या ड्रॉबल्स के लिए लेआउट के लिए कोई चयनकर्ता है या नहीं। drawable के साथ चयनकर्ता कीलेआउट के लिए एंड्रॉइड एक्सएमएल चयनकर्ता

उदाहरण:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- When selected --> 
<item android:drawable="@drawable/tab_library_clicked" 
     android:state_selected="true" /> 
<!-- When not selected --> 
<item android:drawable="@drawable/tab_library_not_clicked" /> 

लेकिन यह कुछ इस तरह (नीचे इस कोड मेरे लिए काम नहीं किया है, लेकिन यह आप की एक विचार देना चाहिए संभव है कि मैं क्या पूरा करने के लिए कोशिश कर रहा हूँ):

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- When selected --> 
<item android:layout="@layout/tab_library_clicked" 
     android:state_selected="true" /> 
<!-- When not selected --> 
<item android:layout="@layout/tab_library_not_clicked" /> 

+0

आप इस तरह की चीज़ का उपयोग करने की योजना बना रहे हैं? –

+0

@ श्रीमान मैं इसे TabSpec.setIndicator() के लिए उपयोग करना चाहता था। मैंने लिंक किए गए पहले एक्सएमएल कोड की कोशिश की लेकिन छवियां अच्छे दिखने के लिए निर्दिष्ट टैब भर नहीं रही थीं। लेकिन जब मैंने एक छवि दृश्य के साथ एक लेआउट बनाया और टैब को भरने के लिए चौड़ाई और ऊंचाई के लिए match_parent किया तो यह बहुत बेहतर दिखता था, इसलिए मैं सोच रहा था कि दूसरा एक्सएमएल कोड डालने का कोई तरीका है या नहीं। – JoeyL

उत्तर

3

मैं गलत हो सकता है, लेकिन मुझे पूरा यकीन है कि यह अस्तित्व में नहीं है।

सबसे अधिक "परिष्कृत" आप एक्सएमएल में एक चयनकर्ता के साथ ऐसा करने में सक्षम होंगे, शायद एक राज्य पर कई ड्रॉबल्स को गठबंधन करने के लिए drawable layer list का उपयोग कर रहा है।

वैकल्पिक रूप से आप लेआउट पर setVisibility() प्रोग्रामेटिक रूप से कॉल करने के लिए touch_down और touch_up ईवेंट का उपयोग करने का प्रयास कर सकते हैं, लेकिन मुझे लगता है कि प्रदर्शन बहुत खराब होगा।

+0

ऐसे मामलों में खींचने योग्य सूची बहुत उपयोगी है – Braj

0

documentation में item के लिए ऐसी कोई विशेषता android:layout नहीं है। यह android:drawable के साथ प्रयोग किया जाना चाहिए।

+0

मुझे यह पता है। मैं पूछ रहा हूं कि क्या ऐसा कुछ भी है जो राज्य के आधार पर एक लेआउट का चयन कर सकता है जैसे कि ड्रॉबल्स के लिए। – JoeyL

+0

और यही वह है जो मैंने वास्तव में उत्तर दिया। मैं जवाब दे सकता हूं ** 'क्षमा करें, यह संभव नहीं है!' ** ** लेकिन आपको कुछ स्पष्टीकरण देने का विचार किया जो मुझे लगता है कि आपके मामले में अच्छा नहीं रहा :) – waqaslam

+0

नहीं आपने मेरे प्रश्न का उत्तर नहीं दिया। मैं नहीं पूछ रहा था कि एंड्रॉइड: के लिए लेआउट मौजूद/काम करता है, मुझे यह पता है क्योंकि यह मूल पोस्ट में मैंने जैसा काम नहीं किया था। मैं बस इतना पूछ रहा हूं कि अगर ऐसा कुछ भी है जो तर्क को अनुकरण कर सकता है तो दूसरा एक्सएमएल कोड जिसे मैंने एक्सएमएल के साथ पोस्ट किया है, के साथ पोस्ट किया है। यदि "यह संभव नहीं है" तो मुझे कारण दें जैसे एंड्रॉइड के साथ एक्सएमएल में ऐसी विशेषता नहीं है: लेआउट इस प्रकार आप ऐसी चीज नहीं कर सकते हैं, न केवल :)। – JoeyL

1

ठीक है, आप जो खोज रहे हैं वह माता-पिता के राज्य को अपने बच्चों के विचारों को प्रचारित करने का एक तरीका है। इस तरह जब भी सूचक स्थिति बदलती है (चयनित, नहीं) छविदृश्य स्थिति बदलती है।

एंड्रॉइड के लिए पहले से ही एक XML विशेषता है।

android:duplicateParentState="true" 

लेआउट फ़ाइल में अपने बच्चे के विचारों के साथ इसका उपयोग करें और इसे चयनकर्ता के साथ संयोजित करें। उदाहरण के लिए :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#f00" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:duplicateParentState="true" 
    /> 

<ImageView 
    android:id="@+id/imageView1" 
    android:duplicateParentState="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:src="@drawable/selector" /> 

1

डिफ़ॉल्ट चयनकर्ता तंत्र केवल (जैसे drawable आदि का उपयोग करने के रूप में) की संपत्तियों के लिए विकल्प प्रदान करता है, लेकिन इस विचार की स्थिति के आधार पर। यह खुद को दृश्यों को प्रतिस्थापित नहीं करता है। आप जिस कार्यक्षमता के लिए पूछ रहे हैं वह उपलब्ध नहीं है।

View कक्षा में *_STATE_SET फ़ील्ड के मानों में से एक के लिए चयनित स्थिति है। एक दृश्य की संयुक्त स्थिति getDrawableState() के माध्यम से पुनर्प्राप्त की जाती है।

आप एक व्यू क्लास का विस्तार कर सकते हैं और कुछ राज्य करने के लिए इन राज्यों का उपयोग कर सकते हैं। या, आप एक कस्टम लेआउट नियंत्रक विकसित कर सकते हैं, जो दृश्य पेड़ में राज्य परिवर्तन देखता है और एक XML संसाधन के अनुसार बाल दृश्यों को प्रतिस्थापित करता है।

  1. देखें/लेआउट संरचना इसके साथ एक उपयोगकर्ता के बातचीत के दौरान एक ही रहना चाहिए:

    लेकिन प्रयास क्योंकि इसके लायक नहीं है। जब उपयोगकर्ता इसे चुनता है तो आपको एक बटन को चेक-बॉक्स में नहीं बदला जाना चाहिए, जैसे दृश्य/लेआउट को प्रतिस्थापित करना बस यूएक्स-वार को भ्रमित कर रहा है।

  2. आपको केवल उपयोगकर्ता इंटरैक्शन पर एक दृश्य के रूप में संशोधित करने की आवश्यकता है, जो पहले से ही चयनकर्ता आधारित ड्रॉ-एबल्स और रंगों द्वारा प्रदान किया गया है।

संबंधित मुद्दे