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

セルが正方形であることを確認してください。

このために、RelativeLayoutの幅と高さを値screen_width/4を使用してプログラムで設定できます。

于 2013-03-20T12:05:06.490 に答える
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 に答える
0

ここでの回答で述べたように-2列の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 に答える