如何使 textViews 填充行宽?

How to make textViews fill a row width?

我正在准备井字游戏: 最初所有 9 个单元格都是 empty.Upon 开始游戏,因为我输入数字,单元格的宽度改变 dynamically.How 以防止出现这种情况?

我的 xml 9 个单元格的代码:

<GridLayout
    android:id="@+id/grid_layout_id"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginHorizontal="20dp"
    android:background="@android:color/holo_red_dark"
    android:rowCount="3"
    android:columnCount="3"
    android:padding="10dp"
    android:theme="@style/MyTextViewStyle">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="1" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="2" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="4" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="5" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="7" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="8" />

    <TextView
        android:id="@+id/textView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="" />

</GridLayout>

PS :我不想使用 Table 布局、水平和垂直线性布局集或任何其他视图。请告诉我如何在 GridLayout 中完成它。

请看答案。您只需要在每个 TextView 上更改以下部分:

android:layout_width="0dp"

在每个 TextView 中,将 layout_width 设置为 0dp。最初,TextView 将是 0 像素大,但它们将同样填充剩余的 space 作为结果:android:layout_columnWeight="1".

您需要为行的每一列设置固定权重。 为此,在本例中,您必须在每个组件中分配 Textview, 他们将在行中拥有的 pes。如果您的行将有 2 个组件,您可以在 weight_sum = "1" 中分配权重总和的值,然后在每个组件中分配您将拥有的权重,如果您希望它们相等,例如您会 layout_weight = 0.5 。因此,通过这种方式,您可以固定容器内的每个组件宽度。

希望对您有所帮助。

您的代码:

<GridLayout
    android:id="@+id/grid_layout_id"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginHorizontal="20dp"
    android:background="@android:color/holo_red_dark"
    android:rowCount="3"
    android:columnCount="3"
    weight_sum="3"
    android:padding="10dp"
    android:theme="@style/MyTextViewStyle">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_weight="1"
        android:layout_rowWeight="1"
        tools:text="1" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_weight="1"
        android:layout_rowWeight="1"
        tools:text="2" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_weight="1"
        android:layout_rowWeight="1"
        tools:text="" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="4" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="5" />

    <TextView
        android:id="@+id/textView6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="7" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="8" />

    <TextView
        android:id="@+id/textView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        tools:text="" />

</GridLayout>

我看你用过android:layout_columnWeight="1",也用过android:layout_width="wrap_content"。正如这个 post 中提到的,在 GridLayout 中不需要使用 layout_width 参数,因此应该避免。

尝试将 layout_width 和 layout_height 设置为任何固定值,例如 10 dp,然后 android 宁愿使用 Layout_columnWeight 并为每个文本视图分配相等的部分。另外,请阅读此 以允许向后兼容 layout_width。