删除GridView中行之间的空间

时间:2019-04-10 08:12:45

标签: android android-imageview baseadapter android-gridview

我知道在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

1 个答案:

答案 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);