Проблемы с форматированием таблицы Android - PullRequest
25 голосов
/ 02 декабря 2010

Я не могу заставить свой TableLayout поместиться внутри экрана when the text cell is large, несмотря на перенос текста inside the cell.

Это мой TableLayout. Простая таблица с двумя строками и двумя столбцами. Ячейки левого столбца multiline. Если текст одной из этих ячеек достаточно большой, чтобы разбить его на две строки, столбец растягивается, чтобы заполнить весь экран, а правые столбцы выталкиваются за пределы экрана.

Почему? Как заставить полный стол оставаться внутри экрана? Любая подсказка приветствуется.

My TableLayout выглядит следующим образом:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myTableLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow>
    <TextView
        android:text="Account 4 with a very large name to see if it breaks  on two or more lines"
        android:singleLine="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
    <TextView
        android:text="$400.00"
        android:gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
</TableRow>

<TableRow>
    <TextView
        android:text="Account 5"
        android:singleLine="false"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
    <TextView
        android:text="$400.00"
        android:gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    </TextView>
</TableRow>

</TableLayout>

Код для отображения макета является основным:

public class AccountBrowserTest 
    extends Activity
{
    public void onCreate(Bundle savedInstanceState) 
    {    
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.accountbrowser_test);

    }
} 

Ответы [ 9 ]

35 голосов
/ 08 февраля 2012

Добавить андроид: stretchColumns и android:shrinkColumns к элементу TableLayout:

<TableLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:stretchColumns="1"
  android:shrinkColumns="1">

Значения 1 - это столбцы, в которые вы хотите внести изменения. Вы можете указать более одного значения, например:

android:stretchColumns="0,1"

или если вы хотите, чтобы изменения произошли со всеми вашими столбцами, например:

android:stretchColumns="*"

Пожалуйста, посмотрите здесь для получения подробной информации: http://android -pro.blogspot.com / 2010/02 / table-layout.html

8 голосов
/ 19 декабря 2010

У меня была та же проблема с моим приложением, и я нашел следующее решение:

<TableLayout 
   android:shrinkColumns="0"
   android:stretchColumns="1" 
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
</TableLayout>

Это прекрасно работает с 2 столбцами.

6 голосов
/ 03 августа 2011

У меня была та же проблема, и я решил ее, добавив

android:stretchColumns="0"

к элементу TableLayout и установив

android:layout_width="0dp"

в TextView, который был слишком длинным.

5 голосов
/ 19 марта 2013

внутри макета таблицы используйте свойство shrinkColumns для столбцов, для которых вы хотите разрешить их сжатие для подгонки

Самый простой способ:

<TableLayout
android:shrinkColumns="*"/>

для сокращения всех столбцов или вы можете написать вместо "*" индексы столбцов, которые вы хотите сжать, что в вашем случае будет

<TableLayout
android:shrinkColumns="0,1"/>

обратите внимание, что индексы столбцов начинаются с нуля, поэтому последний код допускает сокращение первого (index = 0) и второго (index = 1) столбцов.

1 голос
/ 12 января 2012

Есть временное исправление, сделайте:

   android:stretchColumns = " (number of actual col) - 1 "

В моем случае решение не сработало.

0 голосов
/ 20 августа 2015

Надеюсь, этот код поможет вам. Открытый класс MainActivity расширяет Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:singleLine="false"
        android:text="Account 4 with a very large \n name to see if it breaks \n on two or more lines" >
    </TextView>

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:text="$400.00" >
    </TextView>
</TableRow>
0 голосов
/ 10 декабря 2010

Вы также можете попробовать манипулировать stretchColumns и / или shrinkColumns в TableLayout.

0 голосов
/ 02 декабря 2010

Отказ от ответственности: я не очень хорошо разбираюсь в макетах, поэтому я немного поиграл с некоторыми значениями, и это, похоже, сработало (хотя я не могу дать вам хорошее объяснение, почему):

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myTableLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableRow>
        <TextView
            android:text="Account 4 with a very large name to see if it breaks  on two or more lines"
            android:singleLine="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
        />
        <TextView
            android:text="$400.00"
            android:gravity="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.001"
        />
    </TableRow>

    <TableRow>
        <TextView
            android:text="Account 5"
            android:singleLine="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
        />
        <TextView
            android:text="$400.00"
            android:gravity="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.001"
        />
    </TableRow>
</TableLayout>

Также обратите внимание, что я не пробовал этот макет в Activity, я только посмотрел на него в режиме компоновки редактора xml, но там он, по крайней мере, выглядел нормально.

0 голосов
/ 02 декабря 2010

Возможно, это связано с wrap_content для ширины ваших многострочных ячеек.

Вы можете попробовать несколько способов придания ему более явной ширины ... т.е. установить width to 0 и задать для всех ячеек layout_gravity = 1. Это должно привести к тому, что каждый столбец будет занимать одинаковую ширину (или вы можете отрегулировать, если хотите, чтобы один столбец имел больший вес, чем другой).

...