GridLayout和行/列跨度祸

介绍GridLayout的Android开发者博客文章展示了这个跨度如何影响自动索引分配的图表:

自动索引分配

我试图实际使用GridLayout 。 这是我到目前为止:

 <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" app:orientation="horizontal" app:columnCount="8"> <Button app:layout_columnSpan="2" app:layout_rowSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_1"/> <Button app:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_2"/> <Button app:layout_rowSpan="4" android:text="@string/string_3"/> <Button app:layout_columnSpan="3" app:layout_rowSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_4"/> <Button app:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:text="@string/string_5"/> <Button app:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="@string/string_6"/> <android.support.v7.widget.Space app:layout_column="0" android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> <android.support.v7.widget.Space android:layout_width="36dp" /> </android.support.v7.widget.GridLayout> 

我不得不引入<Space>元素来确保每列都有最小的宽度,否则,我会有一堆零宽度的列。

但是,即使有了他们,我也能得到这个:

示例GridLayout

值得注意的是:

  • 尽pipeandroid:layout_gravity="fill_horizontal" ,我的小部件与列跨度不填满跨越列

  • 尽pipeandroid:layout_rowSpan值,没有任何android:layout_rowSpan

任何人都可以使用GridLayout从博客文章重现图表?

谢谢!

这感觉相当不好,但我设法得到正确的样子,通过增加额外的列和行超出所需。 然后,我在每行的空格填充额外的列,定义一个高度,并填充额外的行,每列中的空间定义一个宽度。 为了获得额外的灵活性,我想这些空间大小可以在代码中设置,以提供类似于权重的东西。 我试图添加一个截图,但我没有必要的声誉。

 <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnCount="9" android:orientation="horizontal" android:rowCount="8" > <Button android:layout_columnSpan="2" android:layout_gravity="fill" android:layout_rowSpan="2" android:text="1" /> <Button android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="2" /> <Button android:layout_gravity="fill_vertical" android:layout_rowSpan="4" android:text="3" /> <Button android:layout_columnSpan="3" android:layout_gravity="fill" android:layout_rowSpan="2" android:text="4" /> <Button android:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:text="5" /> <Button android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="6" /> <Space android:layout_width="36dp" android:layout_column="0" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="1" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="2" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="3" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="4" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="5" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="6" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="7" android:layout_row="7" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="0" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="1" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="2" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="3" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="4" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="5" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="6" /> </GridLayout> 

截图

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:columnCount="8" android:rowCount="7" > <TextView android:layout_width="50dip" android:layout_height="50dip" android:layout_columnSpan="2" android:layout_rowSpan="2" android:background="#a30000" android:gravity="center" android:text="1" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="50dip" android:layout_height="25dip" android:layout_columnSpan="2" android:layout_rowSpan="1" android:background="#0c00a3" android:gravity="center" android:text="2" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="25dip" android:layout_height="100dip" android:layout_columnSpan="1" android:layout_rowSpan="4" android:background="#00a313" android:gravity="center" android:text="3" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="75dip" android:layout_height="50dip" android:layout_columnSpan="3" android:layout_rowSpan="2" android:background="#a29100" android:gravity="center" android:text="4" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="75dip" android:layout_height="25dip" android:layout_columnSpan="3" android:layout_rowSpan="1" android:background="#a500ab" android:gravity="center" android:text="5" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="50dip" android:layout_height="25dip" android:layout_columnSpan="2" android:layout_rowSpan="1" android:background="#00a9ab" android:gravity="center" android:text="6" android:textColor="@android:color/white" android:textSize="20dip" /> </GridLayout> </RelativeLayout> 

截图

你必须在你的列上设置layout_gravity和layout_columntWeight

 <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="سوم شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> <TextView android:text="دوم شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> <TextView android:text="اول شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> </android.support.v7.widget.GridLayout> 

Android支持V7 GridLayout库通过满足重量的原则使得多余的空间分配变得容易。 为了使柱子伸展,确保其中的部件定义重量或重力。 要防止色谱柱伸展,请确保色谱柱中的某个组分不定义重量或重力。 请记住为这个库添加依赖关系。 在build.gradle中添加com.android.support:gridlayout-v7:25.0.1

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:columnCount="2" app:rowCount="2"> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="First" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="Second" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="Third" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" app:layout_columnWeight="1" app:layout_rowWeight="1" android:text="fourth"/> </android.support.v7.widget.GridLayout> 

从API 21开始,GridLayout现在支持像LinearLayout这样的权重。 详情请参阅下面的链接:

https://stackoverflow.com/a/31089200/1296944