Я знаю, что это старый случай, но у меня была похожая проблема, когда мой ScrollView
содержал несколько LinearLayout
с, которые, в свою очередь, содержали заголовок и GridView
.
В основном я сделал разделы по категориям с заголовками, содержащими изображения, принадлежащие к этой категории.
GridView должен был иметь гибкую высоту.
Я нашел много ответов о переопределении onMeasure (), но оно работало только на некоторых устройствах, а не на всех. Высота в конечном итоге будет равна 1, или 3, или просто 0, отображая только несколько пикселей изображения.
StretchingGridView класс
Я переопределил метод drawableStateChanged()
этим кодом, вдохновленным решением @ Karitsa:
@Override
public void drawableStateChanged() {
getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
getViewTreeObserver().removeOnGlobalLayoutListener( this );
View lastChild = getChildAt( getChildCount() - 1 );
if (lastChild != null) {
int height = Math.max(lastChild.getBottom(), getColumnWidth());
float child = getAdapter().getCount();
float col = getNumColumns();
int rows = (int) Math.ceil(child / col);
height = rows * getColumnWidth() + (getHorizontalSpacing() * rows-1);
setLayoutParams( new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, height ) );
}
}
});
}
Примечание: мой GridView использует квадратные изображения, поэтому я основываю высоту на их ширине. Я не думаю, что это хорошо работает с гибкой высотой элементов сетки.