दिलचस्प पोस्ट
सी # में फिर से प्रवेशक ताले तुलना ऑपरेटरों को 'ट्यूपल' और 'टाई' के माध्यम से लागू करना, एक अच्छा विचार है? .DLL पहले से ही एक और क्लासलोडर में लोड हो चुका है? JavaFX में हार्डवेयर ग्राफिक्स एक्सेलेरेशन (प्रिज्म) को अक्षम या बाईपास कैसे करें डीबी से कैस्केड और अनाथ को हटाने में क्या अंतर है? एकाधिक स्ट्रिंग तत्वों को सी # में बदलें जावा के भीतर से गिट में वर्तमान शाखा में नवीनतम टैग नाम कैसे प्राप्त करें? मैं UITableViewCell के छवि को एक निश्चित आकार कैसे बना सकता हूँ, जब भी छवि छोटा हो परियोजना का कार्य> ग्रहण में स्वच्छ एंड्रॉइड फेसबुक एकीकरण अमान्य कुंजी हैश किसी अन्य में चयन के आधार पर एक ड्रॉपडाउन तैयार करें Xcode – एलएलडीबी लक्ष्य बनाने में त्रुटि विंडोज़ ओएस पर एएमडी के लिए इंटेल के HAXM समकक्ष स्प्रिंग-एमवीसी 406 JSON रिस्पांस के बजाय स्वीकार्य नहीं है

ग्रिडलेआउट फिट आकार स्क्रीन आकार कैसे करें

GridLayout एपीआई दस्तावेज़ सीखना बहुत मुश्किल है ……
क्या कोई ऐसा कोई है जो मुझे सिखा सकता है कि बच्चे को कैसे सेट करना है, यह View लिए कि LinearLayout का "वजन" जैसा कुछ है?

अभी ऐसा लगता है कि सभी को बाएं हाथ की तरफ रखा गया है,
मैंने कई बार कोशिश की है और फिर भी स्क्रीन की आधा चौड़ाई प्रत्येक की तरह नहीं बना सकती।

संपादित किया गया: मुझे नहीं पता कि जब wrap_content सब wrap_content …… तब भी मैं क्या कर सकता हूं … भले ही मैं किसी विशिष्ट आकार में कुछ छवि सेट करना चाहता हूं, यह क्लास मुझे wrap_content बनाने में मदद करता है …… … यह सामान्य काम नहीं कर सकता, क्या मुझे कुछ सेटिंग याद आ रही थी?!?

Solutions Collecting From Web of "ग्रिडलेआउट फिट आकार स्क्रीन आकार कैसे करें"

नोट : एंड्रॉइड 'लॉलीपॉप' 5 की शुरूआत के साथ क्षैतिज रेखा के नीचे की जानकारी अब सटीक नहीं है, क्योंकि GridLayout एपीआई स्तर 21 के बाद से वजन के सिद्धांत को समायोजित करता है

जवाडोक से उद्धरित:

अतिरिक्त अंतरिक्ष वितरण

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

एक ही पंक्ति या स्तंभ समूह के कई घटक समांतर में कार्य करने के लिए माना जाता है। ऐसे समूह में लचीला है, अगर इसके भीतर के सभी घटक लचीले होते हैं पंक्ति और स्तंभ समूहों को एक आम सीमा के दोनों तरफ बैठने के बजाय श्रृंखला में कार्य करने के लिए माना जाता है। इन दोनों तत्वों से बना समग्र समूह लचीला है यदि इसके तत्वों में से एक लचीला है

कॉलम खंड बनाने के लिए, सुनिश्चित करें कि इसमें सभी घटकों के वजन या गुरुत्वाकर्षण को परिभाषित करें। किसी स्तंभ को खींचने से रोकने के लिए, यह सुनिश्चित करें कि स्तंभ में मौजूद घटकों में से एक वजन या गुरुत्वाकर्षण को परिभाषित नहीं करता है।

जब लचीलेपन का सिद्धांत पूरी तरह से निःसंकोचिकता प्रदान नहीं करता है, तो ग्रिडलायआउट के एल्गोरिदम उन पंक्तियों और स्तंभों के प्रति अनुष्ठान करते हैं जो उसके दाएं और नीचे किनारों के करीब हैं। अधिक सटीक होने के लिए, ग्रिड-लेआउट प्रत्येक लेआउट पैरामीटर को एक चर के रूप में मानता है, जो किसी अक्ष के साथ ग्रिड लाइन को परिभाषित करता है। लेआउट के दौरान, ग्रिडलायआउट बाधाओं को हल करता है ताकि उन बाधाओं के लिए अद्वितीय समाधान वापस कर सकें, जिसके लिए सभी चर किसी भी अन्य वैध समाधान में संबंधित मूल्य के बराबर या बराबर हैं।

