12

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

左:广告(蓝色)覆盖部分 GridView 元素(橙色); 右:广告覆盖了 GridView 底部的空间 左:广告(蓝色)覆盖部分 GridView 元素(橙色);右:广告覆盖了 GridView 底部的空间

相同的方法,但底部有空间

例如,它会是什么样子,只是想象空间在底部,而不是在顶部。

到目前为止,我尝试使用底部的填充和边距变量,但它们不是解决问题的正确变量。我还搜索了stackoverflow,发现了一些类似的问题,例如:在 GridView 或 ListView 的底部添加额外的空间,或者:在 Android 中向多列 GridView 添加页脚视图?. 但是解决方案似乎不适合我的情况,而且我正在布局文件中而不是在源代码中寻找解决方案(如果有的话)。

非常感激你的帮助。

4

5 回答 5

29

要实现这一点,您需要为您的行为添加底部填充,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,因此禁用它非常重要。


奖励:这也是一个关于在或中使用clipToPadding参数的好链接:https : //plus.google.com/+AndroidDevelopers/posts/LpAA7q4jw9MListViewGridView

于 2014-09-11T13:46:21.273 回答
0

制作自定义 gridview 并在 getview() 方法中,使用创建所需空间的视图。

于 2014-09-11T13:39:38.257 回答
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>
于 2014-09-11T14:07:16.620 回答
0

要获得以下结果 GridView,按钮上方有一个空格

<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="@+id/your_id"

于 2017-09-22T09:19:47.000 回答
-3
<GridView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:marginBottom="50dp"
    android:clipToPadding="false"/>
于 2014-09-11T13:54:06.623 回答