Автоматически обрезать текст TextView, чтобы не перекрывать другой TextView

У меня есть ListView который отображает кучу домашних заданий. Элементы ListView используют FrameLayout для размещения двух FrameLayout элементов. Первый TextView выравнивается влево, а второй выравнивается вправо. (Оба выравниваются по центру по вертикали.) Первый показывает фрагмент описания назначения, а второй показывает дату выполнения.

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

| ————————————————- — |
| Прочтите pgs 15-35, обновите tim … Fri, May 4 |
| ————————————————- — |

В настоящее время текст описания будет продолжать перекрывать дату. Однако он будет усекать в конце линии.

В любом случае, я могу это сделать в XML, или мне нужно сделать это в коде, сократив строку до того, как я установил значение TextView (предположительно, в моем вызове getView )? Если бы я сделал это в коде, мне нужно было бы рассчитать объем горизонтального пространства, в котором строки должны были выяснить, насколько коротким должно быть описание. Кажется, что это может стать грязным …

Любые другие предложения о том, как это сделать, очень ценятся!

Вместо FrameLayout это идеальное место для LinearLayout или RelativeLayout в сочетании с эллипсисом:

 <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView ... android:width="0dp" android:height="wrap_content" android:layout_weight="1" android:ellipsize="end" /> <TextView ... android:width="wrap_content" android:height="wrap_content" android:layout_weight="0" /> </LinearLayout> 

Или поочередно

 <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView ... android:id="@+id/secondTV" android:width="wrap_content" android:height="wrap_content" android:layout_weight="0" /> <TextView ... android:width="0dp" android:height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/secondTV" android:ellipsize="end"/> </RelativeLayout> 

Попробуйте использовать атрибут ellipsize, например:

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:singleLine="true"/> 

Обратите внимание, что для Android или, по крайней мере, для некоторых версий требуются атрибуты «эллипсис» и «одиночная линия», чтобы система действительно выполняла усечение и добавляла многоточие.

Измените FrameLayout на LinearLayout или RelativeLayout.

  • LinearLayout: установите ширину заготовки «wrap_content» и ширину описания 0dp, затем добавьте layout_weight = «1» в описание

  • RelativeLayout: сначала планируйте дату с шириной wrap_content, затем расставьте описание с правилом, которое должно быть слева от установленной даты.

И Антон, и Джэймонд были в значительной степени (JRaymond помог мне разобраться с этим примером). Вот что я придумал:

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/due_date" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true" android:singleLine="true" /> <TextView android:id="@+id/description" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/due_date" android:singleLine="true" /> </RelativeLayout> 

(Мне нужно было сначала объявить свой ярлык с датой, чтобы я мог ссылаться на него в описании. Я также понял, что андроид: эллипсизация кажется необязательным – по-моему, он по умолчанию «заканчивается».)

Огромное спасибо!

Intereting Posts
Как установить время отображения тоста меньше, чем Toast.LENGTH_SHORT Реализация настроек сохранения Не удалось передать проект андроида библиотеки на обновленный adt Инструменты namespace android listitem Добавление линейного макета в навигационный ящик (заканчивается с ошибкой ClassCastException) Android отправляет файл / данные из приложения через Bluetooth на ПК / принтер / сканер / другое устройство Android: запуск инструментальных тестов на сервере TeamCity Модульное тестирование на Android Studio: ошибка «не издеваться» Как разрешить это предупреждение «W / Atlas: Указатель 0x0, а не в getPreloadedDrawables? » Запись в выходной поток VpnService не дает ответа Преобразование временной метки в виде строки в android Как программно выполнять команды командной строки ffmpeg в android? Получить другого дочернего элемента, который разделяет родительский элемент с текущим представлением Использование forceLayout (), requestLayout () и invalidate () Установка плагина ADT в разработке Eclipse для Android