如何动态更改Android中的gridview行和列

时间:2015-03-16 13:30:26

标签: android gridview

我在我的活动中使用Gridview。我还有一个CustomGridAdpater来显示每个网格上的图像和textview。

启动我的活动。我需要根据值动态创建网格行和列。

count = 4   2x2 grid
count = 9   3x3 grid
count = 16  4x4 grid

请告诉我如何实现此功能。

我的Gridview:

 <GridView
        android:id="@+id/Favorite_GridView"
        android:layout_width="wrap_content"
        android:layout_height="300dp"
        android:layout_marginTop="10dp"
        android:layout_below="@id/Date_RelativeLayout"           
        android:listSelector="@drawable/gridview_norecode_selector"
        android:numColumns="auto_fit"                  />

我已将列设为android:numColumns =“auto_fit” 所以它默认为2列。

我也有自定义GridAdapter

    <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/grid_color_selector" >
<ImageView
    android:id="@+id/image"
   android:layout_width="100dp"
    android:layout_height="100dp"
   android:layout_marginRight="10dp"
   />        
<TextView
    android:id="@+id/Day_TextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/gridview_line_norecord"
    android:gravity="center"
    android:textColor="@android:color/white"
    android:textSize="24sp"
    android:text="Hello" />

我也在我的活动中使用了这个功能

  if(newList.length > 4)
    {
        mgridView.setColumnWidth(350);

    }

但我担心在活动中手动提供值。因为我觉得它可能会为横向模式提供异常的UI。

请帮我解决。

1 个答案:

答案 0 :(得分:0)

hoomi的评论是对的。

使用RecyclerView和GridLayoutManager。 在.xml中

<android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:numColumns="2"
            android:horizontalSpacing="@dimen/gridview_horizontal_spacing"
            android:verticalSpacing="@dimen/gridview_vertical_spacing"
            android:id="@+id/recyclerView" />

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

gridview.setNumColumns(number);