Почему TextView в одной строке выделено с помощью оконечных элементов? - PullRequest
20 голосов
/ 27 июня 2011

Я использую 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);
        }
    }

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

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

Все еще есть проблемы?Я могу обновить вопрос больше.

Ответы [ 6 ]

44 голосов
/ 27 июня 2011

Цитирую себя из одной из моих книг :

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

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

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

6 голосов
/ 19 января 2012

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

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

  1. Я установил "FontLab Studio v5.04"
  2. Открыл мой шрифт
  3. Выбран один из символов, которые я не собирался использовать
  4. Menu-> Glyph-> Rename Glyph
  5. Изменил имя и индекс Юникода с исходного значения на «FEFF» (спасибо CommonsWare)
  6. Дважды щелкните выбранный символ, а затем удалите все строкиэтот символ был создан из.
  7. Menu-> File-> Generate Font-> save as type otf

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

2 голосов
/ 11 января 2013

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

textview.settext(content);

на

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

, работающий нормально.

1 голос
/ 28 мая 2013

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

android:singleLine="true"
android:scrollHorizontally="false"
android:ellipsize="end"
1 голос
/ 27 июня 2011

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

 <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"/>

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

0 голосов
/ 30 августа 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...