2012-12-27 15 views
10

टी एल के साथ एक Android बहु फलक अनुप्रयोग लिखने के लिए; डॉ: कैसे करना चाहिए Spotify iPad ऐप्लिकेशन देखो और Android पर काम करने के लिए इसी तरह की गहरी नेविगेशन के साथ बहु-फलक क्षुधा, और कैसे इस लागू करने के लिए?कैसे बहुत गहरी नेविगेशन

लांग संस्करण: मैं एक ऐप्स है, जहां उपयोगकर्ता आइटम सूचियां देखता है और फिर इन मदों में गहरा गड्ढा कर सकते हैं पर काम कर रहा हूँ। ये आइटम विवरण पृष्ठ फिर से संबंधित वस्तुओं की सूचियां खोल सकते हैं, इसके बदले में विस्तार पृष्ठ हैं और इसी तरह। एक फोन एप्लिकेशन के रूप में, इन अलग क्रियाएँ कि ऐसा दिखाई दे सकता है और एक दूसरे के लिए लिंक होगा: User clicks on Item#2 in Overview and gets the detail page, then clicks on "List of things" there Here, List of Things is open, and the user opts to see "Thing #3"

नकली-अप में, उपयोगकर्ता एक प्रारंभिक अवलोकन देखता है और उसके बाद का चयन करता है "आइटम # 2" से पहली सूची एक नई गतिविधि खुलती है, जिसमें आइटम # 2 के लिए विवरण दिखाया जाता है। यहां, वह आइटम # 2 से संबंधित चीजों की एक सूची देखने के लिए चुनता है। तीसरी तस्वीर में नई खुली गतिविधि इस सूची को दिखाती है, और एक पर क्लिक करने से इस चीज़ का विवरण खुलता है। वह सामग्री में गहराई से नेविगेट कर सकता है जैसा वह पसंद करता है।

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

टैबलेट लेआउट में, प्रत्येक आइटम या सूची नाम पर प्रत्येक क्लिक संबंधित बच्चे आइटम को एक नए फलक के रूप में खोलता है जो दाईं ओर से एनिमेट करता है। ऊपर के उदाहरण में के रूप में ही कार्यप्रवाह इस प्रकार दिखाई देगा:

Initial multi-pane tablet layout The user selects Item #2, and the item detail page opens on the right pane On the detail page, the user selects "List of things", and the right pane moves to the left, and the list of things opens in the right pane A click on Thing #3 opens the thing details in the right pane

मैं अनिश्चित कैसे सबसे अच्छा यह नेविगेशन पैटर्न लागू करने के लिए कर रहा हूँ। जीमेल जैसे सीमित नेविगेशन गहराई वाले मल्टी-फलक ऐप्स को एक स्थिर व्यू ग्रुप (लीनियरलाउट ठीक होगा) के साथ बनाया जा सकता है जिसमें सभी टुकड़े होते हैं, और नेविगेशन में गहराई से जाकर अगले कंटेनर की सामग्री को दाईं ओर बदल देता है और इसे एनिमेट करता है (देखें CommonWares implementation of this on SO)।

इससे पता चलता है कि एक कस्टम व्यू ग्रुप जाने का रास्ता होगा। यदि इसे उपपृष्ठ (यानी "चीजों की सूची") प्रदर्शित करना है, तो यह व्यू ग्रुप में एक नया बच्चा बनाता है जो कि टुकड़े के साथ स्क्रीन के आधा चौड़ा है और फिर दृश्य क्षेत्र को स्क्रॉल करता है ताकि वह फलक जो अभी से बातचीत की गई हो और नया बच्चा दिखाई दे रहा है। एक FragmentTransaction को सही ढंग से इस लिंक करने के लिए, ताकि वापस ढेर ठीक से काम करता, मुझे लगता है यह कुछ इस तरह होगा चाहते हैं:

