我的Android应用中有一个GridView,它有图像。我在GridView中有10行和2列。有了这个,我在每个网格中都有相同大小的图像,即20个图像。
网格代码是,
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:columnWidth="140dp"
android:drawSelectorOnTop="true"
android:gravity="center"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="5dp"
android:focusable="true"
android:clickable="true"
/>
同时在java代码中,我使用了一个Adapter。这是使用scaleType
设置单个网格大小和图像的代码 imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(340, 400));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(10, 10, 10, 10);
它在设备屏幕尺寸5'0上工作正常,但在其他设备上,如5'7,4'5,它的工作方式不同。网格(及其各个图像)有些隐藏/裁剪。即使在5'0以下,它也显示出一些额外的空间,看起来很差。
GridView如何在不同的屏幕尺寸上正常工作。
这是一个样本,它在5'7中看起来如何,
这是一个样本,它在5'0中看起来如何。 这就是我希望它在每个屏幕尺寸上都可见的方式。
这是一个样本,它在4'0中看起来如何。这里的图像重叠了。
答案 0 :(得分:1)
您可以在适配器中使用与ViewView相同的GridView项目视图,如下所示:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_grid, null);
holder = new ViewHolder();
holder.mImage = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mImage.setImageResource(imageIDs[position]);
return convertView;
}
public class ViewHolder {
private ImageView mImage;
}
我创建了item_grid,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/grid_image"
android:layout_width="match_parent"
android:layout_height="130dp" />
</LinearLayout>
建议:您可以将RecyclerView与GridLayoutManager一起使用2列
答案 1 :(得分:0)
此代码在适配器中对我来说就像一个魅力:
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
//Calculation of ImageView Size - density independent.
//maybe you should do this calculation not exactly in this method but put is somewhere else.
Resources r = Resources.getSystem();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, r.getDisplayMetrics());
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams((int)px, (int)px));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
//imageView.setPadding(8, 8, 8, 8);
imageView.setBackgroundColor(Color.BLUE);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
来源: https://stackoverflow.com/a/11485625/7639113
添加上面的代码后,我还为更大的屏幕创建了不同的布局,如下所示:
normal_layout.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:numColumns="2"
android:verticalSpacing="5dp"
/>
bigscreen_layout.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:numColumns="4"
android:verticalSpacing="5dp"
/>
请注意,我为上面的布局设置了不同的numColumns。
以下是我为不同屏幕尺寸创建布局的方法:
您可以在官方Android指南Supporting Multiple Screens中查看不同的屏幕尺寸详细信息: