Android, Как ограничить ширину TextView (и добавить три точки в конце текста)?


у меня есть TextView что я хочу ограничить символами. На самом деле, я могу это сделать, но то, что я ищу, - это как добавить три точки (...) в конце строки. Это показывает, что текст имеет продолжение. Это мой XML, но нет точек, хотя это ограничивает мой текст.

<TextView 
        android:id                      = "@+id/tvFixture"
        android:layout_width            = "wrap_content"
        android:layout_height           = "wrap_content"
        android:layout_toLeftOf         = "@id/ivFixture_Guest"
        android:text                    = "@string/test_06"
        android:lines                   = "1"
        android:ems                     = "3"
        android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        android:ellipsize="end"/>
18 225

18 ответов:

удалено:

добавить еще одно свойство android:singleLine="true" в вашем Textview

обновление:

android:ellipsize="end" 
android:maxLines="1"

вот что я узнал, играя с различными вариантами форсирования TextView до одной линии (с тремя точками и без них).

enter image description here

android: maxLines= "1"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:text="one two three four five six seven eight nine ten" />

это просто заставляет текст в одну строку. Любой дополнительный Текст скрыт.

по теме:

ellipsize= "end"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:text="one two three four five six seven eight nine ten" />

это отсекает текст, который не подходит, но позволяет пользователям знать, что текст был усечен путем добавления многоточия (три точки).

по теме:

ellipsize= "marquee"

<TextView
    android:id="@+id/MarqueeText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:text="one two three four five six seven eight nine ten" />

это делает текст прокрутки автоматически через TextView. Обратите внимание, что иногда он должен быть установлен в коде:

textView.setSelected(true);

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

по теме:

HorizontalScrollView с scrollHorizontally

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/horizontalScrollView">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:scrollHorizontally="true"
        android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>

это позволяет пользователю вручную прокручивать, чтобы увидеть всю строку текста.

попробуйте это свойство TextView в файле макета..

android:ellipsize="end"
android:maxLines="1"

Я так понимаю, вы хотите ограничить ширину до одной строки и не ограничивать ее символом? Так как singleLine является устаревшим, вы можете попробовать использовать следующее вместе:

android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"

например. вы можете использовать

android:maxLength="13"

это ограничит длину texview до 13, но проблема в том, если вы попытаетесь добавить 3 точки(...), он не будет отображать его, так как он будет частью длины textview.

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);

помимо этого вы должны использовать

 android:maxLines="1"

Я получил желаемый результат с помощью

android:maxLines="2"
android:minLines="2"
android:ellipsize="end"

трюк имеет значение maxlines, которое minLines и то же значение... и не только android: lines = "2", не делайте трюк. Также вы избегаете каких-либо устаревших атрибутов.

код:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml:

android:maxLines = "5"

например

выход: В Евангелии от Матфея 13, ученики спросили Иисуса, почему он говорит народу притчами. Он ответил: "тебе было дано знать...

вы можете ограничить количество символов вашего textview и добавить (...) после текста. Предположим, вам нужно показать только 5 букв, а затем вам нужно показать (...), Просто сделайте следующее :

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

немного Хак ^_^. Хотя это не очень хорошее решение. Но работа, вокруг которой работал для меня: D

EDIT: Я добавил проверку на меньший характер в соответствии с вашим ограниченным нет. из персонажей.

Я использую Horizonal Recyclerview.
1) здесь, в CardView, TextView искажается по вертикали при использовании

android:ellipsize="end"
android:maxLines="1"

Проверьте жирный TextViews Wyman Group, Jaskolski... enter image description here

2) но когда я использовал singleLine вместе с ellipsize -

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

Проверьте жирный TextViews Wyman Group, Jaskolski... enter image description here

2-е решение работало для меня правильно (используя singleLine). Также я протестировал в ОС версия: 4.1 и выше (до 8.0), он работает нормально без каких-либо сбоев.

вам нужно добавить следующие строки в макет для textview

android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"

надеюсь, что это работает для вас.

для работы с android: ellipsize атрибут, вы должны ограничить ширина макета на TextView, таких, что текст находится вне пределов видимости TextView.

и android: layout_width атрибут играет здесь ключевую роль, установите его соответственно.

один пример можно:

<TextView        
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:text="This is a very long text to be displayed"
    android:textSize="12sp"
    android:maxLines="1"            
     />

теперь, вот если текст in android: text= "это очень длинный текст, который будет отображаться" выходит из поля зрения из TextView с android: layout_width= "120dp",android: ellipsize= "end" обрежет текст и место ...(3 точки) после него. то есть это очень долго... будет отображаться в TextView.

Я думаю, что вы исправить высоту и ширину текстового представления. Тогда ваше решение будет работать.

вы можете написать эту строку в xml, где вы берете textview:

android:singleLine="true"

добавьте эти две строки в ваш текст

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

подход @AzharShaikh работает отлично.

android:ellipsize="end"
android:maxLines="1"

но я понимаю, что проблема в том, что TextView будет усечен словом (по умолчанию). Показать, если у нас есть текст, как:

тест long_line_without_any_space_abcdefgh

в поле TextView отображается:

просто

android: layout_width= "wrap_content"

используйте это ниже строки

android: layout_width= "match_parent"

<LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/visitBox"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/txvrequestTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="Abcdefghighiklmnon"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="@color/orange_color" />


        </LinearLayout>

вы можете сделать это xml:

<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />

использовать

  • android:singleLine="true"
  • android:maxLines="1"
  • app:layout_constrainedWidth="true"

это как мой полный TextView выглядит так:

    <TextView
    android:id="@+id/message_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:maxLines="1"
    android:singleLine="true"
    android:text="NAME PLACEHOLDER MORE Text"
    android:textColor="@android:color/black"
    android:textSize="16sp"

    android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />

картинка TextView