यह भी ध्यान देने योग्य है कि android.support.v7.widget.GridLayoutandroid.support.v7.widget.GridLayout में एक ही जानकारी है। दुर्भाग्य से यह उल्लेख नहीं करता कि समर्थन लाइब्रेरी का कौन सा संस्करण पेश किया गया था, लेकिन कार्यक्षमता को जोड़ा जाने वाला प्रतिबद्धता वापस जुलाई 2014 तक ट्रैक किया जा सकता है। नवंबर 2014 में, वजन की गणना में सुधार और एक बग ठीक हो गया था ।

सुरक्षित रहने के लिए, ग्रिड-आउट-v7 पुस्तकालय का नवीनतम संस्करण आयात करना सुनिश्चित करें।


'वजन' का सिद्धांत, जैसा कि आप इसका वर्णन कर रहे हैं, GridLayout साथ मौजूद नहीं है। यह सीमा दस्तावेज में स्पष्ट रूप से उल्लिखित है; नीचे अंश कहा जा रहा है, अतिरिक्त अंतरिक्ष वितरण के लिए 'गुरुत्वाकर्षण' का उपयोग करने के लिए कुछ संभावनाएं हैं मेरा सुझाव है कि आपने लिंक किए गए दस्तावेजों के माध्यम से पढ़ा है।

सीमाएं

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

एक उदाहरण और कुछ व्यावहारिक संकेतों के लिए, GridLayout विजेट को शुरू करने वाले पिछले साल के ब्लॉग पोस्ट पर एक नज़र डालें


संपादित करें: मुझे नहीं लगता कि Google Play ऐप की तरह टाइल्स स्केलिंग के लिए एक्सएमएल-आधारित दृष्टिकोण है, उन वर्गों की लंबाई दो बार 'चौराइयां' या 'आयताकार'। हालांकि, यह निश्चित रूप से संभव है यदि आप अपने लेआउट को प्रोग्राम बनाते हैं सभी को वास्तव में पता करने की जरूरत है कि ये उपकरण के स्क्रीन आयामों को पूरा करते हैं।

Google Play ऐप में टाइल वाले लेआउट के एक (बहुत!) त्वरित 'गंदे अनुमान के नीचे

 Point size = new Point(); getWindowManager().getDefaultDisplay().getSize(size); int screenWidth = size.x; int screenHeight = size.y; int halfScreenWidth = (int)(screenWidth *0.5); int quarterScreenWidth = (int)(halfScreenWidth * 0.5); Spec row1 = GridLayout.spec(0, 2); Spec row2 = GridLayout.spec(2); Spec row3 = GridLayout.spec(3); Spec row4 = GridLayout.spec(4, 2); Spec col0 = GridLayout.spec(0); Spec col1 = GridLayout.spec(1); Spec colspan2 = GridLayout.spec(0, 2); GridLayout gridLayout = new GridLayout(this); gridLayout.setColumnCount(2); gridLayout.setRowCount(15); TextView twoByTwo1 = new TextView(this); GridLayout.LayoutParams first = new GridLayout.LayoutParams(row1, colspan2); first.width = screenWidth; first.height = quarterScreenWidth * 2; twoByTwo1.setLayoutParams(first); twoByTwo1.setGravity(Gravity.CENTER); twoByTwo1.setBackgroundColor(Color.RED); twoByTwo1.setText("TOP"); twoByTwo1.setTextAppearance(this, android.R.style.TextAppearance_Large); gridLayout.addView(twoByTwo1, first); TextView twoByOne1 = new TextView(this); GridLayout.LayoutParams second = new GridLayout.LayoutParams(row2, col0); second.width = halfScreenWidth; second.height = quarterScreenWidth; twoByOne1.setLayoutParams(second); twoByOne1.setBackgroundColor(Color.BLUE); twoByOne1.setText("Staff Choices"); twoByOne1.setTextAppearance(this, android.R.style.TextAppearance_Large); gridLayout.addView(twoByOne1, second); TextView twoByOne2 = new TextView(this); GridLayout.LayoutParams third = new GridLayout.LayoutParams(row2, col1); third.width = halfScreenWidth; third.height = quarterScreenWidth; twoByOne2.setLayoutParams(third); twoByOne2.setBackgroundColor(Color.GREEN); twoByOne2.setText("Games"); twoByOne2.setTextAppearance(this, android.R.style.TextAppearance_Large); gridLayout.addView(twoByOne2, third); TextView twoByOne3 = new TextView(this); GridLayout.LayoutParams fourth = new GridLayout.LayoutParams(row3, col0); fourth.width = halfScreenWidth; fourth.height = quarterScreenWidth; twoByOne3.setLayoutParams(fourth); twoByOne3.setBackgroundColor(Color.YELLOW); twoByOne3.setText("Editor's Choices"); twoByOne3.setTextAppearance(this, android.R.style.TextAppearance_Large_Inverse); gridLayout.addView(twoByOne3, fourth); TextView twoByOne4 = new TextView(this); GridLayout.LayoutParams fifth = new GridLayout.LayoutParams(row3, col1); fifth.width = halfScreenWidth; fifth.height = quarterScreenWidth; twoByOne4.setLayoutParams(fifth); twoByOne4.setBackgroundColor(Color.MAGENTA); twoByOne4.setText("Something Else"); twoByOne4.setTextAppearance(this, android.R.style.TextAppearance_Large); gridLayout.addView(twoByOne4, fifth); TextView twoByTwo2 = new TextView(this); GridLayout.LayoutParams sixth = new GridLayout.LayoutParams(row4, colspan2); sixth.width = screenWidth; sixth.height = quarterScreenWidth * 2; twoByTwo2.setLayoutParams(sixth); twoByTwo2.setGravity(Gravity.CENTER); twoByTwo2.setBackgroundColor(Color.WHITE); twoByTwo2.setText("BOTOM"); twoByTwo2.setTextAppearance(this, android.R.style.TextAppearance_Large_Inverse); gridLayout.addView(twoByTwo2, sixth); 

