【问题标题】:Adding header/footer to GridView向 GridView 添加页眉/页脚
【发布时间】:2016-12-14 17:43:20
【问题描述】:

我很难设计一个带有如下页眉和页脚的 GridView 布局:

我所做的是,创建一个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 中是不对的,但是客户要求这种布局..

【问题讨论】:

  • 为什么不在layout里加gridview,加上下两个view
  • 页眉和页脚在滚动时不会被包含进来
  • @DanielJohnGomez,你的问题解决了吗?
  • @DanielJohnGomez 有什么解决办法吗?

标签: android android-layout


【解决方案1】:

这是一个很好的起点:

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();

【讨论】:

    【解决方案2】:

    看看这个希望它能解决你的问题

        <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>
    

    【讨论】:

    • 同样,如果我这样做,滚动时将不包含页眉和页脚
    • 我在它工作正常之前尝试过这个,给 gridview 赋予 0.97 的权重它会按照你的意愿工作。
    【解决方案3】:

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

    【讨论】:

    • 这个答案根本没有帮助
    猜你喜欢
    • 2014-08-17
    • 2014-12-14
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多