2010-10-18 5 views
1

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

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

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

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

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

ответ

4

Вы используете андроид: width = "wrap_content" в своем XML-макете, чтобы определить ширину этого последнего столбца?

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

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

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

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

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

Создание TextView (назовем его 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) 

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

+0

Да, я использую android: width = "wrap_content" для последнего столбца, и да, я хочу, чтобы последняя строка таблицы имела одинаковую длину во всех записях в listView и хотела бы, чтобы эта ширина была просто достаточно большой, чтобы удерживать строку максимальной длины, определенную в приложении. – user479811

+0

Добавил некоторые ответы. Попробуйте. – blindstuff

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

  • Нет связанных вопросов^_^