删除GridView中行之间的空格

问题描述 投票:0回答:1

我知道在StackOverflow中已经以多种不同的方式询问了这一点,但没有一个答案似乎符合我的问题。

正如在这张图片(https://imgur.com/a/9MIlzwe)中可以看到的,我在GridView的底部得到一个丑陋的空间,因为行不会按比例拉伸以覆盖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),然后使用android:adjustViewBounds="true"作为ImageView,但这没有任何效果。

根据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

android android-imageview baseadapter android-gridview
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.