2017-04-14 12 views
11

में केंद्र-संरेखित आइटम मैं एंड्रॉइड स्टूडियो पर एक गेम बना रहा हूं और ग्रिड व्यू घटक के साथ कोई समस्या है। मैं After छवि जैसे ग्रिड व्यू के अंदर आइटम को संरेखित नहीं कर सकता। मैं android:stretchMode या android:layout_centerHorizontal जैसे कई तरीकों का प्रयास करता हूं लेकिन इससे मदद नहीं मिलती है।ग्रिडव्यू

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:background="@android:color/holo_orange_light" 
     android:layout_weight="8" 
     android:layout_gravity="center"> 

     <GridView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="10px" 
      android:id="@+id/gridAnswersChar" 
      android:numColumns="8" 
      android:gravity="center"> 
     </GridView> 

</RelativeLayout> 

से पहले::

enter image description here

के बाद:

enter image description here

+0

क्या आपको समाधान पता है? – FiXiT

+0

मुझे अभी भी पता नहीं है :( –

+0

इस के लिए एक जवाब देखना अच्छा लगेगा। एक ही समस्या का सामना करना। – lostintranslation

उत्तर

10

उम्मीद है कि यह आप के लिए एक सख्त आवश्यकता नहीं है कि आप GridView उपयोग करते हैं, के रूप में यहाँ मेरी XML कोड है मेरा मानना ​​है कि आप जो खोज रहे हैं वह अनिवार्य रूप से असंभव है। हालांकि, अगर आप इसके बजाय RecyclerView का उपयोग करने के इच्छुक हैं, तो मेरे पास आपके लिए समाधान है। https://github.com/google/flexbox-layout

मेरे समाधान के लिए पूर्ण कोड यहाँ दिख रहा है: https://gist.github.com/zizibaloob/0c44bfe59b371b5ae0bd2edcb4a7e592

मैं महत्वपूर्ण बिट्स यहाँ कवर करेंगे

यह समाधान FlexboxLayoutManager के उपयोग, गूगल की FlexboxLayout परियोजना का एक हिस्सा कर देगा। सबसे पहले, MainActivity.onCreate() में FlexboxLayoutManager की स्थापना:

FlexboxLayoutManager manager = new FlexboxLayoutManager(this, FlexDirection.ROW); 
manager.setJustifyContent(JustifyContent.CENTER); 

RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler); 
recycler.setLayoutManager(manager); 

जब हम लेआउट प्रबंधक बनाते हैं तो हम FlexDirection.ROW पारित यह बताने के लिए हम यह हमारे आइटम बिछाने के लिए बाहर क्षैतिज रूप से (चाहते हैं यानी एक पंक्ति को भरने और फिर अगले करने के लिए प्रवाह एक कॉलम भरने और फिर अगले कॉलम में बहने के बजाए पंक्ति)।

हमको JustifyContent.CENTER का उपयोग करके प्रबंधक को यह बताने के लिए कहते हैं कि हम आंशिक रूप से भरी पंक्तियों को केंद्रित करना चाहते हैं।

दूसरी महत्वपूर्ण बात यह है कि हम GridView के व्यवहार की नकल करते हैं और इसकी एक निश्चित संख्या कॉलम रखने की क्षमता है। इस कोड को MyAdapter.onCreateViewHolder() में है:

ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) itemView.getLayoutParams(); 
layoutParams.width = (parent.getWidth()/4) - layoutParams.leftMargin - layoutParams.rightMargin; 
itemView.setLayoutParams(layoutParams); 

कुंजी यहाँ (parent.getWidth()/4) है, जो प्रत्येक आइटम दृश्य उपलब्ध चौड़ाई का एक चौथाई देता है। आप स्तंभों की एक अलग संख्या चाहते हैं, बस, एक 8 को 4 बदलने आदि

हम भी leftMargin और rightMargin घटाना चौड़ाई से क्योंकि हमारे आइटम विचारों मार्जिन है, और हम उनके लिए स्थान छोड़ना की जरूरत है। यदि आपके विचारों में मार्जिन नहीं होंगे, तो आप इसे छोड़ सकते हैं।

यह सब एक साथ रखो और आप एक ऐप्लिकेशन है जो इस तरह दिखता है:

enter image description here enter image description here

+0

भयानक। धन्यवाद! – lostintranslation

0

आसान और बेहतर तरीके से केंद्र में चित्रों और सामग्री संरेखित करने के लिए अपने item_layout फ़ाइल में केंद्र के रूप में गुरुत्वाकर्षण का उपयोग है, आपके ग्रिड-व्यू के माता-पिता में नहीं।

+0

निश्चित रूप से यह आइटम के अंदर सामग्री को केंद्रित करेगा, लेकिन ग्रिड व्यू में अंतिम या विषम वस्तुओं को केंद्रित नहीं करेगा। @ बीएनपी उत्तर उस समाधान को दिखाता है जिसे आप अकेले गुरुत्वाकर्षण के साथ प्राप्त नहीं कर सकते हैं। – lostintranslation

+0

माता-पिता से मेल खाने के लिए टेक्स्टव्यू चौड़ाई भी जोड़ें और केंद्र में टेक्स्ट एलाइनमेंट विशेषता दें। – ShockWave