如何在GridView底部添加额外的空间

时间:2014-09-11 13:10:33

标签: android android-layout android-gridview banner-ads

我需要帮助在其底部的GridView中添加一个空格。此空间应位于GridView的最后一个元素内部。这个空间不应该像下一个元素的边距一样工作,当用户滚动到GridView的底部时,它应该只是可见的。原因是广告横幅部分覆盖​​了GridView的底部。除了这个障碍,用户仍然应该能够看到GridView的全部内容,这就是为什么需要GridView底部的空间。

left: ad (blue) covers part of GridView elements (orange); right: ad covers the space in the bottom of the GridView left:ad(蓝色)覆盖部分GridView元素(橙色); right:ad覆盖GridView底部的空间

same approach but with space at the bottom

示例,看起来如何,只要想象空间位于底部,而不是顶部。

到目前为止,我尝试使用Padding和Marging Variables for Bottom,但它们不是问题的正确变量。我还搜索了stackoverflow,我发现了一些类似的问题:Add extra space to bottom of a GridView or ListView或:Adding a footer View to a multi-column GridView in Android?。但解决方案似乎不适合我的情况,而且我在布局文件中搜索解决方案而不是源代码内部(如果有任何内容)。

非常感谢您的帮助。

5 个答案:

答案 0 :(得分:28)

要实现这一目标,您需要为GridView添加底部填充,但也需要禁用clipToPadding行为。请尝试以下XML代码:

<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="50dp"
    android:clipToPadding="false"/>

如果需要,您也可以从代码中执行此操作。好处是您可以在代码中动态计算偏移量:

gridView.setPadding(int left, int top, int right, int bottom);
gridView.setClipToPadding(false);

注意:如果不停用clipToPadding行为,您最终会在GridView底部留下持久的空白区域,因此禁用它非常重要。


奖金:这里也是关于在clipToPaddingListView中使用GridView参数的一个很好的链接:https://plus.google.com/+AndroidDevelopers/posts/LpAA7q4jw9M

答案 1 :(得分:0)

制作自定义gridview,在getview()方法中,使用视图制作你想要的空间。

答案 2 :(得分:0)

这是我到目前为止所做的:

在您的活动中:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid);

        final TextView txt = (TextView) findViewById(R.id.textView1);
        txt.setVisibility(View.GONE);

        final GridView grid = (GridView) findViewById(R.id.gridViewCustom);


        grid.setOnScrollListener(new OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                if((firstVisibleItem + visibleItemCount) == totalItemCount){//it means you are at the end of the gridview
                    txt.setVisibility(View.VISIBLE);
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 50);
                    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
                    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
                    params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

                    RelativeLayout.LayoutParams paramsGrid = (RelativeLayout.LayoutParams) grid.getLayoutParams();
                    paramsGrid.addRule(RelativeLayout.ABOVE, txt.getId());

                    txt.setLayoutParams(params);
                    grid.setLayoutParams(paramsGrid);

                }
            }
        });
    }

.XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

   <GridView
       android:id="@+id/gridViewCustom"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_above="@+id/textView1"
       android:layout_alignParentRight="true"
       android:layout_margin="4dp"
       android:columnWidth="80dp"
       android:gravity="center"
       android:numColumns="auto_fit"
       android:stretchMode="columnWidth" >
   </GridView>

   <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="50dp"
       android:layout_alignParentBottom="true"
       android:layout_alignParentLeft="true"
       android:layout_alignParentRight="true"
       android:text=""
       android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

答案 3 :(得分:0)

获得以下结果 GridView with a space above the button

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_submit"
        style="@style/Base.Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/gv_someGrid"
        android:layout_margin="10dp"
        android:layout_alignParentBottom="true"
        android:text="submit" />

    <GridView
        android:id="@+id/gv_someGrid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_above="@+id/btn_submit" />
</RelativeLayout>

诀窍是在该按钮底部声明Gridview然后添加约束layout_above =&#34; @ + id / your_id&#34;

答案 4 :(得分:-3)

<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:marginBottom="50dp"
    android:clipToPadding="false"/>