两个gridView在android中有一个滚动

时间:2015-04-21 03:51:27

标签: android gridview

在一项活动中,我需要两个GridView,每个GridView都需要尽可能多的高度。 gridview没有单独的滚动条,但它们只有一个滚动条。 我试过这样的事情。

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<GridView
       android:id="@+id/gridView1"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"  //as much height as it needs
       android:background="#9C5353"
       android:gravity="center"
       android:horizontalSpacing="20dp"
       android:numColumns="2"
       android:layout_weight="1"
       android:scrollbars="none"
       android:stretchMode="columnWidth"
       android:verticalSpacing="20dp" >      
       </GridView>


    <GridView 
    android:id="@+id/gridView2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"   //as much height as it needs
    android:scrollbars="none"
    android:numColumns="1"
    android:layout_weight="1"
    android:horizontalSpacing="20dp"
    android:verticalSpacing="20dp"
    android:gravity="center"
    android:stretchMode="columnWidth" > 
    </GridView>

</LinearLayout>

我尝试了很多次,但无法得到任何解决方案。 请任何人都可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你可以设置 GridView 固定,并使用 ScrollView 包含它们

public class FixedGridView extends GridView {

public FixedGridView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

public FixedGridView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public FixedGridView(Context context) {
    super(context);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(
            Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);

}

}

答案 1 :(得分:1)

根据tesla1984的回答,这是我完整的工作代码。它按预期工作:

  • 创建一个名为FlexGridView的新类,如下所示,并将其保存在项目内的已知位置。 (我使用了名为&#34; views&#34;)的文件夹

    package your.project.id.views;
    
    public class FixedGridView extends GridView {
    
      public FixedGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
      }
    
      public FixedGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
    
      public FixedGridView(Context context) {
        super(context);
      }
    
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
      }
    }
    

然后,在您的XML上,执行以下操作:

  <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <your.product.id.views.FixedGridView
                android:id="@+id/gridViewPublic"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:numColumns="1"
                android:stretchMode="columnWidth"
                android:horizontalSpacing="10"
                android:verticalSpacing="10"
                android:background="@color/transparent_color" />
            <your.product.id.views.FixedGridView
                android:id="@+id/gridViewPrivate"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10"
                android:layout_marginBottom="10"
                android:numColumns="2"
                android:stretchMode="columnWidth"
                android:horizontalSpacing="10"
                android:verticalSpacing="10"
                android:background="@color/transparent_color" />
        </LinearLayout>

  </ScrollView>