Android - 如何将带有ImageView的CardViews放入网格中

时间:2015-10-24 18:35:37

标签: android xml imageview android-imageview android-cardview

我有一些正方形图像,并希望将它们放在符合屏幕宽度的3行中,同时保留图像的纵横比。这可以很容易地完成。但是,我还想将每个ImageView放入一个CardView(方卡)中,但是当我这样做时会出现问题。 这张卡真的很长,而不是图像的高度。我不确定这里出了什么问题。 下面是我将第一个ImageView放入CardView之前的代码。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <android.support.v7.widget.CardView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">
        <ImageView
            android:src="@drawable/square1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/main_dark"
            android:adjustViewBounds="true" />
    </android.support.v7.widget.CardView>

    <ImageView
        android:src="@drawable/square2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/main"
        android:layout_weight="1"
        android:adjustViewBounds="true"/>

    <ImageView
        android:src="@drawable/square3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/main_light"
        android:layout_weight="1"
        android:adjustViewBounds="true"/>
</LinearLayout>

1 个答案:

答案 0 :(得分:5)

由于您想要每行三个视图,无论行的宽度如何,并且您希望它们都是正方形,您可以使用自定义CardView,并覆盖onMeasure()以强制1:1宽高比

<script>

然后使用:

package com.example.view;

public class SquareCardView extends CardView {

    public SquareCardView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int ignoredHeightMeasureSpec) {
        int newHeightMeasureSpec = widthMeasureSpec;
        super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);
    }

}

不是说你应该,但你可以