0

我在我的应用程序中使用 GridView:

<GridView
    android:id="@+id/main_grid_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numColumns="4" >
</GridView>

此 GridView 中的每个单元格都是 ImageView:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:contentDescription="@string/img"
        android:scaleType="centerCrop" />

</RelativeLayout>

我的 GridView 中的所有单元格必须是方形的(高度必须等于宽度)并且图像必须适合单元格。但它总是看起来像矩形......我如何在 GridView 中实现方形单元格?

4

3 回答 3

1

确保你的单元格是方形的。

为此,您可以使用值 screen_width/4 以编程方式设置 RelativeLayout 的宽度和高度。

于 2013-03-20T12:05:06.490 回答
0

正如这里的答案中提到的 -具有两列和自动调整大小图像的 Gridview

您可以为此制作自定义 ImageView

public class SquareImageView extends ImageView {

public SquareImageView(Context context) {
    super(context);
}

public SquareImageView(Context context, AttributeSet attributeSet) {
    super(context, attributeSet);
}

public SquareImageView(Context context, AttributeSet attributeSet, int defStyle) {
    super(context, attributeSet, defStyle);
}

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

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
    } else {
        setMeasuredDimension(getMeasuredHeight(), getMeasuredHeight());
    }
}
}

然后在您的网格视图单元格布局中使用它作为

<package_containing_SquareImageView.SquareImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
于 2015-04-18T15:00:47.297 回答
0

这可以解决问题

@Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    int size = width > height ? height : width;
    setMeasuredDimension(size, size);
}
于 2014-05-22T09:57:21.617 回答