我需要帮助在其底部的GridView中添加一个空格。此空间应位于GridView的最后一个元素内部。这个空间不应该像下一个元素的边距一样工作,当用户滚动到GridView的底部时,它应该只是可见的。原因是广告横幅部分覆盖了GridView的底部。除了这个障碍,用户仍然应该能够看到GridView的全部内容,这就是为什么需要GridView底部的空间。
left:ad(蓝色)覆盖部分GridView元素(橙色); right:ad覆盖GridView底部的空间
示例,看起来如何,只要想象空间位于底部,而不是顶部。
到目前为止,我尝试使用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?。但解决方案似乎不适合我的情况,而且我在布局文件中搜索解决方案而不是源代码内部(如果有任何内容)。
非常感谢您的帮助。
答案 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
底部留下持久的空白区域,因此禁用它非常重要。
奖金:这里也是关于在clipToPadding
或ListView
中使用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"/>