Android - исправьте ширину TextView по строке - PullRequest
1 голос
/ 19 октября 2010

Я думаю, что ответ на этот вопрос, вероятно, так прост, но я изо всех сил ....

У меня есть TableLayout с несколькими столбцами. Я хочу, чтобы последний столбец был фиксированной ширины, но я хочу определить эту ширину, чтобы она могла содержать максимально широкую строку из моей программы. то есть оно всегда достаточно широкое, чтобы в нем содержалась «ЭТА СТРОКА» без обертки или траты места.

Я хотел бы сделать это, поскольку у меня есть эти TableLayouts в ListView, поэтому он выглядит очень плохо, когда последний столбец имеет переменную ширину.

Я попытался получить ширину строки, даже до того, чтобы поместить ее в TextView, вызвать getTextSize (), а затем setWidth () для всех соответствующих TextView. Проблема, с которой я столкнулся, заключается в том, что gettextSize () возвращает пиксели, но setWidth использует ScaledPixels.

Я уверен, что есть действительно простое решение. Кто-нибудь может помочь?

1 Ответ

4 голосов
/ 19 октября 2010

Используете ли вы android: width = "wrap_content" в макете XML для определения ширины последнего столбца?

Редактировать: Я думаю, я только что понял, у вас есть представление списка, которое содержит таблицу, и вы хотите, чтобы все строки представления списка имели одинаковую длину для последней строки таблицы. Правильно?

Сейчас я могу думать только об одном, очень нелегком решении, и оно включает просмотр всех строк перед построением представления списка.

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

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

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

Создайте текстовое представление (давайте назовем его invisibleText) в макете, которое не будет видно, вы можете сделать это, установив

android:visibility="gone"

Тогда:

int size = data.length;
maxLength = 0.0f;
for(int i = 0;i<size;i++){
   invisibleText.setText(data[i]);
   float thisLength = invisibleText.getTextSize();
   if(thisLength>maxLength) maxLength = thisLength;
}

В вашем конструкторе представления списка:

TextView text = (TextView)findViewById(R.id.the_text_view_you_want);
text.setText(data[position]);
text.setWidth(maxLength)

Столбцы таблицы должны использовать android: width = "wrap_content" Я не тестировал этот код, но он должен работать, я делал подобные вещи раньше.

...