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"
这样网格视图中的所有视图都将具有相同的大小。
我现在尝试了两天来创建一个工作 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"
这样网格视图中的所有视图都将具有相同的大小。