一个简单的问题:GridView是否可以像ListView一样具有页脚和标题?
在ListView
我用这个代码:
list.addHeaderView(headerView);
上gridview
工作时如何应对呢?
谢谢。
一个简单的问题:GridView是否可以像ListView一样具有页脚和标题?
在ListView
我用这个代码:
list.addHeaderView(headerView);
上gridview
工作时如何应对呢?
谢谢。
对于GridView
,不支持页眉或页脚视图,很抱歉。
你必须使用ListView,然后使列表中的每一行看起来像它实际上是一排网格。所以,如果你有一个3列的网格,你会为ListView制作一个3列的布局。然后你必须修改适配器的某些方面以使其工作,以便每个ListView行实际上代表3行数据 - 所以你知道,getCount()/ 3类型的东西。
通过使用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
<?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);
工作正常,滚动电网工程,以及。
这与@AntonChikin的答案相同吗?具体来说,你的Breadcrumbs保持固定在顶部,而网格在它们下面滚动的权利?这里的目标是在与网格一起滚动的网格顶部加入一个标题。 – dokkaebi 2012-11-28 00:28:08
这不是问题的时候,我们想报头通过 – 2013-09-18 08:14:20
你可以使用它。当您到达/离开最后一个项目时,页脚出现/隐藏在网格的底部。它实际上并没有滚动,但我几乎没有注意到其中的差异。
在您的活动/片段的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>
如何检查你的适配器“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
没有测试过,但应该工作。
有一个相当不错的实现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通过增加列数的项目来创建一个虚假的行,然后返回该项目的标题视图。
作品滚动得非常好,非常感谢! 只需要注意,它会向阵列适配器添加一个附加项目。 – 2014-01-17 11:58:56
谢谢!快速滚动有一个问题,但是我在简单的修改之后修改了它:HeaderViewGridAdapter在HeaderGridView.java中扩展了BaseAdapter。 – FeelGood 2014-04-25 17:15:08
为什么Google坚持让组件在自己的应用程序中应该隐藏核心? – 2014-05-06 13:14:47
你可以使用这个库,http://tonicartos.github.io/StickyGridHeaders/
,它允许您创建具有粘性(用于分组列表并保持头当前组可见的)头。您也可以关闭粘性功能。
您可以使用AsymmetricGridView并指定页眉/页脚一个更大的行跨度,这样他们就采取整行。
其实这个可能更容易完成这个工作:https://github.com/felipecsl/AbsListViewHelper – 2014-08-20 22:47:30
示例代码:
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'
有一种方法可以在不使用库或任何东西的情况下完成所需的功能。
编辑:只需借用谷歌的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。
任何其他的把戏,可以工作? 我想在gridview顶部显示一些细节,我希望这些信息可以和gridview一起滚动。 任何帮助,将不胜感激。 :) – necixy 2011-04-26 13:39:50
@Guru:对不起,我不知道的东西,将很容易对这项工作。例如,你不能在'ScrollView'中放置'GridView'。 – CommonsWare 2011-04-26 14:25:40