Android GridLayout API 21

Android GridLayout API 21,android,android-layout,user-interface,android-5.0-lollipop,android-gridlayout,Android,Android Layout,User Interface,Android 5.0 Lollipop,Android Gridlayout,我正在努力完成这样的事情: 目前,我正在手动将瓷砖的宽度设置为屏幕宽度的一半。这很好,但它使得在平铺之间添加分隔符(如屏幕截图所示)变得很困难。幸运的是,在API 21中,为了方便起见,这里引用: 从API 21开始,GridLayout的多余空间分布可容纳 重量原理。如果未规定重量, 遵守前面的约定,并采用列和行 如果它们的视图在其视图中指定某种形式的对齐方式,则具有灵活性 组。因此,视图的灵活性受其属性的影响 路线,通常通过设置重力来定义 子级布局参数的属性。如果重量或 沿给定轴定义对齐,

我正在努力完成这样的事情:

目前,我正在手动将瓷砖的宽度设置为屏幕宽度的一半。这很好,但它使得在平铺之间添加分隔符(如屏幕截图所示)变得很困难。幸运的是,在API 21中,为了方便起见,这里引用:

从API 21开始,GridLayout的多余空间分布可容纳 重量原理。如果未规定重量, 遵守前面的约定,并采用列和行 如果它们的视图在其视图中指定某种形式的对齐方式,则具有灵活性 组。因此,视图的灵活性受其属性的影响 路线,通常通过设置重力来定义 子级布局参数的属性。如果重量或 沿给定轴定义对齐,然后取组件 在这个方向上是灵活的。如果未设置重量或对齐,则 相反,组件被认为是不灵活的

同一行或列组中的多个组件被视为 并行行动。只有当所有人 其中的组件是灵活的。行组和列组 共同边界的任何一方都被视为共同作用 系列由这两个元素组成的组合组是灵活的,如果 它的一个要素是灵活性

若要拉伸柱,请确保柱内的所有构件 定义重量或重力。为了防止柱子拉伸, 确保列中的一个组件未定义 重力或重力

当灵活性原则不能提供完整的 消除歧义,GridLayout的算法支持 更靠近其右边缘和下边缘。更确切地说,, GridLayout将其每个布局参数视为 定义沿给定轴的网格线的一组变量。 在布局过程中,GridLayout解决约束,以返回 对所有变量都适用的约束的唯一解决方案 小于或等于任何其他有效值中的相应值 解决方案

我把这个简单的布局放在一起,由一个两列的GridLayout组成,试图实现两个同样宽的列:

<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" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:columnCount="2">
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
        <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" />
    </GridLayout>
</RelativeLayout>

我认为,由于所有的孩子都有相同的列重量,这将导致同样宽的列。然而,情况似乎并非如此,因为结果如下:

第一列比第二列窄。这里有我遗漏的东西吗?我是否误解了重量与网格布局的关系


另一个问题是,我似乎无法使用“宽度为0,权重为0”的技巧来确保宽度相等,而不管内容如何(TextView只是消失了)。如何使用GridLayout实现这一点?

试试这个,我很快就会编辑它,想自己试试看吗

  <GridLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"        
    android:columnCount="2" > 

    <Button
        android:layout_column="0"
        android:layout_gravity="fill"
        android:layout_row="0"
        android:layout_columnWeight="1"
        android:text="c0 | r0" />

   <Button
        android:layout_column="1"
        android:layout_gravity="fill"
        android:layout_row="0"
         android:layout_columnWeight="1"
        android:text="c1 | r0" />

   <Button
        android:layout_column="1"
        android:layout_gravity="fill"
        android:layout_row="3"
        android:layout_columnWeight="1"
        android:text="c1 | r3" />

   <Button
        android:layout_column="0"
        android:layout_gravity="fill"
        android:layout_row="1"
        android:layout_columnWeight="1"
        android:text="c0 | r1" />

</GridLayout>

按钮上的文字解释了
gridlayout
的工作原理,对吗

指定行的列数,并将小部件放置在各自的位置(列数和行数)。。在文本中放置位置以反映它

实际上,我从来没有花时间玩过
gridlayout
,我不得不用eclipse玩2分钟才能得到它。。所以列和行。。实际上,你可以使用它们,我只是这样做了,其中一列是空的,另一列是空的


希望它有帮助

只需将
android:layout\u width=“0dp”
添加到GridLayout的每个子级(任何没有
layout\u width=“0dp”
的子级都会打破权重布局。)

如果有具有“指定宽度大小”的子视图,请确保没有宽度大小大于平均宽度大小的子视图


希望它能对你有所帮助。

这似乎起到了作用。在不指定行/列的情况下,是否无法使用权重?我希望能够只添加子元素而不必跟踪当前的行/列,因为我的一些子元素可能跨越多行/列。对不起,但是,从我看到的网格布局是如何工作的-(单元格),所以你可以使用,
android:layout_gravity=“Left | Top | fill”
android:layout_gravity>来实现这一点=“Right | Top | fill”
也许可以。但老实说,我不认为gridlayout就是这样工作的。最后,您可以通过
findviewById
找到您的视图,因为它是一个视图组,单元格用于对齐。希望它对@untitled有所帮助