Почему TextView в одной строке отображается с помощью "end" show boxes?

Я использую TextView на Android, я хочу показать 1 строку в TextView, заканчивающуюся на ".", но это дает поле типа [] в конце. Я не знаю почему? Я просто хочу оставить это поле и только показать текст, заканчивающийся на "..."

TextView shown box at end

Обновить код для list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="85dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:cacheColorHint="#4C7B8D"
android:background="#4C7B8D">
<ImageView
    android:id="@+id/videoListImage"
    android:src="@drawable/audio_thumbnail60x60"
    android:layout_height="75dp"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:scaleType="fitXY"
    android:layout_width="75dp"
    android:padding="4dp"
    android:background="@color/light_gray" />
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginRight="5dp"
        android:layout_toLeftOf="@+id/next_arrow"
        android:orientation="vertical"
        android:gravity="center_vertical"
        android:paddingLeft = "5dp">
        <TextView
            android:id="@+id/row_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/app_background_color"
            android:textSize="18sp"
            android:ellipsize="end"             
            android:maxLines="1" />
        <TextView
            android:id="@+id/row_dis"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textColor="@color/color_black"
            android:layout_marginRight="2dp"
            android:textSize="15sp"
            android:ellipsize="end"
            android:maxLines="1" />
        <TextView
            android:text="$7.50"
            android:id="@+id/audio_price_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16dp"
            android:textColor="@color/color_white"
            android:textStyle = "bold"
            android:paddingLeft = "12dp"
            android:paddingRight = "12dp"
            android:background="@drawable/blue_round_cornor_background" />
    </LinearLayout>
    <ImageView
        android:id="@+id/next_arrow"
        android:src="@drawable/next_arrow"
        android:layout_toLeftOf="@+id/saved_purchased"
        android:scaleType="fitXY"
        android:layout_height="25dp"
        android:layout_width="18dp"
        android:layout_centerVertical="true"
        android:visibility = "gone"/>
    <ImageView
        android:id="@+id/saved_purchased"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop ="true"
        android:scaleType="fitXY"
        android:layout_height="25dp"
        android:layout_width="25dp"
        android:layout_marginRight="2dp"/>
</RelativeLayout>

Вот изображения "next_arrow" enter image description here

Вот код, который я использую getView() в адаптере.

  String discription = listData.getDescription();
    if (discription != null && discription.length() > 0) {
        if (textViewDis != null) {
            textViewDis.setTypeface(titleFont);
            Log.e("data", ""+discription);
            discription.replaceAll("\r\n", "");
            textViewDis.setText(discription);
        }
    }

Вот фактическая строка описания для отображения.

Эндрю и Стефани Тидвелл откровенно делятся своей историей успеха в этом бизнесе. Эта история поможет всем, кто слушает, понять, что никто не идеален даже в бизнесе второго поколения. Это потоковый аудиофайл.

Есть еще проблема? Я могу уточнить вопрос.

Ответ 1

Цитата из одна из моих книг:

Класс Android TextView обладает встроенной способностью "эллипсизовать" текст, усечение и добавление многоточия, если текст длиннее, чем доступный пространство. Вы можете использовать это через атрибут android: ellipsize, например. Это работает достаточно хорошо, по крайней мере для однострочного текста. Эллипсис, который использует Android, - это не три периода. Скорее он использует фактическое эллипсис, где три точки содержатся в одном глифе. Следовательно, любой шрифт, который вы используете, который вы также используете для функции "эллипсинга", будет нужен эллиптический глиф.

Помимо этого, Android выталкивает строку, которая отображается на экране, так что длина (в символах) одинакова до и после "Ellipsizing". Чтобы сделать эту работу, Android заменяет один символ на эллипсис и заменяет все остальные удаленные символы на Unicode символ "ZERO WIDTH NO-BREAK SPACE" (U + FEFF). Это означает, что "лишние" символы после того, как многоточие не занимает какое-либо видимое пространство на, но они могут быть частью строки.

Однако это означает, что любые пользовательские шрифты, которые вы используете для виджетов TextView, которые вы используете с android: эллипсис должен также поддерживать этот специальный Unicode персонаж. Не все шрифты, и вы получите артефакты на экране представление ваших сокращенных строк, если ваш шрифт не имеет этого символа (например, мошенник X появляется в конце строки).

Ответ 2

Я столкнулся с той же проблемой, когда пытался использовать пользовательский "MetaPro-Medium.otf" в качестве шрифта для TextView с помощью android:singleLine="true". Коробка в конце строки была очень раздражающей.

Я не нашел способа решить эту проблему в Android, но в то же время нашел следующую работу.

  • Я установил "FontLab Studio v5.04"
  • Открыл мой шрифт
  • Выбрал один из символов, который я не собирался использовать
  • Меню- > Glyph- > Rename Glyph
  • Изменено имя и индекс юникода от его исходного значения до "FEFF" (Thank CommonsWare)
  • Дважды щелкните по выбранному символу, а затем удалите все строки, из которых был создан этот символ.
  • Меню- > Файл- > Сгенерировать шрифт- > сохранить как тип otf ​​

В результате я получил обновленный шрифт и проблема исчезла.

Ответ 3

Я сталкиваюсь с той же проблемой (show boxes ([])) для некоторых специальных символов, когда я пытаюсь показать контент, исходящий из url webservice, даже я не использую android: ellipsize. то я заменяю код из

textview.settext(content);

к

textview.settext(Html.fromHtml(content));

работает нормально.

Ответ 4

Arslan, ваш макет отлично работает в моем случае, я тестировал то же самое:

 <TextView
    android:id="@+id/row_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:textSize="18sp"
    android:ellipsize="end"             
    android:maxLines="1"
    android:text="This is the demo testing demo testing This is the demo testing demo testing"/>

... и получения точного результата, как вы хотите, "одна строка, закончившаяся с...", и поле должно быть удалено. Поэтому я думаю, что может быть что-то не так с любым персонажем или текстом, который вы устанавливаете.

Ответ 5

На самом деле я столкнулся с этой проблемой, и вместо того, чтобы менять шрифт или использовать setText, я просто добавил scrollHorizontally как false и исправил лишний символ поля

android:singleLine="true"
android:scrollHorizontally="false"
android:ellipsize="end"

Ответ 6

Была аналогичная проблема, с которой я столкнулся в своем проекте, где я использовал тип шрифта для текстового представления. несколько типов шрифтов имеют эту проблему, чтобы сделать... отображаться как [] в последний раз. Проблема будет решена, если вы попытаетесь изменить шрифт.