2013-06-16 2 views
10

Я использую андроид: ellipsize = «конец» в андроида файле XML, & удивительно я не получаю макет, который я хочу, 3 точки (...) показывая, но после этого точек есть другое слово, усеченное. Также это поведение «не всегда», проверьте, включен ли ListView, иногда поведение нормальное. & иногда нет.Странная проблема с андроид: ellipsize = «конец»

Вот скриншот макета из моего устройства,

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 является верхним жирным TextView, & iv_next_tier это маленький стрелка типа ImageView справа. & tv_news_content - это TextView, с которым мне сталкивается проблема.

Любое решение, почему я не получаю желаемый результат? Желаемый вывод означает всегда нормальное поведение - мне нужны эти 3 точки в конце второй строки tv_news_content TextView, а не до усеченного слова.

Любое предложение приветствуется.

+0

Что такое iv_next_tier? Я думаю, что это поможет нам лучше увидеть весь xml или, по крайней мере, контент RelativeLayout. – Cata

+1

Что произойдет, если вы измените 'maxLines =" 2 "' на 'lines =" 2 "'? –

+0

@ Ката, я уже упоминал, что iv_next_tier - это маленький вид стрелки ImageView, который вы видите в правом углу скриншота. Я обновляю xml, опубликую полный xml за минуту. – Khobaib

ответ

2

При настройке текста для текстового просмотра убедитесь, что текст не превышает 750 символов, поэтому используйте txt = theText.substring (0, 750) или что-то подобное перед вызовом settext. Это работает на эмуляторе с вашим фидом. и должно быть достаточно символов для 10-дюймового планшета тоже

+0

Я пробовал использовать h trial & error, 750 не работает, но когда я делаю текст длиной не более 300, он работает как для элемента # 3 & # 4. Когда я использовал 500, он работал на # 3, но не # 4. Мне интересно, в чем причина этого. Можете ли вы дать мне немного света? – Khobaib

+0

у вас нашли подходящее решение, так как это решение не подходит @Khobaib –

+0

нет Я еще не нашел подходящего решения @ChiragShah – Khobaib

-1

я использовал:

if (myModel.mDataText().length() > 150) { 
    mTextView.setText(Html.fromHtml(myModel.mDataText().substring(0, 150) + "...")); 
} else { 
    mTextView.setText(Html.fromHtml(myModel.mDataText() + "...")); 
} 
+0

Извините, я сказал себе, как я использовал –

+0

Я нахожу андроид: singleLine = "true", но я не тестирую !! можно проверить эту ссылку: http://stackoverflow.com/questions/6768977/text-does-not-ellipsize –

+0

@RahilTaavighi, я не хочу, чтобы это была одна строка. Я хочу, чтобы она была не более 2 лайнеров. – Khobaib

0

Посмотрите на this post. Существует настраиваемый EllipsizingTextView, который решает проблему эллипсирования для многострочного просмотра. Однако это может решить и вашу проблему.

14

Наконец-то нашел, что вызывало эту проблему в моем приложении!

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

Получается, что это был новый символ линии '\n'. Даже если новая строка была после эллипсиса, новый символ строки был [непоследовательно] вызвал эту проблему, если она была где-то внутри строки.

Проблема решается сделать что-то подобное следующему перед установкой текста на ваш взгляд:

text = text.replace('\n',' '); 
+0

Спасибо, я попробую. – Khobaib

+1

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

0

я испытывал такую ​​же проблему при отображении строки, содержащей HTML форматированный текст.

Снятие всех html-тегов с помощью myText.replaceAll("\\<.*?>","") решило проблему.

Вы также можете удалить HTML теги с помощью Html.fromHtml(myText).toString(), но обратите внимание, что вы должны использовать .ToString() и не применять выход fromHtml непосредственно к TextView. Если некоторые специальные символы закодированы html (& amp, & gt, & lt ...), вы можете безопасно снова применить Html.fromHtml() к последней строке.

Смежные вопросы