调整 GridView 和 ImageViews 以适应不同的屏幕尺寸,Android
Adjust GridView with ImageViews to different screen sizes, Android
如果有人可以在下面提供建议,我将不胜感激。
我的 GridView
有 3 列将填充 ImageViews:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:numColumns="3"
android:columnWidth="0.3dp"
android:horizontalSpacing="20dp"
android:verticalSpacing="20dp"
android:stretchMode="columnWidth">
</GridView>
将 ImageViews
添加到网格单元格的适配器:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mThumbIds.get(position));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new GridView.LayoutParams(300, 300));//problem here
return imageView;
}
我的图片大小都是 358x385px。
它在大屏幕上运行良好,但在小屏幕(例如 4"、800x480)上失败。
我不确定如何将 LayoutParams
设置为屏幕宽度和高度的 1/3 以形成正方形。
我不想为不同的屏幕密度添加更多具有适当尺寸的图像,而是我只想调整尺寸 ImageViews
。
遵循此代码,将 square gridview 应用于所有兼容的设备。
步骤:1 创建一个扩展 Imageview 的 class SquareImageView.class。
public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}
public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width
}
}
步骤 :2 像这样更改适配器。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SquareImageView imageView = new SquareImageView (mContext);
imageView.setImageResource(mThumbIds.get(position));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
return imageView;
}
你的xml像这样
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:padding="3dp"
android:stretchMode="columnWidth"
android:horizontalSpacing="2dp"
android:verticalSpacing="2dp"
/>
并在小屏幕设备上测试..它会帮助你
如果有人可以在下面提供建议,我将不胜感激。
我的 GridView
有 3 列将填充 ImageViews:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:numColumns="3"
android:columnWidth="0.3dp"
android:horizontalSpacing="20dp"
android:verticalSpacing="20dp"
android:stretchMode="columnWidth">
</GridView>
将 ImageViews
添加到网格单元格的适配器:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mThumbIds.get(position));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new GridView.LayoutParams(300, 300));//problem here
return imageView;
}
我的图片大小都是 358x385px。
它在大屏幕上运行良好,但在小屏幕(例如 4"、800x480)上失败。
我不确定如何将 LayoutParams
设置为屏幕宽度和高度的 1/3 以形成正方形。
我不想为不同的屏幕密度添加更多具有适当尺寸的图像,而是我只想调整尺寸 ImageViews
。
遵循此代码,将 square gridview 应用于所有兼容的设备。
步骤:1 创建一个扩展 Imageview 的 class SquareImageView.class。
public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}
public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width
}
}
步骤 :2 像这样更改适配器。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SquareImageView imageView = new SquareImageView (mContext);
imageView.setImageResource(mThumbIds.get(position));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
return imageView;
}
你的xml像这样
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:padding="3dp"
android:stretchMode="columnWidth"
android:horizontalSpacing="2dp"
android:verticalSpacing="2dp"
/>
并在小屏幕设备上测试..它会帮助你