У меня есть GridView с ячейками переменной высоты. Я хочу, чтобы строка была выше, чем вся самая большая ячейка в строке. Я могу настроить высоту ячеек, чтобы быть последовательной в строке, но я не могу установить высоту GridView и изменить ее.Android Set GridView Height
Другая проблема заключается в том, что этот GridView находится в ScrollView, поэтому наличие полосы прокрутки не может быть и речи.
Это проблема, поскольку способ GridView определяет высоту всей сетки - это взять первую ячейку и умножить ее на количество строк. Это очевидная проблема, если строки могут иметь разную высоту. Например:
Я попробовал множество способов, чтобы обновить его, но я уверен, что я что-то просто не хватает. Я пытаюсь сделать обновление в ViewTreeObserver, поэтому я знаю, что GridView сделал так, что мои вычисления корректны (и они есть). Код:
ViewTreeObserver treeListener = mGridView.getViewTreeObserver();
treeListener.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
mGridView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
else {
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
// Calculate the new height we want for the GridView
int newHeight = determineCellHeight(mGridView, mNumberOfColumns, mRows);
ViewGroup.LayoutParams params = mGridView.getLayoutParams();
params.height = newHeight;
mGridView.setLayoutParams(params);
// Have tried all of these too!!!
// mAdapter.notifyDataSetChanged();
// mGridView.requestLayout();
// mGridView.invalidateViews();
// mGridView.refreshDrawableState();
// mGridView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, newHeight + 10));
// mGridView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, newHeight + 10));
// View lastChild = mGridView.getChildAt(mGridView.getChildCount() - 1);
// mGridView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, lastChild.getBottom()));
// mAdapter.notifyDataSetChanged();
// mGridView.invalidateViews();
// mGridView.setMinimumHeight(newHeight);
// mGridView.requestLayout();
// mGridView.refreshDrawableState();
}
});
Я начинаю задаваться вопросом, если это еще возможно, хотя многочисленные Stackflows кажется, предполагают, что это ...