2010-07-28 3 views
1

Хорошо, моя проблема в том, что у меня есть n-TextViews, и они будут добавлены программно в TableLayout. Это совершенно неважно, как я стилю эти TextViews или TableLayout, каждый раз, когда я что-то добавляю, он добавляет TextView внизу после других TextView. Эти представления имеют переменную ширину, которая вычисляется из их длины текста и некоторых пикселей (WRAP_CONTENT только сделал ширину 100% ...).Добавление TextViews в TableLayout «stackable»

It is like this right now: 
------------------------------------------ 
[TextView 1] 
[TextView 2] 
[TextView 3] 
[TextView 4] 
------------------------------------------ 

And it should be like: 
------------------------------------------ 
[TextView 1] [TextView 2] [TextView 3] 
[TextView 4] 
------------------------------------------ 

На самом деле мне не нужен TableLayout. Я все еще могу изменить его во всем, что вы хотите. Конечно, было бы даже лучше, если бы те TextViews могли получить WRAP_CONTENT как ширину.

EDIT: КПП. LinearLayout с ориентацией = «горизонтальный» добавляет TextViews в первый кортеж, но в конце он не переносится на следующую строку, он просто добавляет их в правую сторону, и он будет разделен, например:

------------------------------------------ 
[TextView 1] [TextView 2] [TextView 3] [Te 
             [xt 
             Vie 
             w 4 
             ] 
------------------------------------------ 

ответ

0

Я думаю, вы могли бы попробовать что-то вроде этого:
- Поставьте TableLayout в корень вашего Activity с FILL_PARENT в ширину и высоту.
- Затем получите свою ширину и сохраните ее в переменной (mWidth).
- вы создаете TableRow, добавьте первый TextView и сохраните его ширину в переменной (mTotalWidth), и вы поместите TextView в строку.
- Если вы хотите добавить новый Textview, вы его создаете, получаете его ширину и вычисляете сумму при добавлении ее в mTotalWidth.
Теперь
if mTotalWidth < mWidth, вы добавить свой TextView в текущей строке и приращение mTotalWidth
else создать новый TableRow, положить ваши Textview в нем, и изменить значение mTotalWidth к ширине этого TextView.
Тогда вы можете повторить это для всех своих взглядов. Это может показаться немного грязным, но я думаю, что это может сработать.

+0

Это звучит неплохо! Его немного сумасшедший, но хорошо :) Единственный недостаток в моем случае, я построил его следующим образом: когда вы щелкнули по некоторым строкам в ListView, он добавляет TextViews в начало. Когда я нажимаю TextViews, они будут удалены сверху. Удаление будет проблемой с этим решением ... –

+0

На самом деле, я не вижу никаких проблем. Существует метод removeView для 'TableLayout', так где же проблема? http://developer.android.com/reference/android/view/ViewGroup.html#removeView%28android.view.View%29 – Sephy

+0

Мне нужно было бы снова проверить длину и, если еще есть TextView в строке.Например: есть ли TextView в TableRow, тогда не удаляйте TableRow, если TextView в TableRow отсутствует, удалите TableRow. Если во втором TableRow из 5 строк есть 3 TextViews, и я удаляю один из них, как насчет остальных? ;) –

0

Возможно, вы захотите использовать GridView за то, что вы пытаетесь сделать. Я не верю, что есть классы Layout, которые поддерживают то, что вы хотите сделать.

Если вы идете с GridView, тогда вы сможете использовать ArrayAdapter, так как он уже поддерживает создание TextView s легко.

Если вам просто нужен макет, который обертывается, если следующий ребенок не вписывается в текущую строку, тогда вам придется написать собственный класс макета, чтобы сделать это.

+0

Ну, GridView имеет тот недостаток, что отдельные дети не являются динамическими с их шириной. Мои текстовые элементы иногда небольшие, иногда как ширина, как экран. –

Смежные вопросы