如何强制GridView使用整个屏幕(无论显示尺寸如何)?

Jim*_*mmy 7 android gridview android-2.0-eclair android-2.1-eclair

我有以下布局文件,后面有一个GridViewImageView后面的布局文件.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FFFFFF">
    <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|right"
            android:layout_marginRight="-70dp"
            android:layout_marginBottom="-50dp"
            android:src="@drawable/s_background"/>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent">
        <GridView xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/gridview"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:columnWidth="90dp"
                  android:numColumns="auto_fit"
                  android:verticalSpacing="10dp"
                  android:horizontalSpacing="10dp"
                  android:stretchMode="columnWidth"
                  android:gravity="center"/>
    </LinearLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

这是我用于网格的每个"单元格"中的实际项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
            android:id="@+id/cardInGrid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:singleLine="true"
            android:textSize="40sp"
            android:textColor="#660099"
            android:typeface="serif"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我现在在设备上看到以下内容:

在此输入图像描述

是否有任何方法可以使GridView中的每个项目更大,所以它适合屏幕的大小,我在显示屏的底部没有未使用的空白区域?

这在模拟器上工作正常,但在设备上屏幕分辨率更高,因此在底部获得空白区域.

非常感谢

小智 16

这将很好.不要忘记垂直间距.

public class MyAdapter extends BaseAdapter {
    public static int ROW_NUMBER = 5;

    public MyAdapter (Context mContext, ArrayList<String> list) {
        this.context = mContext;
        lstDate = list;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
        }
        // we need to decrease cell height to take into account verticalSpacing for GridView
        int cellHeight = StrictMath.max(parent.getHeight() / ROW_NUMBER - parent.getContext().getResources().getDimensionPixelOffset(R.dimen.grid_spacing), 320);
        AbsListView.LayoutParams param = new AbsListView.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                parent.getHeight() / ROW_NUMBER);
        convertView.setLayoutParams(param);

        return convertView;
    }
Run Code Online (Sandbox Code Playgroud)


Com*_*are 3

不是自动的。

特别是,您的单元格是文本。Android 无法完全猜测文本应该有多大才能实现您的目标,尤其是在考虑自动换行的情况下。

重点是GridView,如果没有足够的数据来填充屏幕,则在显示底部有“未使用的空白区域”,这样它就可以灵活地处理多种屏幕尺寸,并且如果有更多数据,也可以容纳滚动。如果您的目标是类似于仪表板模式的东西,请考虑使用DashboardLayout或类似的东西。