Android Как растянуть строки в gridview для заполнения экрана?

У меня есть простой GridView (с одним столбцом и шестью строками), который отображает ImageView с TextView в ячейке (я создаю адаптер). Как растянуть строки, чтобы заполнить всю высоту экрана? Теперь у меня есть пробел ниже клеток …

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <LinearLayout android:layout_height="fill_parent" android:layout_width="150dp" android:orientation="vertical" android:id="@+id/left"> <include layout="@layout/menu_grid"></include> </LinearLayout> <LinearLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" android:id="@+id/right"> <ImageView android:src="@drawable/image" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageMain" android:layout_gravity="center"> </ImageView> </LinearLayout> 

menu_grid.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/gridView" android:padding="10dp" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:numColumns="1" android:columnWidth="100dp" android:stretchMode="columnWidth" android:gravity="center"></GridView> 

item.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="fill_horizontal"> <ImageView android:src="@drawable/icon" android:layout_height="70dp" android:id="@+id/imageIcon" android:layout_width="70dp" android:layout_gravity="center_horizontal"></ImageView> <TextView android:id="@+id/textIcon" android:text="TextView" android:layout_gravity="center" android:layout_height="wrap_content" android:layout_width="wrap_content"></TextView> 

ImageAdapter.java

 public class ImageAdapter extends BaseAdapter { //....some code //.... @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if (convertView == null) { LayoutInflater inflater = (LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.item, null); TextView text = (TextView) view.findViewById(R.id.textIcon); text.setText(labels[position]); ImageView image = (ImageView) view.findViewById(R.id.imageIcon); image.setImageResource(icons[position]); } else { view = convertView; } return view; } 

}

Насколько я понял, вопрос в том, что, если у меня есть 6 строк данных, которые нужно заполнить в gridView, как я могу заставить эти 6 строк заполнить весь экран, вместо того, чтобы показывать 6 строк и некоторое пустое пространство под последней строкой.

Чтобы достичь этого, вы должны установить минимальную высоту макета элемента gridView (в вашем случае его item.xml) на (высота экрана) / 6, где 6 – это (количество строк, которое вы должны заполнить). Эта минимальная высота может быть установлена ​​в адаптере, который вы используете.

Чтобы найти высоту экрана устройства:

 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int width = metrics.widthPixels; int height = metrics.heightPixels; 

Найдите эти значения в Activity и сделайте их общедоступными и используйте их в адаптере, у меня возникла проблема с поиском этих значений в классе адаптера

Затем установить минимальную высоту:

 view = inflater.inflate(R.layout.item, null); view.setMinimumHeight(GridViewActivity.height/6); 

Я пробовал это после просмотра сообщения, и он работал отлично.

Если вы просто хотите увеличить пространство между строками, вы можете использовать прокладку, это должно работать. Вы можете установить дополнение через xml или программно на основе вашего требования.

 // this you can set inside your view. android:paddingLeft="5px" android:paddingRight="5px" android:paddingTop="10px" android:paddingBottom="10px" // this you can set to your any widgets like TextView/Layouts/Buttons etc.. setPadding(top, left, bottom, right); 

Надеюсь, я правильно понимаю вас, если это так же просто, как сменить GridView на fill_parent instead wrap_content .

+ Изменить

 <GridView android:layout_height="wrap_content" 

в

 <GridView android:layout_height="fill_parent" 

Если это не так, то это, вероятно, высота макета LinearLayout элемента item.xml, которую вы хотите изменить.