Подтвердить что ты не робот

Проблемы с форматированием макета таблицы Android

Я не могу заставить свой 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);

    }
} 
4b9b3361

Ответ 1

Добавьте андроид: 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

Ответ 2

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

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

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

Ответ 3

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

android:stretchColumns="0"

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

android:layout_width="0dp"

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

Ответ 4

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

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

<TableLayout
android:shrinkColumns="*"/>

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

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

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

Ответ 5

Существует временное исправление, do:

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

В моем случае не было никакого решения.

Ответ 6

Это может иметь отношение к wrap_content для ширины ваших многострочных ячеек.

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

Ответ 7

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

<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, но, по крайней мере, он выглядел отлично.

Ответ 8

Вы также можете попробовать манипулировать стрейч-столбцами и/или сокращать столбцы в TableLayout.

Ответ 9

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

@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>