像以前的人一样,我在GridView项目之间有不必要的重叠:

请注意除最右边的列之外的每个列中的文本.
我与前一个问题的不同之处在于我不想要一个恒定的行高.我希望行高可以变化以适应每行中最高的内容,以有效利用屏幕空间.
查看GridView的源代码(不是权威副本,但kernel.org仍然是down),我们可以在fillDown()和makeRow()中看到最后一个View看到的是"引用视图":行的高度是从视图的高度,而不是最高的视图.这解释了为什么最右边的列没问题.不幸的是,GridView没有很好的设置让我通过继承来解决这个问题.所有相关领域和方法都是私人的.
所以,在我采取"克隆和拥有"这条破旧的臃肿路径之前,我在这里缺少一个技巧吗?我可以使用TableLayout,但这需要我自己实现numColumns="auto_fit"(因为我想在电话屏幕上只需要一个长列),它也不会是一个AdapterView,这应该是它应该是.
编辑:事实上,克隆和自己在这里不实用.GridView依赖于其父类和兄弟类的不可访问部分,并导致至少导入6000行代码(AbsListView,AdapterView等)
根据GridView行高度这个问题的接受答案,如果你......
"将LinearLayouts设置为某个特定高度,行将全部为高度."
这似乎不适用于我的情况.我有一个每行的布局文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="center_horizontal">
<ImageView
android:id="@+id/theimage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#ffff0000" />
<TextView
android:id="@+id/thename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
style="?icontext"
android:background="#ff00ff00"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这些包含在Gridview中,定义如下:
<GridView android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:columnWidth="100dp"
android:background="@color/background"
android:verticalSpacing="1dp"
android:horizontalSpacing="5dp" />
Run Code Online (Sandbox Code Playgroud)
这忽略了'android:layout_height ="200dp"',而是将行高设置为单元格的内容.
更糟糕的是,当我的TextView包裹到第二行时,第二行被下一行单元格遮挡.
我错过了什么?