将页眉/页脚添加到GridView

时间:2014-04-23 09:00:28

标签: android android-layout

我很难设计带有页眉和页脚的GridView版面,如下所示:

layout

我做的是,只使用一个ListView项创建GridView,然后使用addHeaderView()addFooterView()添加页眉/页脚。问题是GridView没有显示整个项目。我已使用以下内容禁用GridView滚动:

  gridview.setOnTouchListener(new View.OnTouchListener(){

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_MOVE){
                    return true;
                }
                return false;
            }

        });

有没有办法让GridView显示所有项目?我已经尝试将GridView的高度设置为wrap_content,但它不起作用。以下是GridView的布局:

<GridView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="2"
    android:background="@color/main_gray"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center">

</GridView>

我知道将gridview放在listview中是不对的,但是客户端要求这种布局..

3 个答案:

答案 0 :(得分:0)

这是一个很好的起点:

https://android.googlesource.com/platform/packages/apps/Gallery2/+/idea133/src/com/android/photos/views/HeaderGridView.java

这个类非常好地处理标题,与ListView完全相同。

您应该设法添加页脚处理,但它更复杂一些,因为您必须根据Gridview中的元素数量放置占位符。 由于Gridview行的高度取决于其最后一个元素的高度,因此您必须获得GridView

的最后一项的高度
convertView.setVisibility(View.INVISIBLE);
convertView.setMinimumHeight(lastItemHeight);

我用它来计算最后一个项目的高度。它可能不是最佳的,但它适用于我的用例:

View v = mAdapter.getView(adjPosition, convertView, parent);

//measure last item height for placeholders before footer views
v.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
                lastItemHeight = v.getMeasuredHeight();
lastItemHeight = v.getMeasuredHeight();

答案 1 :(得分:-1)

检查这一点希望它能解决你的问题

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:background="#AAFFDD" >
    </LinearLayout>

    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.97"
        android:background="@color/main_gray"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="2"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp" >
    </GridView>

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:background="#FADFAE" >
    </LinearLayout>

</LinearLayout>

答案 2 :(得分:-1)

gridview类没有提供方法addheaderview()和addfooterview(), 您可以采用垂直方向的线性布局,并可以通过给布局充气添加自定义标题,然后在该页脚视图后面膨胀gridview。