2011-05-09 18 views
11

मेरे पास दो अलग-अलग main.xml फ़ाइलें हैं, एक पोर्ट्रेट के लिए, एक लेआउट के लिए। स्क्रॉलव्यू के अंदर प्रत्येक के पास एक रिलेवेटिवआउट के अंदर यह कोड है।संपादन टेक्स्ट आगे लेआउट पर असंगत

<LinearLayout 
    android:id="@+id/name_phone" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/acquire" 
    > 
    <EditText 
     android:id="@+id/name" 
     android:inputType="textPersonName" 
     android:layout_weight="1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="observer name" 
     android:nextFocusDown="@id/phone" 
     android:background="@android:drawable/editbox_background"    
     /> 
    <EditText 
     android:id="@+id/phone" 
     android:inputType="phone" 
     android:layout_weight="1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="phone number" 
     android:nextFocusDown="@id/phone" 
     android:background="@android:drawable/editbox_background" 
     /> 
    </LinearLayout> 

आदि ...

विषमता यह है: जहाँ तक मुझे पता है, आप, चीजें हैं जो एक्सएमएल में अभी तक नहीं हुई है का उल्लेख करने में सक्षम होना चाहिए नहीं कर रहे हैं तो एंड्रॉयड: nextFocusDown = "@ आईडी/फोन" विफल होना चाहिए क्योंकि फ़ोन घोषित नहीं किया गया है; और यह मेरे परिदृश्य एक्सएमएल में होता है लेकिन पोर्ट्रेट में नहीं होता है। चित्र में यह पूरी तरह से काम करता है और बिना किसी हिचकिचाहट के सभी चार संपादन टेक्स्ट के माध्यम से फोकस पास करता है। अगर मैं नेक्स्टफोकसडाउन को लैंडस्केप में डालता हूं, तो यह संकलित करने में असफल हो जाएगा, "कोई भी संसाधन नहीं मिला जो दिए गए नाम से मेल खाता है ('अगली फोकस डाउन' पर 'आईडी/फोन' मूल्य के साथ)।"

एक समाधान या स्पष्टीकरण महान होगा। विचार यह है कि मेरे पास दो अलग-अलग लिनियर लेआउट्स में चार टेक्स्ट बॉक्स हैं और जो भी पहले फोकस कर चुके हैं, वह इसे नीचे दिए गए एडिटटेक्स्ट में भेज देगा, दूसरों को छोड़ देगा। मैं इसे काम करना चाहता हूं क्योंकि मेरे पास पोर्ट्रेट लेआउट में है, जब उपयोगकर्ता नाम पर अगला हिट करता है, तो फ़ोकस फ़ोन पर जाता है, जब वे उस पर आगे बढ़ते हैं, तो यह ईमेल पर जाता है, आदि। मैं भी उत्सुक हूं कि यह क्यों है इस काम को चित्र में लेटा लेकिन परिदृश्य नहीं।

+1

मैंने इस तरह की खोज का उत्तर दिया http://stackoverflow.com/questions/7994772/edittexts-androidnextfocusdown-attibute-stops-working-when-onclick-is-set/8701529#8701529 अन्य लोगों के लिए यह उपयोगी हो सकता है – PiyushMishra

+1

अच्छा सुझाव लेकिन मैं पहले से ही उस समाधान के बारे में जानता था, मैं प्रोग्रामिंग के रूप में गुई तत्वों को स्थापित करने से बचने की कोशिश करता हूं। यह भी मेरे प्रश्न का उत्तर नहीं देता है, यही कारण है कि यह एक परिस्थिति में काम करता है लेकिन दूसरे में नहीं। आपकी टिप्पणी अभी भी सराहना की है हालांकि यह शायद दूसरों के लिए सहायक होगा। –

उत्तर

7

आप "@ आईडी/फोन" का उपयोग कर रहे का उपयोग कर की कोशिश "@ + आईडी/फोन" + ऑब्जेक्ट

+0

आप गलत हैं। "प्लस-प्रतीक (+) का अर्थ है कि यह एक नया संसाधन नाम है जिसे हमारे संसाधनों (आरजेवा फ़ाइल में) में बनाया और जोड़ा जाना चाहिए।" [developer.android.com से लेआउट घोषित करना] (http://developer.android.com/guide/topics/ui/declaring-layout.html#id) जबकि मैंने 'एंड्रॉइड के साथ गलती की: nextFocusDown = "@ आईडी/फोन" 'यह उस समस्या से असंबंधित था जिसके बारे में मैं पूछ रहा था। –

+0

ध्वनि तार्किक, लेकिन जब मैं + प्रतीक का उपयोग नहीं करता, तो यह लेआउट फ़ाइल में त्रुटियों के कारण नहीं बनाएगा। (कोई संसाधन नहीं मिला जो दिए गए नाम से मेल खाता है) – Roel

+1

मैंने इस टिप्पणी को एक अपवर्त दिया क्योंकि यह सही है। यदि आप अगली फोकसडाउन निर्दिष्ट कर रहे हैं और उस आईडी के साथ तत्व घोषित नहीं किया गया है, तो भी आप @ + id नोटेशन का उपयोग करते हैं। फिर जब आप उस तत्व को घोषित करते हैं जिसे आप उस आईडी को असाइन करना चाहते हैं तो आप @id नोटेशन का उपयोग करते हैं। एक आईडी बनाना और उस तत्व को बनाना जिसमें वह आईडी है, दो बहुत ही अलग चीजें हैं। – Justin

21

यह एक बहुत पुरानी पोस्ट है की आईडी को संदर्भित करने के लिए आवश्यक है लेकिन मैं इसे के रूप में जवाब दे रहा हूँ सबसे अच्छा मैं कर सकता हूँ। जो मुझे पता है उससे आप पहली बार आईडी को संदर्भित करते हुए + हस्ताक्षर करते हैं, इसलिए आपके: android:nextFocusDown="@id/phone" वास्तव में android:nextFocusDown="@+id/phone होना चाहिए क्योंकि यह पहली बार है जब आप उस ऑब्जेक्ट का संदर्भ दे रहे हैं। फिर + हस्ताक्षर करें जहां आपके पास android:id="@+id/phone"

आशा है कि इससे इस पर आने वाले किसी भी व्यक्ति की सहायता करें।

+1

में घोषित करना होगा यह सही उत्तर है और इसे चिह्नित किया जाना चाहिए! –

+0

हैंडल टैब नेविगेशन का उदाहरण https://developer.android.com/training/keyboard-input/navigation.html#Tab यह भी दिखाता है। – Markymark

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