我知道在StackOverflow中已经以许多不同的方式询问了这个问题,但是似乎没有一个答案适合我的问题。
从这张图片(https://imgur.com/a/9MIlzwe中可以看出,在GridView的底部有一个难看的空间,因为行没有按比例拉伸以覆盖GridView的所有高度。我尝试了很多不同的代码,以至于无法在此处编写所有代码。相反,我要做的是显示我当前拥有的,与问题相关的代码段。
我首先计算GridView的尺寸,然后在其中显示图像。我想要3列和3行,这就是为什么在这两种情况下都将setDimensions除以COLUMNS的原因(因为它是值为3的常量int):
private void setDimensions() {
ViewTreeObserver vto = mGridView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int displayWidth = mGridView.getMeasuredWidth();
int displayHeight = mGridView.getMeasuredHeight();
mColumnWidth = displayWidth / COLUMNS;
mColumnHeight = displayHeight / COLUMNS;
display(getApplicationContext());
}
});
}
private static void display(Context context) {
ArrayList<ImageView> imgs = new ArrayList<>();
ImageView image;
/*
...More code
*/
mGridView.setAdapter(new CustomAdapter(imgs, mColumnWidth, mColumnHeight));
}
我的适配器类的getView()方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = imgs.get(position);
} else {
imageView = (ImageView) convertView;
}
android.widget.AbsListView.LayoutParams params = new android.widget.AbsListView.LayoutParams(mColumnWidth, AbsListView.LayoutParams.WRAP_CONTENT);
imageView.setLayoutParams(params);
return imageView;
}
搜索时,我遇到过许多解决方案之一是为视图(在本例中为ImageView)填充一个布局,然后为ImageView使用android:adjustViewBounds="true"
,但这没有效果。
按照Ferran的要求,这是我尝试放大ImageView的代码:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:adjustViewBounds="true"
/>
上面的代码将与此结合:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
imageView = (ImageView) layoutInflater.inflate(R.layout.image_item, parent, false);
} else {
imageView = (ImageView) convertView;
}
imageView.setMinimumHeight(mColumnHeight/3);
imageView.setMinimumWidth(mColumnWidth/3);
return imageView;
}
结果将是白屏死机:https://imgur.com/a/GJXRsxV
答案 0 :(得分:0)
尝试一下:
在“活动”中找到屏幕的高度:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
scrHeight = metrics.heightPixels;
然后,在您的适配器中,设置商品的最小高度
itemView = inflater.inflate(R.layout.item, null); // the layout of your item
itemView.setMinimumHeight(scrHeight/3);