ActionBar覆盖与GridView填充或自定义GridView显示整个第一个图像?

时间:2013-03-24 06:09:13

标签: android gridview android-actionbar customization padding

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

现在,您只能看到第一张图片的一半,因为ActionBar会将其减半。

如何在GridView内部添加填充,以便以可以看到整个第一张图像的方式进行初始化?或者还有另一种方式吗?例如,我将如何扩展GridView以创建一个在前端具有内置可配置动态间隙的网格?

example

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

编辑:只要用户以特定级别向下滚动或超过某个级别,我就隐藏ActionBar

3 个答案:

答案 0 :(得分:4)

尝试将android:layout_marginTop="?android:attr/actionBarSize"添加到GridView的父级,或GridView本身(如果没有)。

这会将您的布局向下推,使其位于ActionBar

之下

修改

您可能需要考虑ListView而不是GridView。原因是,您可以通过创建假标头然后调用ListView.addHeaderView轻松实现该效果。你不能对GridView做同样的事情。您所谈论的内容绝对可以通过GridView完成,但它需要您对其进行子类化并对其进行相当多的修改。

标题

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

答案 1 :(得分:4)

使用活动或片段中的ViewTreeObserver.OnGlobalLayoutListener来确定GridView将显示的列数(假设它根据屏幕大小和方向而有所不同),然后在{{1}中使用该数字实现。在Adapter中,如果getView()小于列数,则返回一个高度与操作栏匹配的空视图,否则会像平常一样绑定数据。

有一个很好的例子可以完全满足您在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

答案 2 :(得分: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:paddingTop android:clipToPadding 。 在我的应用程序中,当我使用上面的gridview打开一个活动时,第一行是完全可见的。然后,当我向下滚动时,ActionBar会隐藏,并且gridview将填满所有屏幕。