हमारे ऐप में हम गतिशील रूप से ग्रिडलाउट में टुकड़े जोड़ने की कोशिश कर रहे हैं। खाली ग्रिड लेआउट को एक्सएमएल में परिभाषित किया गया है क्योंकि यह टुकड़ा के लिए लेआउट है। रन टाइम पर हम कुछ डेटा की जांच करते हैं और इससे लेआउट में जोड़ने के लिए टुकड़ों की संख्या निर्धारित होती है और साथ ही साथ प्रत्येक टुकड़े के लिए कौन सा लेआउट उपयोग किया जाता है। जब हमारे पास खंड उत्पन्न होता है तो उसके जेनरेट किए गए दृश्य में आकार होता है, यह सब काम करता है, हालांकि अगर हम टुकड़े के लिए लेआउट फ़ाइल में आकार निर्दिष्ट करते हैं तो ग्रिड लेआउट में कुछ भी दिखाई नहीं देता है। जाहिर है, जब हम दृश्य बनाते हैं तो हम बस आकार निर्दिष्ट कर सकते हैं लेकिन हम इसे टुकड़ों के लिए एक्सएमएल लेआउट में करना पसंद करेंगे क्योंकि इससे हमें प्रत्येक डिवाइस के लिए सही लेआउट चुनने के लिए एंड्रॉइड के निर्मित सिस्टम का लाभ उठाने की अनुमति मिल जाएगी।गतिशील रूप से ग्रिडलायआउट में एक्सएमएल लेआउट के साथ टुकड़े जोड़ना
मैं समर्थन पुस्तकालय खंडों का उपयोग कर रहा हूं। मैं समर्थन पुस्तकालय GridLayout उपयोग नहीं कर रहा है कि अगर एक फर्क नहीं पड़ता
प्रासंगिक कोड और xml इस प्रकार है:
GridLayout एक्सएमएल:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ScrollView
android:id="@+id/grid_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_fragment"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="8dp"
android:layout_marginTop="?android:attr/actionBarSize"
android:overScrollMode="ifContentScrolls" >
<GridLayout
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alignmentMode="alignMargins"
android:animateLayoutChanges="true"
android:columnCount="3"
android:columnOrderPreserved="true"
android:orientation="horizontal"
android:overScrollMode="ifContentScrolls"
android:rowOrderPreserved="true" >
</GridLayout>
</ScrollView>
</merge>
एक टुकड़ा एक्सएमएल
का उदाहरण<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="100dp"
android:alpha="1" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="1.0" />
</RelativeLayout>
फ्रैगमेंट ऑनक्र eateView() विधि
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view;
GridLayout.Spec rowSpec = GridLayout.spec(mRowStart, mRowSpan);
GridLayout.Spec columnSpec;
GridLayout.LayoutParams childParams;
if (large) {;
view = inflater.inflate(R.layout.my_place_large, container, false);
columnSpec = GridLayout.spec(mColumnStart, 2);
childParams = new GridLayout.LayoutParams(rowSpec, columnSpec);
//childParams.width = 200; //If I do this everything works regardless of the layout size
} else {
view = inflater.inflate(R.layout.my_place_small, container, false);
columnSpec = GridLayout.spec(mColumnStart, 1);
childParams = new GridLayout.LayoutParams(rowSpec, columnSpec);
//childParams.width = 100; //If I do this everything works regardless of the layout size
}
childParams.setMargins(0, 0, 0, 0);
//childParams.height = 100; //If I do this everything works regardless of the layout size
view.setLayoutParams(childParams);
view.setId(ID);
return view;
}
लेआउट
private void populateGrid() {
RelativeLayout gridParent = (RelativeLayout) mParentActivity.findViewById(R.id.locations);
mLocationsGrid = (GridLayout) gridParent.findViewById(R.id.grid);
nColumns = mLocationsGrid.getColumnCount();
mAdapter = new MyAdapter(mContext, this, mResolver); //This is how I keep track of the various fragments depending on my app's state
int nCards = mAdapter.getNumberOfCards();
FragmentManager fragmentManager = mParentActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
for (int i = 0; i < nCards; ++i) {
fragmentTransaction.add(mLocationsGrid.getId(), mAdapter.getFragmentAtIndex(i), String.valueOf(i));
}
fragmentTransaction.commit();
mPopulated = true;
}
के टुकड़े जोड़ें मुझे लगता है कि यह कवर करना चाहिए। बस दोहराते हैं, अगर मैं लाइनों जो स्पष्ट onCreateView() में आयाम सेट uncomment, वे GridLayout में ठीक से तो मैं सब कुछ है कि टुकड़े और इस तरह के कार्यों का ट्रैक रखता है पता है, के रूप में टुकड़ा लेन-देन करता दिखाई देते हैं। मुद्दा तब आता है जब मैं खंड के xml में आकार को आज़माता और निर्दिष्ट करता हूं, इस मामले में मुझे एक खाली स्क्रीन मिलती है।
आप विचार, सुझाव और संगीत की सराहना की जाती है। धन्यवाद, जेरेड
इस तथ्य को हम क्या किया है। मैं आपको चयनित उत्तर दूंगा हालांकि यद्यपि आपने इसे लिखने के लिए समय निकाला है, और स्पष्ट रूप से। – Jared