2011-04-26 37 views

回答

32

对于GridView,不支持页眉或页脚视图,很抱歉。

+14

任何其他的把戏,可以工作? 我想在gridview顶部显示一些细节,我希望这些信息可以和gridview一起滚动。 任何帮助,将不胜感激。 :) – necixy 2011-04-26 13:39:50

+0

@Guru:对不起,我不知道的东西,将很容易对这项工作。例如,你不能在'ScrollView'中放置'GridView'。 – CommonsWare 2011-04-26 14:25:40

1

为什么不改变第一行单元格的外观?如果你知道有多少列,你知道有多少项目将出现在标题=列数。它适用于我

+0

不适用于灵活的色谱柱编号。 – manmal 2011-11-14 15:20:24

4

你必须使用ListView,然后使列表中的每一行看起来像它实际上是一排网格。所以,如果你有一个3列的网格,你会为ListView制作一个3列的布局。然后你必须修改适配器的某些方面以使其工作,以便每个ListView行实际上代表3行数据 - 所以你知道,getCount()/ 3类型的东西。

+0

通过使用HeaderViewListAdapter来包装现有的适配器,您可以完成一些为您完成的工作。如果你看看[出处](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/HeaderViewListAdapter.java)这是相当明显的如何使用它。 – MarkDaniel 2012-11-19 11:43:42

-2
<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" 
       android:layout_height="fill_parent" android:orientation="vertical"> 

    <com.test.Breadcrumbs android:layout_width="fill_parent" android:layout_height="100dp" /> 

    <GridView 
      android:id="@+id/grid" 
      android:numColumns="auto_fit" 
      android:gravity="center" 
      android:stretchMode="columnWidth" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:verticalSpacing="10dp" 
      android:horizontalSpacing="10dp"> 
    </GridView> 

</LinearLayout> 

和面包屑:

public class Breadcrumbs extends LinearLayout { 

    public Breadcrumbs(final Context context, final AttributeSet attrs) { 
     super(context, attrs); 

     final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     layoutView = inflater.inflate(R.layout.breadcrumbs, this, true); 

工作正常,滚动电网工程,以及。

+2

这与@AntonChikin的答案相同吗?具体来说,你的Breadcrumbs保持固定在顶部,而网格在它们下面滚动的权利?这里的目标是在与网格一起滚动的网格顶部加入一个标题。 – dokkaebi 2012-11-28 00:28:08

+0

这不是问题的时候,我们想报头通过 – 2013-09-18 08:14:20

5

你可以使用它。当您到达/离开最后一个项目时,页脚出现/隐藏在网格的底部。它实际上并没有滚动,但我几乎没有注意到其中的差异。

在您的活动/片段的onCreate/onCreateView您的OnScrollListener添加到GridView:

.... 
    GridView gridview = (YMAnimatedGridview) v.findViewById(R.id.my_gridview); 
    gridview.setAdapter(adapter); 
    final View footerView = mainView 
      .findViewById(R.id.my_grid_footer_view); 
    gridview.setOnScrollListener(new GridView.OnScrollListener() { 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, 
       int visibleItemCount, int totalItemCount) { 

       if (firstVisibleItem + visibleItemCount == totalItemCount) { 

        // last item in grid is on the screen, show footer: 
        footerView.setVisibility(View.VISIBLE); 

       } else if (footerView.getVisibility() != View.GONE) { 

        // last item in grid not on the screen, hide footer: 
        footerView.setVisibility(View.GONE); 
       } 
      } 

     @Override 
     public void onScrollStateChanged(AbsListView view, 
       int scrollState) { 
     } 
    }); 

您的布局看起来应该像下面。注意gridview中的layout_weight(和layout_height)参数,当页脚变为可见时,需要为页脚创建正确的空间。

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <GridView 
     android:id="@+id/my_gridview" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:columnWidth="160dp" 
     android:gravity="center_horizontal" 
     android:horizontalSpacing="12dp" 
     android:numColumns="auto_fit" 
     android:layout_weight="1" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="6dp" /> 

    <TextView 
     android:id="@+id/my_grid_footer_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:layout_marginBottom="8dp" 
     android:orientation="horizontal" 
     android:visibility="gone" 
     android:text="footer text here" > 
    </TextView> 
</LinearLayout> 
4

如何检查你的适配器“0”指标元素?您可以膨胀第一个自定义视图。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
      if(view==null){ 
       if(position==0){ 
         // ...inflate header view 
       }else{ 
         // ...do as usual 

没有测试过,但应该工作。

25

有一个相当不错的实现GridView控件的与谷歌照片应用程序报头的支持,因为它是开源软件的代码,你可以把它当作是或把它作为自己实现的引用: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.3_r2.1/com/android/photos/views/HeaderGridView.java

基本思路是很简单 - WrapperAdapter通过增加列数的项目来创建一个虚假的行,然后返回该项目的标题视图。

+0

作品滚动得非常好,非常感谢! 只需要注意,它会向阵列适配器添加一个附加项目。 – 2014-01-17 11:58:56

+0

谢谢!快速滚动有一个问题,但是我在简单的修改之后修改了它:HeaderViewGridAdapter在HeaderGridView.java中扩展了BaseAdapter。 – FeelGood 2014-04-25 17:15:08

+7

为什么Google坚持让组件在自己的应用程序中应该隐藏核心? – 2014-05-06 13:14:47

2

您可以使用AsymmetricGridView并指定页眉/页脚一个更大的行跨度,这样他们就采取整行。

+1

其实这个可能更容易完成这个工作:https://github.com/felipecsl/AbsListViewHelper – 2014-08-20 22:47:30

5

enter image description here

示例代码:

GridViewWithHeaderAndFooter gridView = (GridViewWithHeaderAndFooter) v.findViewById(R.id.ly_image_list_grid); 

LayoutInflater layoutInflater = LayoutInflater.from(this); 
View headerView = layoutInflater.inflate(R.layout.test_header_view, null); 
View footerView = layoutInflater.inflate(R.layout.test_footer_view, null); 
gridView.addHeaderView(headerView); 
gridView.addFooterView(footerView); 

摇篮建设: 。

compile 'in.srain.cube:grid-view-with-header-footer:1.0.12' 
1

有一种方法可以在不使用库或任何东西的情况下完成所需的功能。

编辑:只需借用谷歌的HeaderGridView实现,请参阅Here
您也可以自定义页脚。下面的建议太复杂了,需要更多的调整。 没有进入具体的细节,你需要做的就是这个。

1)子类的GridView
2)重写onScrollChanged
3)计算的偏移量,每次它滚动
4)设置parentView(查看包含headerView和GridView)平移y以-offset。(view.setTranslationY (-offset)。还有一个if语句,一旦它达到一定的偏移量,它将停止滚动。
5)显然你想构建这个井,所以你的gridview可以有一个像attachToGridview(视图视图)的方法。我有这个工作的完整实现。
上得到弥补,因为GridView控件具有了意见得到回收的错误帮助,请参见Scroll offset of GridView

相关问题