View newPane = container.addChild(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(newPane, new ListOfThingsFragment(2)); 
ft.remove(paneOnRight, fragmentOnRight); 
ft.commit(); 
container.animateToRight(); 

मैं FragmentTransaction के भीतर एनीमेशन करने के लिए एक रास्ता नहीं दिख रहा।

प्रतिक्रिया आपका स्वागत है। मेरा नियोक्ता आम तौर पर हमारे द्वारा विकसित खुले सोर्सिंग ढांचे के संबंध में अनुकूल है, इसलिए यदि यह ऐसा कुछ है जो व्यापक रूचि का है और यदि मैं पुन: प्रयोज्य समाधान के साथ आ सकता हूं, तो मुझे इसे साझा करने में खुशी होगी।

+2

बहुत ही रोचक सवाल है, मैं यहां संभव उत्तरों की तलाश करूँगा। एक त्वरित अवलोकन: यदि आप फोन और टैबलेट दोनों पर केवल एक ही गतिविधि में सबकुछ रखते हैं तो यह आपको एक्टए पर कुछ परेशानी बचाएगा, इसे लागू करना होगा, फिर बी को कार्यान्वित करें। यह सिर्फ एक है, जो सब कुछ लागू करता है और सभी खंड लेनदेन करता है। – Budius

उत्तर

4

हम अपने ऐप के साथ एक ही समस्या में भाग गए।शीशे

  • की

    • गतिशील संख्या प्रत्येक फलक को अलग ढंग से किया जा सकता है आकार शीशे के अंदर
    • टुकड़े सही ढंग से उन्मुखीकरण परिवर्तन पर बनाए रखा जाना चाहिए: बाधाओं हम अपने आप को दे दी है।

    उन बाधाओं के प्रकाश में, हमने एक नया लेआउट बनाया जिसे हम PanesLayout कहते हैं। आप यहाँ यह बाहर की जाँच कर सकते हैं:

    https://github.com/cricklet/Android-PanesLibrary

    यह मूल रूप से अनुमति देता है आप आसानी से गतिशील रूप से आकार शीशे के किसी भी संख्या उन शीशे के टुकड़े जोड़ने के लिए और संलग्न करने के लिए। उम्मीद है यह आपको उपयोगी होगा! :)

  • +0

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

    6

    मैं कुछ था: इस उत्तर रीटो मायर खुद से टुकड़ा एनीमेशन के बारे में देख आप FragmentTransaction के साथ एनिमेशन कर सकते हैं शोध समय और इस प्रश्न के समाधान के साथ आया (एक प्रश्न है कि मैं लंबे समय तक समाधान देखना चाहता हूं, इससे पहले कि आप उससे पूछें)। मैं वास्तव में पूरा कोड नहीं दिखा सकता क्योंकि कुछ आईपी सीमाएं हैं, लेकिन मैं इसे इस एनीमेशन के काम करने के लिए मुख्य भाग यहां रखूंगा। setCustomAnimations और LayoutTransition हाँ, जहाँ तक मैं यह करने के लिए कर लिया है, तो आप सेट एनिमेशन यह काम करने के लिए अलग करने के लिए की जरूरत है:

    वहाँ दो महत्वपूर्ण उपकरणों रहे हैं।

    तो चलो कुछ कोड प्राप्त करें, आप अपने एक्सएमएल को क्षैतिज रैखिक के साथ परिभाषित करेंगे और इस पर निम्न पंक्ति शामिल करना सुनिश्चित करें।

    android:animateLayoutChanges="true" 
    

    इस वसीयत को स्वत: जनरेट एक मानक LayoutTransition जो टुकड़ा/राय यह है कि लेआउट और अल्फा में (में या बाहर) रह रहा टुकड़ा/दृश्य है कि शामिल किए जाने या लेआउट से हटा का अनुवाद करता है। कोशिश करो।

    तो बाद इस लेआउट फुलाया जाता है हम पर कब्जा इस LayoutTransition वाला और हमारी आवश्यकताओं के लिए इसे बाहर चाल:

    LayoutTransition lt = myLinearLayout.getLayoutTransition(); 
    lt.setAnimator(LayoutTransition.APPEARING, null); 
    lt.setAnimator(LayoutTransition.DISAPPEARING, null); 
    lt.setStartDelay(LayoutTransition.CHANGE_APPEARING, 0); 
    lt.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0); 
    

    कि कोड के साथ, हम अल्फा एनिमेशन निकाल रहे हैं और संक्रमण से किसी देरी को दूर करने (क्योंकि हम सभी अनुवाद एक साथ आग लगाना चाहते हैं)।

    और अब यह यह काम करने के लिए बस कुछ साधारण टुकड़ा लेनदेन है, initialisation के दौरान हम चाहते हैं कि लेआउट बढ़ और उस पर कुछ टुकड़े डाल: लेन-देन पर अब

    setContentView(R.layout.main); // the layout with that Linear Layout 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.main, frag1, FRAG_1_TAG); // it's good to have tags so you can find them later 
    ft.add(R.id.main, frag2, FRAG_2_TAG); 
    ft.add(R.id.main, frag3, FRAG_3_TAG); 
    ft.hide(frag3); 
    ft.commit(); 
    

    यह एक सरल है:

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out, R.anim.push_right_in, R.anim.push_right_out); 
    Fragment left = getFragmentManager().findFragmentByTag(FRAG_1_TAG); 
    Fragment right = getFragmentManager().findFragmentByTag(FRAG_3_TAG); 
    
    ft.hide(left); 
    ft.show(right); 
    
    ft.addToBackStack(null); 
    ft.commit(); 
    

    अंतिम नोट:

    गहरी नेविगेशन बनाने के लिए यह FragmentTransactions फायरिंग LinearLayout और 012 के टुकड़े जोड़ने के लिए का मामला हैया detach बाईं ओर खंड।

    इसके अलावा टुकड़े रेखीय लेआउट पर काम करने के लिए क्रम के दौरान उनके LinearLayout.LayoutParams.weight, निम्नलिखित कोड टुकड़ा दृश्य पर लागू करने के लिए कुछ इसी तरह स्थापित करने के लिए महत्वपूर्ण है

    ((LinearLayout.LayoutParams) view.getLayoutParams()).weight = 1; 
    

    उस पर काम करने के लिए फोन के साथ-साथ यह आम multiple screen support पैटर्न लागू करने का मामला है।

    अंतिम नोट, डिवाइस रोटेशन के दौरान लेआउट स्थिति को उचित प्रबंधन पर सावधान रहें क्योंकि यह सिस्टम द्वारा स्वचालित रूप से संभाला नहीं जाता है।

    हैप्पी कोडिंग!

    +0

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

    +0

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

    +0

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

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