1

我有一个ListView,其中每一行都是一个GridLayout有两行的。我希望每个列表项至少有 48dp 高(推荐的新闻目标最小尺寸),因为每个都可以被按下,GridLayout如果它不展开它,我希望它在行中垂直居中。

为此,我将GridLayouta 放入内部FrameLayout,将 设置FrameLayout为 48dp 的最小高度,并将 设置layout_gravityGridLayout居中。如果我不使用FrameLayout并且只设置 的最小高度,那么由于' 的虚假空间分布GridLayout,我无法将整个东西很好地垂直居中。GridLayout

因此,使用FrameLayout给了我想要的结果,但在我的 XML 文件中生成了一个 Lint 警告,“这个 GridLayout 布局或其 FrameLayout 父级是无用的。” 显然它不是没用的,因为它排列正确,但是有没有更好的方法来做到这一点,我错过了?

这是我的 XML(我在 GridLayout 中删除了一堆 TextView,因为它们与这种情况无关):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="48dp"
>
<GridLayout
    android:layout_gravity="center"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:rowCount="2"
    android:useDefaultMargins="true"
>
    <TextView android:id="@+id/number"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="2dp"
        android:layout_rowSpan="2"
        android:minEms="1"
    />
    <TextView android:id="@+id/a"
        android:layout_gravity="center_vertical"
        android:layout_rowSpan="2"
        android:minEms="2"
    />
    <TextView android:id="@+id/b"
        android:layout_marginBottom="0dp"
        android:minEms="3"
    />
    <TextView android:id="@+id/c"
         android:layout_marginTop="0dp"
        android:minEms="3"
    />
    ...
</GridLayout>
</FrameLayout>
4

1 回答 1

0

除非您看到性能问题,否则我会保持这种状态。如果您遇到性能问题,这是因为额外的 FrameLayout(如果您直接使用 GridLayout,您可以知道问题是否消失),那么(并且只有这样)我会尝试直接修复 GridLayout。

如果是这样的话,那么我所知道的是 GridLayout 根据灵活性的原则分配多余的空间。如果该原则不足以消除歧义,那么您会看到它为最右边的列和底行提供多余空间的行为。我会尝试使用 row/col 属性以确保它了解如何均匀分布。您可以通过设置GridLayout 的子项(在您的情况下为 TextViews)的重力来控制它。尝试将它们设置为“中心”,看看是否有帮助。如果没有,更多信息请访问:

http://developer.android.com/reference/android/widget/GridLayout.html

于 2012-11-19T21:08:18.210 回答