Странная проблема с android: ellipsize = "end"
Я использую android: ellipsize = "end" в файле android xml, и, на удивление, я не получаю макет, который я хочу, отображаются 3 точки (...), но после этого Точки есть другое слово усечено. Кроме того, это поведение "не всегда", проверьте присоединение ListView, иногда поведение нормальное, а иногда и нет.
Вот скриншот макета с моего устройства,
![enter image description here]()
Я не знаю, почему это происходит. Вот мой xml файл, имеющий проблему с tv_news_content TextView -
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@color/white" >
<ImageView
android:id="@+id/iv_next_tier"
android:layout_width="18dp"
android:layout_height="21dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:src="@drawable/right_arrow" >
</ImageView>
<TextView
android:id="@+id/tv_news_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="7dp"
android:layout_marginRight="5dp"
android:layout_marginTop="3dp"
android:layout_toLeftOf="@+id/iv_next_tier"
android:ellipsize="end"
android:maxLines="2"
android:text="News Title"
android:textColor="@color/black"
android:textSize="17dp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_news_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_news_title"
android:layout_below="@+id/tv_news_title"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@+id/iv_next_tier"
android:ellipsize="end"
android:maxLines="2"
android:text="News Contents"
android:textColor="@color/black_light"
android:textSize="15dp" />
<View
android:id="@+id/view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_below="@+id/tv_news_content"
android:layout_marginTop="5dp" />
Чтобы все было ясно, tv_news_title - это самый верхний полужирный текстовый текст, а iv_next_tier - это маленький стрелочный ImageView справа. и tv_news_content - это TextView, с которым мне приходится сталкиваться.
Любое решение, почему я не получаю желаемого результата? Желаемый вывод означает всегда нормальное поведение - мне нужны эти 3 точки в конце второй строки текста tv_news_content TextView, но не до усеченного слова.
Любое предложение оценивается.
Ответы
Ответ 1
При настройке текста для текстового просмотра убедитесь, что текст не превышает 750 символов, поэтому используйте txt = theText.substring(0, 750) или что-то подобное перед вызовом settext. Это работает на эмуляторе с вашим фидом. и должно быть достаточно символов для 10-дюймового планшета.
Ответ 2
Наконец-то выяснилось, что вызвало эту проблему в моем приложении!
В то время как ответ RuAware привел меня на правильный путь, я обнаружил, что это не устраняет проблему для всех моих текстовых блоков. Учитывая, что это сработало для некоторых, я чувствовал, что это явно связано с каким-то злым характером. Поэтому я прошел через один сломанный текстовый блок и только начал удалять символы до тех пор, пока он не перестанет ломаться.
Оказывается, это вызывал новый символ строки '\n'
. Даже если новая строка была после эллипсиса, новый символ строки [непоследовательно] вызывал эту проблему, если она находилась где-то внутри строки.
Проблема будет решена путем выполнения чего-то похожего на следующее, прежде чем устанавливать текст в ваше представление:
text = text.replace('\n',' ');
Ответ 3
Взгляните на этот пост. Существует настраиваемый EllipsizingTextView, который решает проблему эллипсирования для многострочного просмотра. Однако он также может решить вашу проблему.
Ответ 4
У меня возникала такая же проблема при отображении String, содержащего HTML-текст.
Удаление всех html-тегов с помощью myText.replaceAll("\\<.*?>","")
решило проблему.
Вы также можете удалить теги html с помощью Html.fromHtml(myText).toString()
, но обратите внимание, что вы должны использовать .toString() и не применять вывод fromHtml непосредственно к TextView. Если некоторые специальные символы кодируются html (& amp, & gt, & lt...), вы можете безопасно снова применить Html.fromHtml() к последней строке.
Ответ 5
i:
if (myModel.mDataText().length() > 150) {
mTextView.setText(Html.fromHtml(myModel.mDataText().substring(0, 150) + "..."));
} else {
mTextView.setText(Html.fromHtml(myModel.mDataText() + "..."));
}