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;
}
}
Ответы
Ответ 1
Как я понял, вопрос в том, что если у меня есть 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);
Я пробовал это после просмотра сообщения, и он отлично работал.
Ответ 2
Если вы просто хотите увеличить пространство между строками, вы можете использовать прокладку, это должно работать.
вы можете установить дополнение через 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);
Ответ 3
Надеюсь, что я правильно понимаю вас, если так легко, как изменить GridView
на fill_parent instead
на wrap_content
.
Изменить
<GridView android:layout_height="wrap_content"
к
<GridView android:layout_height="fill_parent"
Если это не так, то это, вероятно, высота макета на LinearLayout
item.xml, которую вы хотите изменить.