Как получить прокручиваемую сетку 2 на 2? Какой элемент управления мне использовать?

Я пробовал Grid-View, и поскольку Grid-View не может иметь фиксированных строк, следует ли мне использовать Table-Layout или Grid-Layout? или использовать linear-Layout в Grid-View?

Я хочу, чтобы изображение отображалось без уменьшения или увеличения, поэтому я использую AUTO_FIT и получаю три строки с приведенным ниже кодом, но мне нужны только две строки и два столбца

@Override public View getView(int position, View convertView, ViewGroup parent) 
{
    ImageView view;

    if (convertView == null) 
    {

        view = (ImageView) convertView;
        view = new ImageView(context);
        view.setAdjustViewBounds(true);
        view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, GridView. AUTO_FIT));

    }
    else
         view = (ImageView) convertView;

    String url = getItem(position);

    Picasso.with(context).load(url).error(R.mipmap.no_photo).fit().into(view);

    return view;
}

Ниже приведен образец прикрепленного изображения

enter image description here

1
Muhammad Irfan 31 Дек 2015 в 14:50

2 ответа

Лучший ответ

Я бы порекомендовал вам использовать RecyclerView с GridLayoutManager. Это позволит вам указать количество столбцов:

recyclerView.setLayoutManager(new GridLayoutManager(context, 2));

Если вы хотите установить высоту строки так, чтобы две строки всегда соответствовали высоте вашего экрана, вы можете установить ее внутри onBindView() вашего адаптера. Вы можете определить относительную высоту строки, вычтя высоту экрана из высоты вашего Toolbar:

//Could calculate this in your `Activity` class and pass the value to your Adapter
public int getProprtionalRowHeight() {

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;

    return ((height - toolbar.getHeight()) / 2);

}

В вашем адаптере:

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {

    //...

        ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
        params.height = valueReturnedFromGetProprtionalRowHeight;
        holder.itemView.setLayoutParams(params);

    }
2
PPartisan 31 Дек 2015 в 12:52

Вы можете использовать StaggeredGrid для этой цели, чтобы он был стабильным и простым в использовании. вы также можете использовать StaggeredGridLayoutManager с представлением ресайклера.

1
Rakshit Soni 31 Дек 2015 в 12:18