परिणाम कुछ इस तरह दिखेंगे (मेरी गैलेक्सी नेक्सस पर):

ग्रिड लेआउट का उपयोग करके टाइल वाला लेआउट

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

नेक्सस 7नेक्सस 5नेक्सस 10

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffcc5d00" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="0dp" android:layout_weight="1" android:padding="10dip" android:layout_height="fill_parent"> <ImageView android:id="@+id/image1" android:layout_height="fill_parent" android:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/stackoverflow" android:layout_width="fill_parent" android:layout_gravity="center" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="0dp" android:layout_weight="1" android:padding="10dip" android:layout_height="fill_parent"> <ImageView android:id="@+id/image2" android:layout_height="fill_parent" android:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/stackoverflow" android:layout_width="fill_parent" android:layout_gravity="center" /> </LinearLayout> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="0dp" android:layout_weight="1" android:padding="10dip" android:layout_height="fill_parent"> <ImageView android:id="@+id/image3" android:layout_height="fill_parent" android:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/stackoverflow" android:layout_width="fill_parent" android:layout_gravity="center" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="0dp" android:layout_weight="1" android:padding="10dip" android:layout_height="fill_parent"> <ImageView android:id="@+id/image4" android:layout_height="fill_parent" android:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/stackoverflow" android:layout_width="fill_parent" android:layout_gravity="center" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> </FrameLayout> 

एपीआई 21 में शुरू करने से ग्रैडलेआउट में वज़न का अनुमान जोड़ा गया था।

पुराने एंड्रॉइड डिवाइसों का समर्थन करने के लिए, आप v7 समर्थन लाइब्रेरी से ग्रिडलेआउट का उपयोग कर सकते हैं

 compile 'com.android.support:gridlayout-v7:22.2.1' 

निम्नलिखित एक्सएमएल एक उदाहरण देता है कि आप स्क्रीन की चौड़ाई को भरने के लिए कैसे वजन का उपयोग कर सकते हैं।

 android:id="@+id/choice_grid" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:padding="4dp" grid:alignmentMode="alignBounds" grid:columnCount="2" grid:rowOrderPreserved="false" grid:useDefaultMargins="true"> <TextView android:layout_width="0dp" android:layout_height="100dp" grid:layout_columnWeight="1" grid:layout_gravity="fill_horizontal" android:gravity="center" android:background="#FF33B5E5" android:text="Tile1" /> <TextView android:layout_width="0dp" android:layout_height="100dp" grid:layout_columnWeight="1" grid:layout_gravity="fill_horizontal" android:gravity="center" android:background="#FF33B5E5" android:text="Tile2" /> <TextView android:layout_width="0dp" android:layout_height="100dp" grid:layout_columnWeight="1" grid:layout_gravity="fill_horizontal" android:gravity="center" android:background="#FF33B5E5" android:text="Tile3" /> <TextView android:layout_width="0dp" android:layout_height="100dp" grid:layout_columnWeight="1" grid:layout_gravity="fill_horizontal" android:gravity="center" android:background="#FF33B5E5" android:text="Tile4" /> 

