android - GridLayout(不是GridView)如何均匀拉伸(stretch)所有 child

标签 android android-layout android-gridview android-gridlayout

我想要一个 2x2 网格,里面有一个按钮。这只是 ICS,所以我尝试使用给定的新 GridLayout。

这是我的布局的 XML:

 <?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/favorites_grid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ff00"
    android:rowCount="2"
    android:columnCount="2">
  <Button
      android:text="Cell 0"
      android:layout_row="0"
      android:layout_column="0"
      android:textSize="14dip" />
  <Button
      android:text="Cell 1"
      android:layout_row="0"
      android:layout_column="1"
      android:textSize="14dip" />

  <Button
      android:text="Cell 2"
      android:layout_row="1"
      android:layout_column="0"
      android:textSize="14dip" />
  <Button
      android:text="Cell 3"
      android:layout_row="1"
      android:layout_column="1"
      android:textSize="14dip" />
</GridLayout>

问题是我的观点并没有均匀地延伸到每一行。这会导致我的 GridLayout 右侧出现大量额外空间。

我尝试设置 layout_gravity="fill_horizo​​ntal" 但这仅适用于行上的 last View 。这意味着单元格 1 一直延伸以为单元格 0 提供足够的空间。

关于如何解决这个问题的想法?

最佳答案

从 API 21 开始,GridLayout 中添加了权重的概念。要支持较旧的 android 设备,您可以使用 v7 支持库中的 GridLayout。

以下 XML 提供了一个示例,说明如何使用权重来填充屏幕宽度。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:grid="http://schemas.android.com/apk/res-auto"

    android:id="@+id/choice_grid"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:padding="4dp"

    grid:alignmentMode="alignBounds"
    grid:columnCount="2"
    grid:rowOrderPreserved="false"
    grid:useDefaultMargins="true">

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile1" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile2" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile3" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="100dp"
        grid:layout_columnWeight="1"
        grid:layout_gravity="fill_horizontal"
        android:gravity="center"
        android:background="#FF33B5E5"
        android:text="Tile4" />

</android.support.v7.widget.GridLayout>

关于android - GridLayout(不是GridView)如何均匀拉伸(stretch)所有 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016343/

相关文章:

android - 提高 SurfaceView 派生的自定义 View 的性能?

android - 无法使用生命周期版本 2.2.0-alpha01 功能

android - 如何在 android 中为布局生成唯一 ID?

android - 7 英寸平板电脑和手机的实际图像尺寸

android - 将图像和文本组合成可绘制对象

java - 如何读取文本文件并存储在类 vector 中 - Android

java - 设置安卓:foreground View borderless

android - 如何隐藏 android 最近列表中的最后一个 Activity View ?使用锁屏实现

android - GridView 项目选择器选中状态未出现

android - 动态添加Button端到GridView