4

我有一个里面有 GridView 的活动。ActionBar 设置为覆盖模式。

现在,您只能看到第一张图像的一半,因为 ActionBar 将其切成两半。

如何向 GridView 的内部添加填充,以便它以您可以看到整个第一张图像的方式进行初始化?还是有其他方法?例如,我将如何扩展 GridView 以创建一个在前面具有内置可配置动态间隙的视图?

例子

示例(虽然 ListView 而不是 GridView):reddit 是有趣的应用程序:https ://play.google.com/store/apps/details?id=com.andrewshu.android.reddit

编辑:每当用户以特定速率向下滚动或超过特定级别时,我都会隐藏 ActionBar 。

4

3 回答 3

4

Try adding android:layout_marginTop="?android:attr/actionBarSize" to the parent of your GridView, or the GridView itself if it doesn't have one.

This will push your layout down so that it rests below the ActionBar.

Edit

You may want to conside using a ListView instead of a GridView. Reason being, you can easily achieve that effect by creating a fake header and then calling ListView.addHeaderView. You can't do the same with a GridView. What you're talking about can definitely be done with a GridView, but it will require you to subclass it and modify it quite a bit.

Header

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?android:attr/actionBarSize" />
于 2013-03-24T06:34:12.323 回答
4

在您的 Activity 或 Fragment 中使用 aViewTreeObserver.OnGlobalLayoutListener来确定您将显示的列数GridView(假设它根据屏幕大小和方向而变化),然后在您的Adapter实现中使用该数字。在getView()中,如果position小于列数,则返回一个高度与操作栏匹配的空视图,否则像往常一样绑定数据。

在 Google 的“高效显示位图”示例应用程序中,有一个很好的示例可以完全满足您的要求:https ://developer.android.com/training/displaying-bitmaps/display-bitmap.html

以下是相关源代码: https ://android.googlesource.com/platform/development/+/master/samples/training/bitmapfun/src/com/example/android/bitmapfun/ui/ImageGridFragment.java

于 2013-03-27T21:57:26.517 回答
3

让 ActionBar 处于覆盖模式,以下对我有用:

<GridView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="?android:attr/actionBarSize"
        android:clipToPadding="false"
        android:numColumns="auto_fit"
        android:columnWidth="120dp"
        android:verticalSpacing="8dp"
        android:horizontalSpacing="8dp"
        android:stretchMode="columnWidth"
        android:gravity="center"
        android:id="@+id/gridLibrary" />

这里最重要的几行是:android:paddingTopandroid:clipToPadding。在我的应用程序中,当我使用上面的 gridview 打开一个活动时,第一行是完全可见的。然后,当我向下滚动时,ActionBar 隐藏,gridview 填满了整个屏幕。

于 2014-09-25T16:11:48.907 回答