似たような質問がたくさんありますが、ほとんどが不明瞭な英語で書かれているか、解決策が不完全です。
ユーザーには GridView が表示されます。GridView 内の項目が十分に大きいため、ユーザーがスクロールしてより多くのグリッドビューを表示する必要がある場合、ユーザーには最初はボタンが表示されません。ユーザーがスクロールしてグリッドビューの下部に到達すると、クリックできるボタンが表示されます。
これを XML で取得するにはどうすればよいですか? これまでに試した解決策は、次のいずれかになります。
1) ビューポートの下部にあるグリッドビューの上にボタンを重ねます。ボタンは常に表示されます。
2) ボタンが表示される「フッター バー」を作成します。ボタンは常に表示されます。
ユーザーがグリッドビューの一番下までスクロールするまでボタンが表示されないため、これらはどちらも私が望むものではありません。
(グリッドビューの下部にボタンが存在する余分な行があると考えることができます)
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());
}
}