在GridLayout中自动调整图像大小?

时间:2015-03-27 01:20:53

标签: android android-layout android-imageview android-gridlayout

我有12张图像,我希望以4行乘3列的网格显示。 为此我使用GridLayout。 图像具有不同的尺寸,我希望它们可以缩放,因此每个图像都填充一个单元格,就像线性布局中的重量一样。 我使用了ImageViews scaleTypeadjustViewBounds属性,但只是手动设置了layout_widthlayout_height。 这是可能的还是我应该提前调整尺寸?有没有更好的方法来实现我的目标与不同的布局?

我正在使用Android Studio 1.1.0,API 21。

谢谢!

activity_set_background.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ImagesGridLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnCount="3"
android:rowCount="4"
tools:context=".SetBackgroundActivity">


<ImageView
    android:id="@+id/background1"
    android:layout_gravity="start|top"
    android:scaleType="centerInside"
    android:adjustViewBounds="true"
    android:layout_rowSpan="1"
    android:layout_columnSpan="1"
    android:src="@drawable/bg1"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="0"
    android:layout_column="0" />

<ImageView
    android:id="@+id/background2"
    android:layout_gravity="left|top"
    android:src="@drawable/bg2"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="0"
    android:layout_column="1" />

<ImageView
    android:id="@+id/background3"
    android:layout_gravity="left|top"
    android:src="@drawable/bg3"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="0"
    android:layout_column="2" />

<ImageView
    android:id="@+id/background4"
    android:layout_gravity="left|top"
    android:src="@drawable/bg4"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="1"
    android:layout_column="0" />

<ImageView
    android:id="@+id/background5"
    android:layout_gravity="left|top"
    android:src="@drawable/bg5"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="1"
    android:layout_column="1" />

<ImageView
    android:id="@+id/background6"
    android:layout_gravity="left|top"
    android:src="@drawable/bg6"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="1"
    android:layout_column="2" />

<ImageView
    android:id="@+id/background7"
    android:layout_gravity="start|top"
    android:scaleType="centerInside"
    android:adjustViewBounds="true"
    android:layout_rowSpan="1"
    android:layout_columnSpan="1"
    android:src="@drawable/bg7"
    android:layout_row="2"
    android:layout_column="0"
    android:layout_width="124dp"
    android:layout_height="123dp" />

<ImageView
    android:id="@+id/background8"
    android:layout_gravity="left|top"
    android:src="@drawable/bg8"
    android:layout_width="131dp"
    android:layout_height="108dp"
    android:layout_row="2"
    android:layout_column="1" />

<ImageView
    android:id="@+id/background9"
    android:layout_gravity="left|top"
    android:src="@drawable/bg9"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="2"
    android:layout_column="2" />

<ImageView
    android:id="@+id/background10"
    android:layout_gravity="left|top"
    android:src="@drawable/bg10"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="3"
    android:layout_column="0" />

<ImageView
    android:id="@+id/background11"
    android:layout_gravity="left|top"
    android:src="@drawable/bg11"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="3"
    android:layout_column="1" />

<ImageView
    android:id="@+id/background12"
    android:layout_gravity="left|top"
    android:src="@drawable/bg12"
    android:layout_width="118dp"
    android:layout_height="97dp"
    android:layout_row="3"
    android:layout_column="2" />

2 个答案:

答案 0 :(得分:0)

请参阅https://stackoverflow.com/a/14881357/2680254

public class SquareImageView extends ImageView
{ 

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

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

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


@Override 
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec)
{ 
    final int width = getDefaultSize(getSuggestedMinimumWidth(),widthMeasureSpec);
    setMeasuredDimension(width, width);
} 

@Override 
protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh)
{ 
    super.onSizeChanged(w, w, oldw, oldh);
} 

}

答案 1 :(得分:0)

根据我的想法,您可以使用相对和线性布局显示Imageview并使用不同样式设置其mergin或padding从值文件夹中获取支持的设备大小,使用imageview设置下面的代码

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
    android:id="@+id/first"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="3" >

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
</LinearLayout>
<LinearLayout
    android:id="@+id/second"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/first"
    android:weightSum="3" >

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
</LinearLayout>
<LinearLayout
    android:id="@+id/third"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/second"
    android:weightSum="3" >

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
</LinearLayout>
<LinearLayout
    android:id="@+id/fourth"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/third"
    android:weightSum="3" >

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher"
        android:scaleType="centerInside"
        android:text="1" />
</LinearLayout>