GridView根据行数不同的列数

时间:2014-03-03 09:58:32

标签: android android-gridview

我正在尝试这2天,我正在尝试为第一行中有两列的视图创建UI,然后在第二行中有三列,而在第三行再创建两列,依此类推......我也有实现动态数据(意味着行数/列数是动态的)。enter image description here

我没有任何想法实现这种类型的视图。我也尝试了stragged网格视图,但这是用于动态视图..但在这里我有静态2,3,2,3 ...列为1,2,3,4..rows。请帮助我。任何教程都会非常有用。

1 个答案:

答案 0 :(得分:0)

最后我已经解决了这个问题。我尝试过Raghunandan和user3278416的建议。并且在运行时除了表格布局之外做了所有的事情。这是xml文件:

 <ScrollView  android:layout_width="match_parent"
    android:layout_height="match_parent">
<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/table_layout"
     >

两个布局一个用于小布局(第二行),一个用于大布局(第一行):

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="130dp"
android:layout_height="160dp"
android:layout_margin="3dp"
android:background="@drawable/big_product_bg" >
<ImageView
    android:id="@+id/img_offersrowlayout"
    android:layout_width="120dp"
    android:layout_height="80dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:scaleType="fitXY"
    android:src="@drawable/img_bydefault" />

<TextView
    android:id="@+id/txt_title_offerrowlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/img_offersrowlayout"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="8dp"
    android:gravity="center_horizontal"
    android:singleLine="true"
    android:text="BenQ Digital camera"
    android:textColor="@color/green_app"
    android:textSize="15dp"
    android:textStyle="bold" />

小的:

<RelativeLayout
android:layout_width="90dp"
android:layout_height="160dp"
android:layout_margin="3dp"
android:background="@drawable/big_product_bg" >

<ImageView
    android:id="@+id/img_offersrowlayout"
    android:layout_width="90dp"
    android:layout_height="80dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:scaleType="fitXY"
    android:src="@drawable/img_bydefault" />

<TextView
    android:id="@+id/txt_title_homesmallrowlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/img_offersrowlayout"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="8dp"
    android:gravity="center_horizontal"
    android:singleLine="true"
    android:text="BenQ Digital camera"
    android:textColor="@color/green_app"
    android:textSize="15dp"
    android:textStyle="bold" />

现在的Java代码:

 int leftMargin_small=2;
int topMargin_small=5;
int rightMargin_small=2;
int bottomMargin_small=5;

   int j = 0;
   while (Show.size()>j) {

try {
     LayoutInflater inflater =       (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     TableRow.LayoutParams param = new TableRow.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT, 1.0f);
     param.setMargins(leftMargin_small, topMargin_small, rightMargin_small, bottomMargin_small);
     LinearLayout layout1 =  new LinearLayout(getApplicationContext());
     TableRow.LayoutParams param_layout = new TableRow.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT, 1.0f);
     layout1.setLayoutParams(param_layout);
View question = inflater.inflate(R.layout.offers_rowlayout, null);

question.setLayoutParams(param);
//question.setId(pos);
TextView title = (TextView) question.findViewById(R.id.txt_title_offerrowlayout);
title.setText(""+">>"+Show.get(j).get("name"));

View question1 = inflater.inflate(R.layout.offers_rowlayout, null);
//question.setId(pos);
question1.setLayoutParams(param);
TextView title1 = (TextView) question1.findViewById(R.id.txt_title_offerrowlayout);
title1.setText(""+">>"+Show.get(j+1).get("name"));



View question_small = inflater.inflate(R.layout.home_row_small_layout, null);
//question.setId(pos);
question_small.setLayoutParams(param);
TextView title_small = (TextView) question_small.findViewById(R.id.txt_title_homesmallrowlayout);
title_small.setText(""+">>"+Show.get(j).get("name"));

View question1_small = inflater.inflate(R.layout.home_row_small_layout, null);
//question.setId(pos);
question1_small.setLayoutParams(param);
TextView title1_small = (TextView) question1_small.findViewById(R.id.txt_title_homesmallrowlayout);
title1_small.setText(""+">>"+Show.get(j+1).get("name"));

View question2_small = inflater.inflate(R.layout.home_row_small_layout, null);
//question.setId(pos);
question2_small.setLayoutParams(param);
TextView title2_small = (TextView) question2_small.findViewById(R.id.txt_title_homesmallrowlayout);
title2_small.setText(""+">>"+Show.get(j+2).get("name"));
       if (gett) {
      TableRow tr = new TableRow(getApplicationContext());

        TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.MATCH_PARENT,1);
      //  trParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trParams);
       layout1.addView(question);
       layout1.addView(question1);
       tr.addView(layout1);
    tablee.addView(tr);
   gett = false;
        j = j+2;
}
else
{
      TableRow tr = new TableRow(getApplicationContext());

        TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.MATCH_PARENT,1);

        layout1.addView(question_small);
        layout1.addView(question1_small);
        layout1.addView(question2_small);
        tr.addView(layout1);
    tablee.addView(tr);
    gett = true;
    j = j+3;
}

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


  }

这里显示的是hashmap类型的arraylist,tablee是我在Xml文件中创建的tablelayout对象。