Android XML布局备选方案(我的得到一个Lint警告)

Android XML布局备选方案(我的得到一个Lint警告),android,android-layout,Android,Android Layout,我有一个ListView,其中每一行都是一个GridLayout,有两行。我希望每个列表项的高度至少为48dp(建议按目标的最小大小),因为每个列表项都可以按,并且我希望GridLayout在行中垂直居中(如果它不展开) 为此,我将GridLayout放在FrameLayout内,将FrameLayout的最小高度设置为48dp,并将GridLayout的布局重力设置为中心。如果我不使用FrameLayout,而只是设置GridLayout的最小高度,那么我就无法使整个东西垂直居中,因为Grid

我有一个
ListView
,其中每一行都是一个
GridLayout
,有两行。我希望每个列表项的高度至少为48dp(建议按目标的最小大小),因为每个列表项都可以按,并且我希望
GridLayout
在行中垂直居中(如果它不展开)

为此,我将
GridLayout
放在
FrameLayout
内,将
FrameLayout
的最小高度设置为48dp,并将
GridLayout
布局重力设置为中心。如果我不使用
FrameLayout
,而只是设置
GridLayout
的最小高度,那么我就无法使整个东西垂直居中,因为
GridLayout
的虚假空间分布

因此,使用
FrameLayout
可以得到所需的结果,但在我的XML文件中会生成一个Lint警告,“这个GridLayout布局或它的FrameLayout父级是无用的。”显然,它不是无用的,因为它把东西排好了,但是有没有更好的方法可以做到这一点,我错过了

这是我的XML(我在GridLayout中剪切了一堆文本视图,因为它们与这种情况无关):


...

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

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


您是否也尝试过在网格布局中设置android:gravity=“center”
。是的,我尝试过,但没有成功。问题是不能使GridLayout在行/列之间均匀地分配空间。它将扩展最后一行/列以填充剩余的空间,这将完全破坏将其居中的尝试。谢谢,我将保持原样。我知道GridLayout是如何工作的,但你不能让它均匀分布,这太糟糕了。
<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>