Android如何拉伸GridView中的行以填满屏幕?

18
我有一个简单的GridView(只有一列和六行),里面显示了在单元格中带有TextView的ImageView(我创建了适配器)。如何拉伸行以填满整个屏幕高度?现在单元格下方有一些空白...
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;
}

}

->

}


请发布您的布局和/或代码。 - Brian
4个回答

32

据我所理解,问题是-如果我有6行数据要填充到网格视图中,如何使这6行填满整个屏幕,而不是显示6行和最后一行下面的一些空白空间。

要实现这一点,您必须将网格视图项布局(在您的情况下是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);

看到这篇帖子后,我尝试了一下,结果完美无缺。


@androidmaniac,如何将我的RecyclerView以2x2的方式填充到设备屏幕上? - Skizo-ozᴉʞS ツ
你能帮我解决这个问题吗?问题链接 - StuartDTO
很遗憾,它对我不起作用。我正在尝试通过Caldroid日历的单元格来填充整个屏幕。 - Dmitry

3
如果您只想增加行之间的空间,您可以使用padding,这应该有效。您可以根据自己的需求通过xml或编程方式设置padding。
// 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);

0

扩展一个布局,比如Framelayout,然后覆盖onMeasure方法。

public class CameraView extends FrameLayout 

public TextView titleView;

public CameraView(Context context,AttributeSet attrs) {
    super(context, attrs)
    titleView = rootView.findViewById(R.id.titleView);
}


@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}

然后您可以在BaseAdapter中使用此视图,并将layout_widthlayout_height设置为match_parent


-1

我希望我理解你的意思是正确的,如果是这样的话,只需要将你的GridView更改为fill_parent而不是wrap_content就可以了。

更改为:

<GridView android:layout_height="wrap_content"

<GridView android:layout_height="fill_parent"

如果不是这种情况,那么很可能是您想要修改的item.xml上LinearLayout的布局高度。

1
谢谢,但是它不起作用:( 我只想增加行之间的空间以填满屏幕(拉伸行而不是列)..我会尝试使用布局高度:) - snil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接