Перекрытие строк GridView: как сделать так, чтобы высота строки соответствовала самому высокому элементу?

Как и этот предыдущий человек , у меня есть нежелательное перекрытие между элементами GridView:

GridView items overlapping

Обратите внимание на текст в каждом столбце, кроме крайний правый.

Я отличаюсь от предыдущего вопроса тем, что мне не нужна постоянная высота строки . Я хочу, чтобы высота строки изменялась до , чтобы разместить самое высокое содержимое в каждой строке для эффективного использования пространства на экране.

Глядя на исходный код GridView (не официальная копия, но kernel.org все еще не работает), мы можем увидеть в fillDown () и makeRow (), что последний просмотренный View является "ссылкой" view ": высота строки устанавливается от высоты этого View, а не самого высокого. Это объясняет, почему самый правый столбец в порядке. К сожалению, GridView плохо настроен для того, чтобы исправить это наследованием. Все соответствующие поля и методы являются частными.

Итак, прежде чем я пойду по проторенному раздутому пути «клонировать и владеть», есть ли здесь уловка, которую мне не хватает? Я мог бы использовать TableLayout, но для этого мне потребуется numColumns = "auto_fit" я сам (так как я хочу, например, только один длинный столбец на экране телефона), и это также не будет AdapterView, которым, похоже, и должно быть.

Редактировать: фактически, клонировать и владеть здесь нецелесообразно. GridView зависит от недоступных частей своих родительских и дочерних классов и приведет к импорту не менее 6000 строк кода (AbsListView, AdapterView и т. Д.)

43
задан Community 23 May 2017 в 11:46
поделиться