मैं तुम्हें एक टुकड़ा देने की कोशिश करेंगे, लेकिन ईमानदारी से, आपके मामले के लिए ग्रिड व्यू का उपयोग करने का कोई मतलब नहीं है क्योंकि वैसे भी आप सभी स्क्रीन स्क्रीन पर हैं। आप एक छोटे से पाश में कुछ LinearLayout
एस बना सकते हैं जो परिणाम प्राप्त करेंगे।
मैं आपको स्क्रीन चौड़ाई के अनुसार रनटाइम पर कॉलमविड्थ सेट करने के लिए सलाह दूंगा।
और आपके एडाप्टर को बाल दृश्यों को फुलाते समय उन्हें सेट करने के लिए स्तंभ चौड़ाई और ऊंचाई से खिलाया जाना चाहिए। और इस मामले में, आपको numColumns से छुटकारा पाने की जरूरत है। याद रखें कि कॉलमविड्थ के साथ numColumns का उपयोग करना कोई समझ नहीं आता है, खासकर जब आप पूरी जगह भरना चाहते हैं। यदि आप numColumns सेट करना चाहते हैं, तो कॉलमविड्थ को हटा दें।
समाधान: सबसे पहले, हम हमारे लेआउट बनाने के लिए:
यहाँ परिणाम है। मेरे मामले में, यह MainActivity
का लेआउट है और इसे activity_main.xml
कहा जाता है। (सूचना वहाँ कोई GridView क्योंकि मैं कोड में है कि बाद में जोड़ देंगे है):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/header"
android:background="#444"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/white"
android:text="Dynamic Static GridView" />
<TextView
android:id="@+id/footer"
android:gravity="center"
android:background="#444"
android:textColor="@android:color/white"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Shush" />
</RelativeLayout>
हमारे GridView तत्व के लेआउट में यहाँ है item_grid.xml
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#fff"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
अब चाल MainActivity में है (मेरे पास है आपके लिए समझने के लिए कुछ कोड पर टिप्पणी की गई):
पैकेज com.example।dynamicstaticgridview;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.RelativeLayout;
import android.app.Activity;
import android.graphics.Color;
/**
* @author Sherif elKhatib
*
*/
public class MainActivity extends Activity {
private static String items[]; //these are temporary items :p do not use them
static {
items = new String[7*7];
for(int i=0;i<7*7;i++) {
items[i] = String.valueOf(i);
}
}
int numberOfColumns = 7; //defaulting to 7, you can change it when you know
int numberOfRows = 7; //defaulting to 7, you can change it when you know
GridView mGrid;
ArrayAdapter<String> mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.BELOW, R.id.header);
params.addRule(RelativeLayout.ABOVE, R.id.footer);
mGrid = new GridView(this) {
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if(!calculated)
getDimens();
}
};
mGrid.setVerticalSpacing(0);
mGrid.setHorizontalSpacing(0);
mGrid.setStretchMode(GridView.NO_STRETCH);
mGrid.setBackgroundColor(Color.rgb(100, 10, 10));
((RelativeLayout)findViewById(R.id.rootview)).addView(mGrid, params);
}
private int mCellWidth;
private int mCellHeight;
boolean calculated = false;
protected void getDimens() {
calculated = true;
//here you might have some rounding errors
//thats why you see some padding around the GridView
mCellWidth = mGrid.getWidth()/numberOfColumns;
mCellHeight = mGrid.getHeight()/numberOfRows;
mGrid.setColumnWidth(mCellWidth);
mGrid.setNumColumns(numberOfColumns);
mAdapter = new ArrayAdapter<String>(this, R.layout.item_grid, R.id.text, items) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
GridView.LayoutParams params = null;
if(convertView == null) {
params = new GridView.LayoutParams(mCellWidth, mCellHeight);
}
convertView = super.getView(position, convertView, parent);
if(params != null) {
convertView.setLayoutParams(params);
}
return convertView;
}
};
mGrid.setAdapter(mAdapter);
}
}
टिप्पणियाँ: आप वास्तव में बेहतर एक सभ्य एल्गोरिथ्म का चयन करने के mCellWidth
, mCellHeight
, numberOfColumns
, और numberOfRows
पाते हैं।
यहां एक नज़र डालें ("क्लिपChildren", "verticalSpacing", आदि जैसे गुणों को देखें ...): http://stackoverflow.com/questions/7705330/gridview-and-excess-space-padding – kinghomer
@kinghomer काम नहीं कर रहा है ... क्षमा करें –
क्या आप अपनी पंक्ति लेआउट पोस्ट कर सकते हैं? – Luksprog