Удалить пробел между строками в GridView - PullRequest
0 голосов
/ 10 апреля 2019

Я знаю, что в StackOverflow об этом спрашивали по-разному, но, похоже, ни один из ответов не соответствует моей проблеме.

Как видно на этом рисунке (https://imgur.com/a/9MIlzwe), Я получаюуродливое пространство внизу GridView, потому что строки не растягиваются пропорционально, чтобы покрыть всю высоту GridView. Я пробовал так много разных кодов, что писать их все здесь бесполезно. Вместо этого я сделаю так:показать фрагменты моего кода, который у меня есть в данный момент и который имеет отношение к проблеме.

Сначала я вычисляю размеры GridView перед отображением изображений внутри него. Мне нужны 3 столбца и 3 строки, поэтомувнутри setDimensions я делю на COLUMNS в обоих случаях (потому что это константа int со значением 3):

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

1 Ответ

0 голосов
/ 10 апреля 2019

Попробуйте это:

В своей деятельности найдите высоту экрана:

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);
...