यदि आप टुकड़ों का उपयोग करते हैं तो आप एक्सएमएल लेआउट तैयार कर सकते हैं और स्ट्रैच महत्वपूर्ण तत्वों की तुलना में प्रोग्रामेटिक रूप से कर सकते हैं

 int thirdScreenWidth = (int)(screenWidth *0.33); View view = inflater.inflate(R.layout.fragment_second, null); View _container = view.findViewById(R.id.rim1container); _container.getLayoutParams().width = thirdScreenWidth * 2; _container = view.findViewById(R.id.rim2container); _container.getLayoutParams().width = screenWidth - thirdScreenWidth * 2; _container = view.findViewById(R.id.rim3container); _container.getLayoutParams().width = screenWidth - thirdScreenWidth * 2; 

3 समान कॉलम के लिए यह लेआउट पहला तत्व चित्र में 2×2 परिणाम लेता है यहां छवि विवरण दर्ज करें

बस एक त्वरित अनुवर्ती पालन करें और ध्यान दें कि अब संभव है कि सहायता लाइब्रेरी का उपयोग ग्रिडलेआउट में भारित रिक्ति के साथ करने के लिए आप क्या चाहते हैं, यह देखने के लिए:

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

मैं इसे LinearLayout संग्रहित करता हूं

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="166dp" android:text="Tile1" android:gravity="center" android:background="#6f19e5"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="Tile2" android:layout_width="0dp" android:layout_height="wrap_content" android:height="126dp" android:gravity="center" android:layout_weight=".50" android:background="#f1d600"/> <TextView android:text="Tile3" android:layout_width="0dp" android:layout_height="wrap_content" android:height="126dp" android:gravity="center" android:layout_weight=".50" android:background="#e75548"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="Tile4" android:layout_width="0dp" android:layout_height="wrap_content" android:height="126dp" android:gravity="center" android:layout_weight=".50" android:background="#29d217"/> <TextView android:text="Tile5" android:layout_width="0dp" android:layout_height="wrap_content" android:height="126dp" android:gravity="center" android:layout_weight=".50" android:background="#e519cb"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="176dp" android:text="Tile6" android:gravity="center" android:background="#09eadd"/> </LinearLayout> </LinearLayout> 

यहां मॉडल है

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

डॉक्स: https://developer.android.com/reference/android/widget/TableLayout.html

उदाहरण:

 <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TableRow> <Button android:id="@+id/test1" android:layout_width="wrap_content" android:layout_height="90dp" android:text="Test 1" android:drawableTop="@mipmap/android_launcher" /> <Button android:id="@+id/test2" android:layout_width="wrap_content" android:layout_height="90dp" android:text="Test 2" android:drawableTop="@mipmap/android_launcher" /> <Button android:id="@+id/test3" android:layout_width="wrap_content" android:layout_height="90dp" android:text="Test 3" android:drawableTop="@mipmap/android_launcher" /> <Button android:id="@+id/test4" android:layout_width="wrap_content" android:layout_height="90dp" android:text="Test 4" android:drawableTop="@mipmap/android_launcher" /> </TableRow> <TableRow> <Button android:id="@+id/test5" android:layout_width="wrap_content" android:layout_height="90dp" android:text="Test 5" android:drawableTop="@mipmap/android_launcher" /> <Button android:id="@+id/test6" android:layout_width="wrap_content" android:layout_height="90dp" android:text="Test 6" android:drawableTop="@mipmap/android_launcher" /> </TableRow> </TableLayout> 

क्या आपको पता है कि देखें.गेट वीटट्रीऑबसेर ()। AddOnGlobalLayoutListener ()

इससे आप आकारों की गणना कर सकते हैं

मैं GridView द्वारा आपके यूआई प्रभाव को प्राप्त करता हूं:

 GridView g; g.setNumColumns(2); g.setStretchMode(GridView.STRETCH_SPACING_UNIFORM);