Android - GridView:指定列跨度

问题描述 投票:2回答:4

如何在android的gridview中指定列跨度?

我有一个gridview,每行显示3个图像。有时,有些图像必须跨越2行。

在Android中可以这样做吗?或者我应该使用不同的视图?

android gridview html-table
4个回答
8
投票

TableLayoutGridLayout支持列跨越,但GridView没有。


1
投票

也许这个图书馆对你有用。 https://github.com/felipecsl/AsymmetricGridView


0
投票

如果您仍想使用GridView,则可以隐藏其中一个单元格并扩展其旁边的单元格宽度,使其跨越整个宽度。这可以在RowAdapter中完成。

private static LayoutInflater inflater = null;

public class GridRowAdapter extends BaseAdapter
{
    private String[] imageURLArray;

    public GridRowAdapter(String[] imageURLArray)
    {
        this.imageURLArray = imageURLArray;

        if(inflater == null)
        {
            inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
    }

    public int getCount()
    {
        int iCount = Math.max(imageURLArray.length, 1);

        //Reduce the count of items expected by the GridView because 1 item will take up 2 cells 
        iCount--;

        return iCount;
    }

    public Object getItem(int position)
    {
        return position;
    }

    public long getItemId(int position)
    {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        View v = convertView;

        try
        {
            if(parent != null)
            {
                if(position < 2)
                {
                    v = inflater.inflate(R.layout.grid_item_feature, parent, false);

                    ViewGroup.LayoutParams params = v.getLayoutParams();

                    if(position == 0)
                    {
                        //Extend height and width of the cell on the left
                        params.height = (itemsGridView.getWidth());
                        params.width = (itemsGridView.getWidth());

                        //Write code to show Image or Text
                        String strImage = imageURLArray[position];

                    }
                    else
                    {
                        //You must extend the height of this cell too even though you're going to make it disappear
                        params.height = (itemsGridView.getWidth());

                        //Hide cell on the right
                        v.setVisibility(View.GONE);
                    }
                }
                else
                {
                    //Reduce the index of the position because we skipped an item 
                    position--;

                    v = inflater.inflate(R.layout.grid_item, parent, false);

                    //Write code to show Image or Text
                    String strImage = imageURLArray[position];
                }
            }

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return v;
    }


}

0
投票

这可能对你有帮助。

<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3"
android:rowCount="4"
android:layout_margin="15dp"
android:background="#DEB887"
>
<Button android:text="Button 1" />
<Button android:text="Button 2" />
<Button android:text="Button 3" />
<Button android:text="Button 4" />
<Button android:text="Column Span 2"
        android:layout_columnSpan="2"
        />
<Button android:text="Button 6" />
<Button android:text="Row Span 2"
        android:layout_rowSpan="2"
        />
<Button android:text="Button 8" />
<Button android:text="Button 9" />
<Button android:text="Button 10" />
<Button android:text="Button 11" />
<Button android:text="Button 12" />
<Button android:text="Button 13" />

example snapshot

© www.soinside.com 2019 - 2024. All rights reserved.