我有12张图像,我希望以4行乘3列的网格显示。
为此我使用GridLayout。
图像具有不同的尺寸,我希望它们可以缩放,因此每个图像都填充一个单元格,就像线性布局中的重量一样。
我使用了ImageViews
scaleType
和adjustViewBounds
属性,但只是手动设置了layout_width
和layout_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" />
答案 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>