【发布时间】:2012-07-20 14:18:30
【问题描述】:
有很多类似的问题,但大多数都是用不清楚的英语写的或者没有不完整的解决方案,所以让我试着准确地说一下我想要的行为:
用户看到一个 GridView。如果 GridView 中的项目足够大,以至于用户必须滚动才能看到更多的 gridview,那么用户最初应该看不到任何按钮。当用户滚动并到达 gridview 的底部时,他应该会看到一个可以点击的按钮。
我怎样才能在 XML 中得到它?到目前为止,我尝试过的解决方案都是:
1) 将按钮覆盖在视口底部的gridview 顶部。该按钮始终可见。
2) 创建一个显示按钮的“页脚栏”。该按钮始终可见。
这些都不是我想要的,因为在用户滚动到 gridview 的底部之前,按钮不应该是可见的。
(您几乎可以认为gridview 在按钮所在的底部有一个额外的行)
7/23 更新:
这是当前的迭代。 mButton.getMeasuredHeight() 在 onMeasure 中调用时为 0。尝试在 init() 中使用 setWidth() / setHeight() 设置宽度或高度不会改变这一点。我需要在哪里设置按钮的宽度/高度?
另请注意,应用程序随后会在网格加载后立即崩溃。不知道为什么。
public class MyGridView extends GridView {
private Button mButton;
public MyGridView(Context context) {
super(context);
init(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
mButton = new Button(context);
mButton.setText("test test test");
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
int buttonLeft = left;
int buttonTop = top + this.getMeasuredHeight();
int buttonRight = left + mButton.getMeasuredWidth();
int buttonBottom = bottom + getMeasuredHeight() + mButton.getMeasuredHeight();
mButton.layout(buttonLeft, buttonTop, buttonRight, buttonBottom);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth, parentHeight + mButton.getMeasuredHeight());
}
}
【问题讨论】:
-
我不认为你可以用
GridView做到这一点,但你可以用ListView让它工作。 -
简短的回答是你不能不修改/扩展 GridView。
标签: android layout button gridview