android - विभिन्न कोशिकाओं के आकार, pinterest शैली के साथ ग्रिड व्यू




android-gridview cells (2)

आप इसे एकल सूची दृश्य के साथ पूरा करने में सक्षम हो सकते हैं, जहां प्रत्येक सेल में एक अलग ग्रिड टेम्पलेट होता है। मैंने इस तकनीक का उपयोग करके आपके द्वारा वर्णित कुछ समान किया है। यदि सेल का आकार अद्वितीय होना चाहिए, तो यह काम नहीं करेगा, लेकिन यह आपके द्वारा वर्णित मामले के लिए पर्याप्त होना चाहिए:

AABB
AACC
AADD
AADD

ए, बी, सी, डी की विभिन्न व्यवस्थाओं के साथ इस तरह के एक मुट्ठी भर टेम्पलेट्स बनाना, फिर आप उन्हें बेतरतीब ढंग से सूची दृश्य कोशिकाओं के रूप में उपयोग कर सकते हैं और कुछ सरल ऑफसेट गणित आपके एडॉप्टर को निम्नलिखित की तरह कुछ पूरा करने के लिए प्रत्येक सबसेल को आबाद करने की अनुमति देगा:

AABB
AACC
AADD
AADD

BBBB
ACCC
ADDD
ADDD

AAAA
BBCC
BBCC
DDDD

AABB
AACC
AADD
AADD

AABB
AACC
DDDD
DDDD

पृष्ठभूमि

AdapterView एक ऐसा वर्ग है जो AdapterView विस्तार AdapterView , जिसका अर्थ है कि यह ग्रिड-शैली में कुशलता से कोशिकाओं को दिखाता है, उपयोगकर्ता द्वारा स्क्रॉल किए जाने पर पुराने विचारों को नए रूप में दिखाए जाने के लिए पुनर्चक्रण किया जाता है।

समस्या

कभी-कभी, आप एक विशेष यूआई प्राप्त करना चाहेंगे, जो विंडोज फोन टाइल्स यूआई जैसा दिखता है, जिसमें एक-दूसरे के ऊपर विभिन्न आकारों की कोशिकाएं होती हैं।

कुछ इस तरह:

AABB
AACC
AADD
AADD

प्रत्येक अक्षर अपने सेल के एक हिस्से का प्रतिनिधित्व करता है, इसलिए सेल A 2x4 है, सेल B और सेल C प्रत्येक 2x1 को लेते हैं, और सेल D 2x2 है।

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

एक ऐप का एक उदाहरण जिसमें यह शैली है वह pinterest

GridView ऐसी बात की अनुमति नहीं देता है।

वास्तव में, मेरे द्वारा हल किए गए हर समाधान में समस्याएं हैं। यह पूछना चाहते हैं कि क्या कोई अन्य विकल्प या बेहतर समाधान हैं।

मैंने जो पाया है

इस समस्या से निपटने के कई तरीके हैं:

  1. एक वर्ग के रूप में जो AdapterView GridView का विस्तार करता है, प्रत्येक आइटम ( BaseAdapter का उपयोग करके) के लिए एक प्रकार रखने की क्षमता है, जो आपको सेल को लेआउट करने के तरीके को सेट करने की अनुमति देगा।

    हालाँकि, यह अभी भी आपको सीमित करता है क्योंकि आपको वस्तुओं की पंक्तियाँ मिलेंगी, एक के नीचे एक। आपको उन्हें संरेखित करना होगा।

  2. GridLayout एक अपेक्षाकृत नया लेआउट है, और यह काफी लचीला है। Google ने इसके लिए एक अच्छा संगतता पुस्तकालय प्रकाशित किया है, जो एपीआई 7 और उससे ऊपर है।

    हालाँकि, यह किसी भी तरह के विचारों का पुनर्चक्रण नहीं करता है, इसलिए यदि आप बहुत सी वस्तुओं को दिखाना चाहते हैं तो यह एक बुरा विकल्प है।

    यदि आपके पास बहुत से आइटम हैं, तो आपको उनके लिए सभी विचार बनाने होंगे।

  3. QuiltView लाइब्रेरी - GridLayout से फैली हुई है, इसलिए मूल रूप से इसके जैसी ही समस्या है।

  4. StaggeredGridView - सबसे अधिक आशाजनक दिखता है, लेकिन इसमें बहुत सारे कीड़े हैं, खासकर जब अभिविन्यास बदलते हैं। इस तरह के कीड़े में खाली सेल, खराब स्क्रॉलिंग और एनपीई (दुर्लभ लेकिन फिर भी होता है) शामिल हैं। मुझे यकीन नहीं है कि अगर यह imageViews के बजाय अकेले अनुकूलित कोशिकाओं का समर्थन करता है।

  5. अन्य समाधान, here उल्लेख के रूप में।

प्रश्न

किसी को भी इस समस्या का एक और विकल्प का पता है? हो सकता है कि मैंने जो भी समाधान दिखाए हैं उनमें से कुछ के लिए कुछ वर्कअराउंड हो?

संपादित करें: मुझे लगता है कि StaggeredGridView के बारे में, स्क्रॉलिंग और अपवादों को एक सामान्य ImageView का उपयोग करके हल किया जा सकता है जिसे आप getView के अंदर इसके आकार को सेट करते हैं। मुझे लगता है कि इसके अजीब तरीके से काम करने का कारण यह है कि नमूना इंटरनेट से लोड होने के बाद इमेजव्यू के आकार को अपडेट करता है।

हालाँकि, खाली लाइब्रेरी समस्या अभी भी इस लायब्रेरी में बनी हुई है। न केवल कि, लेकिन उनके आकार बहुत बदल जाते हैं, यहां तक ​​कि अभिविन्यास को बदलने के बिना।

संपादित करें: अभी के लिए, मुझे लगता है कि सबसे अच्छा समाधान का उपयोग करना है, PinterestLikeAdapterView पुस्तकालय

यह कोई समस्या नहीं है जो मुझे मिल सकती है।

हालाँकि, यह 1 से अधिक सेल चौड़ाई लेने के लिए आइटम नहीं बना सकता है। यह बहुत अच्छा है।

संपादित करें: दुख की बात यह है कि यह InformDataSetChanged के साथ समस्याएँ हैं। मैंने इसके बारे में here रिपोर्ट किया here


क्या जवाब देने में थोड़ी देर हो गई?

इस पुस्तकालय को etsy से जांचें। यह बहुत ही आशाजनक लग रहा है।

https://github.com/etsy/AndroidStaggeredGrid

मुझे लगता है कि यह https://github.com/maurycyw/StaggeredGridView का नया संस्करण है

अपडेट किया गया।

इसके बजाय Google से RecyclerView StaggeredGridLayoutManager का उपयोग करने का प्रयास करें

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);






android-gridlayout