Проблемы с форматированием макета таблицы 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);
}
}
Ответы
Ответ 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>