Странная проблема с 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() + "..."));
}