Android GridView 文本重叠

Android GridView Text overlapping

我现在尝试了两天来创建一个工作 GridView,但它不会工作,这是它的样子:

你看,我的问题是文字重叠。 我已经发现,GridView 行的高度由最后一项设置。 我的 XML 看起来是这样的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Startbildschirm">


    <GridView
        android:numColumns="2"
        android:gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:horizontalSpacing="5dp"
        android:verticalSpacing="5dp"
        />
</RelativeLayout>

我解决此问题的想法是获取一行中最长视图的高度,然后将其设置为最后一个视图的 MinHeight。我的问题是,只有在视图可见时才会保存视图,因此在向下和向上滚动时高度再次不同。 有人知道如何解决这个问题吗?

你的问题在于 gridViewItem 布局(你在适配器中膨胀的布局) 不是 gridview,我相信它有

android:layout_height="wrap_content" 

某处, 只需将布局高度设置为具有固定数量的 dp

(android:layout_height ="10dp" for instance) 

那你就不会有问题了。

根据评论编辑: 2个选项 - 1)如果列表不是很长,只需使用 tableLayout 并填充代码中的行,(缺点是它不会回收视图,因此比 gridview 占用更多内存)但它应该得到你想要的效果(每行使用包装内容和调整到文本的长度)

2) 适配器正在使用某种列表 - 运行 在使用网格并获取最大高度之前通过它,现在创建一个自定义适配器,在你的 getView 中使用它(最大高度) () 到 return 合适的视图(所有视图都足够大以达到最大长度)

我认为,解决方案描述于:http://obduro.nl/blog/the-solution-of-android-gridview-overlap/

它被报告为一个错误:https://code.google.com/p/android/issues/detail?id=75766

另一种解决方案是将单元格的父级保持为 wrap_content,但将 TextView 限制为例如 2 或 3 行 android:lines="2" 这样网格视图中的所有视图都将具有相同的大小。