I am working on Sudoku app. The layout is 9x9 GridView. Each GridView include 9 Textviews by customAdapter. I want to make the 9 TextViews to fill the height of each GridView. How?
This is what I am having now
Here is myGridAdapter:
public class myGridAdapter extends BaseAdapter {
private Context context;
private String[] mobileValues;
public myGridAdapter(MainActivity mainActivity, String[] arrayEmpty) {
this.context = mainActivity;
this.mobileValues = arrayEmpty;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convertView == null) {
gridView = new View(context);
// get layout from text_item.xml
gridView = inflater.inflate(R.layout.text_item, null);
// set value into textview
TextView textView = (TextView) gridView
.findViewById(R.id.grid_item_label);
textView.setText(mobileValues[position]);
} else {
gridView = (View) convertView;
}
return gridView;
}
.....
}
This is the XML for each text item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/grid_item_label"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@drawable/cell_shape"
android:text="@string/_1"
tools:ignore="InefficientWeight"
android:textSize="12sp" >
</TextView>
</LinearLayout>
This is the shape for each TextView
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<solid android:color="#FFFFFF"/>
<stroke android:width="1dp" android:color="#777777" />
</shape>
I want my Gridview to be like this one
After applying the first answer of bakriOnFire
You can set the height of each LinearLayout of TextView that you inflate in your GridView's adapter to screenHeight/3.
In getView after inflating the textView's xml, cast the inflated view to LinearLayout and set its height as:
LayoutInflater li = getLayoutInflater();
LinearLayout ll = (LinearLayout) li.inflate(R.layout.menu_items, null);
int screenHeight = ((Activity) context).getWindowManager()
.getDefaultDisplay().getHeight();
ll.setMinimumHeight(screenHeight/3);
Edit
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
text_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/grid_item_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
tools:ignore="InefficientWeight"
android:padding="0dp"
android:textSize="12sp" >
</TextView>
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
String[] str = { "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" ,
"1", "2", "3", "1", "2", "3", "1", "2", "3" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
GridView gridView = (GridView) findViewById(R.id.gridView1);
gridView.setAdapter(new myGridAdapter(this, str));
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
}
});
}
public class myGridAdapter extends BaseAdapter {
private Context context;
private String[] mobileValues;
public myGridAdapter(MainActivity mainActivity, String[] arrayEmpty) {
this.context = mainActivity;
this.mobileValues = arrayEmpty;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout gridView;
if (convertView == null) {
// get layout from text_item.xml
gridView = (LinearLayout)inflater.inflate(R.layout.text_item, null);
int screenHeight = ((Activity) context).getWindowManager()
.getDefaultDisplay().getHeight();
gridView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.MATCH_PARENT, screenHeight/9));
//gridView.setMinimumHeight(screenHeight/9);
// set value into textview
TextView textView = (TextView) gridView
.findViewById(R.id.grid_item_label);
textView.setText(mobileValues[position]);
} else {
gridView = (LinearLayout) convertView;
}
return gridView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mobileValues.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
}
}
In the getView what i've done is i've inflated the text_item.xml for 9x9 times, in which i've dynamically set the layout height of text_item to screenHeight/9. Let me know if it work for you or not.
Edit 2
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:numColumns="9"
android:padding="0dp"
android:background="#000000"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp"
android:stretchMode="columnWidth" >
</GridView>
</LinearLayout>
text_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:background="#FFFFFF"
android:orientation="vertical" >
<TextView
android:id="@+id/grid_item_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
tools:ignore="InefficientWeight"
android:padding="0dp"
android:textSize="12sp" >
</TextView>
</LinearLayout>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With