Как заставить textViews заполнить ширину строки?

Я готовлю игру tic tac: изначально все 9 ячеек пусты. При запуске игры, когда я ввожу число, ширина ячейки динамически меняется. Как этого избежать?

ширина последнего столбца становится равной, когда я ввожу число в третий столбец

Мой 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: я не хочу использовать макет таблицы, набор горизонтальных и вертикальных линейных макетов или любые другие представления. Подскажите, пожалуйста, как это сделать в самом GridLayout.


person Community    schedule 29.12.2017    source источник


Ответы (4)


В каждом TextView установите layout_width на 0dp. Первоначально TextView будет иметь размер 0 пикселей, но они будут одинаково заполнять оставшееся пространство в результате: android:layout_columnWeight="1".

person Zelig63    schedule 29.12.2017

См. ответ здесь. Вам нужно только изменить следующую часть в каждом TextView:

android:layout_width="0dp"
person Yuliwee    schedule 29.12.2017

Вам нужно будет установить фиксированный вес для каждого столбца вашей строки. Для этого вам нужно будет назначить в каждом компоненте, в данном случае 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>
person Maykel Llanes Garcia    schedule 29.12.2017

Я вижу, что вы использовали android:layout_columnWeight="1", но также использовали android:layout_width="wrap_content". Как упоминалось в этом сообщении, нет необходимости использовать следует избегать параметров layout_width в GridLayout, поэтому их следует избегать.

Попробуйте установить для layout_width и layout_height любое фиксированное значение, скажем, 10 dp, тогда Android скорее будет использовать Layout_columnWeight и назначит равную часть каждому текстовому просмотру. Также прочтите этот сообщение чтобы разрешить обратную совместимость layout_width.

person Chaitanya Baweja    schedule 29.12.2017