TableLayout с layout_width = matchparent не совпадает с родительским

У меня есть таблицаLayout с двумя столбцами и двумя строками, обе строки и последний столбец имеют match_parent для ширины, но макет не заполняет родительскую ширину, он выполняется таким же образом, как у wrap_content.

Вот код:

<TableLayout android:layout_width="match_parent">
    <TableRow android:layout_width="match_parent">
        <TextView 
            android:layout_width="wrap_content"
            android:text="static" />
        <EditText
            android:layout_width="match_parent"
            android:text="text" />
    </TableRow>

    <TableRow android:layout_width="match_parent">
        <TextView 
            android:layout_width="wrap_content"
            android:text="static2" />
        <EditText
            android:layout_width="match_parent"
            android:text="text2" />
    </TableRow>
</TableLayout>

Что мне нужно сделать для каждой строки, имеющей ширину родительского элемента?

Ps: место, где я работаю, не позволяет мне отправлять мой код, поэтому я пишу код как можно ближе к моему коду. Я не знаю, правильно ли это, я не могу проверить.

Ответ 1

Попробуйте этот код, я думаю, он поможет вам:

  <TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    >

    <TableRow android:layout_width="match_parent" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:text="static" />

        <EditText
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:text="text" />
    </TableRow>

    <TableRow android:layout_width="match_parent" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:text="static2" />

        <EditText
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:text="text2" />
    </TableRow>
</TableLayout> 

Ответ 2

Также рассмотрите, есть ли другие строки, содержимое которых шире, чем другие строки, содержащие TextView, так как атрибут веса не будет работать хорошо. Рассмотрим этот пример:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout 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" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="Short Text" />

              <EditText
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Short Text"
            android:layout_weight="1"/>

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

    </TableRow>

    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Reaaaaaaaaaaaaaaaaaaaaaaaaaally lengthy and text"/>

    </TableRow>

Итак, вот результат:

  • Ячейка третьей строки устанавливает ширину каждой левой ячейки.
  • EditText в первом ряду начинается там, где заканчивается левая ячейка (почти на три четверти ширины экрана).
  • Во второй строке указан вес 1 на каждую ячейку, поэтому обе ячейки в строке должны измерять половину экрана, но, поскольку первая ячейка имеет такую ширину, вес рассчитывается пропорционально, поэтому даже если вы установите вес 50 для правой ячейка, вы никогда не получите половину экрана, потому что первая ячейка не может быть меньше, чем содержимое третьей ячейки.

Ответ 3

Я бы попробовал добавить android:weight="1" в TableRow.