可变宽度GridView根据单元格数量

时间:2016-04-27 10:35:20

标签: android android-layout gridview layout android-linearlayout

继续提出这个问题Layout dynamic grid in middle

我有一个网格。它具有不同的宽度,具体取决于用户的操作。有时它可能是4 * 3其他时间2 * 5

宽度也可以大于4。

我的问题是网格本身的宽度始终相同,细胞伸展以填充它。这意味着2 * 5的单元宽度是4 * 3单元宽度的两倍。理想情况下,我希望网格宽度调整。它应该只是columnWidth * numOfColumns。

下面我的xml的宽度为175px,我认为这是造成这种情况的原因。当我把它设为wrap_content时,它会占用屏幕的整个宽度并忽略我的两个填充视图。

有人可以帮忙吗? 感谢

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:background="#C8C8C8"
        android:orientation="horizontal">

    <View
            android:background="#C8C8C8"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"/>

    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/grid_view"
              android:background="#FF000000"
              android:layout_width="175px"
              android:layout_height="wrap_content"
              android:numColumns="5"
              android:columnWidth="35dp"
              android:verticalSpacing="1dp"
              android:horizontalSpacing="1dp"
            />
    <!--android:layout_width="wrap_content"-->

    <View
            android:background="#FFC8C8C8"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"/>
</LinearLayout>

为了澄清我之后的事情。

上半部分包含一个理想的中心网格。 单元格宽度应相同(理想情况下高度相同,因此为正方形) 在上面的LinearLayout下面有一个列表,如果网格占用太多空间(但不应占用超过50%的屏幕),它应该变小;

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要将grid_view的宽度设置为wrap_contentcenter_horizontal = "true",而不是制作适配器,并在getView()中将单元格宽度和高度设置为固定值方法(从dp计算),之后您将更改代码中的单元格数 - 网格视图将更改其宽度以适合单元格数*每个单元格的宽度

//cellWidth = width of each cell including paddings
//gridRowsNumber = number of cells in width
//gridColsNumber = number of cells in height
// in activity's of fragment's onCreate();
gridView.getLayoutParams().width = cellWidth * gridRowsNumber;
gridView.getLayoutParams().height = cellWidth * gridColsNumber;

布局

<GridView
    android:id="@+id/grid_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:background="@android:color/white"
    android:numColumns="5"
    android:scrollbars="none">
</GridView>
适配器中的

public View getView (int position, View convertView, ViewGroup parent) 
{
    ...
    holder.cellView.getLayoutParams().height = cellWidth;
    holder.cellView.getLayoutParams().width = cellWidth;
    ...
}