XML布局备选方案(我的收到Lint警告)



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

为此,我将GridLayout放在FrameLayout中,将FrameLayout设置为最小高度48dp,并将GridLayoutlayout_gravity设置为居中。如果我不使用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>

除非您看到性能问题,否则我会保持这种状态。如果你看到一个性能问题,而这是因为附加的FrameLayout的(如果你直接使用GridLayout,你可以判断出问题是否消失),那么(也是只有这样)我会尝试直接修复GridLayout。

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

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

最新更新