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

Ответ 1

Устаревшие:

Добавьте еще одно свойство android:singleLine="true" в текстовое окно

Обновлено:

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

Ответ 2

Следующее - это то, что я узнал, играя с различными параметрами для принудительного 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 = "конец"

<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 = "бегущая строка"

<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 явно устарел, я бы предпочел не использовать его, но когда я его принимаю out, область выделения больше не прокручивается. Однако вывод 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>

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

android:maxLength="13"

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

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

     } else {

            userName = data;

    }
        textView.setText(userName);

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

 android:maxLines="1"

Ответ 6

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

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

Уловка установлена ​​maxLines и minLines на одно и то же значение... и не просто android: lines = "2", не делает трюк. Также вы избегаете любых устаревших атрибутов.

Ответ 7

код:

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

XML:

android:maxLines = "5"

например.

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

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

Ответ 8

Вы можете ограничить количество текстовых символов и добавить (...) после текста. Предположим, вам нужно показать только 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: Я добавил чек на меньший персонаж в соответствии с вашим ограниченным номером. символов.

Ответ 9

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

Проверьте смелые текстовые представления Wyman Group, Jaskolski... enter image description here

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

Ответ 10

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

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

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

Ответ 11

Чтобы работать с атрибутом android: эллипсис, вы должны ограничить ширину макета макета 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"            
     />

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

Ответ 12

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

Ответ 13

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

android:singleLine="true"

Ответ 14

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

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

Ответ 15

Подход @Ажаршайха отлично работает.

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

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

test long_line_without_any_space_abcdefgh

TextView отобразит:

тест...

И я нашел решение для решения этой проблемы, заменив пробелы символом пробела unicode без прерывания, он превращает TextView в символы вместо слов:

yourString.replace(" ", "\u00A0");

Результат:

test long_line_without_any_space_abc...

Ответ 16

использование

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

TextView выглядит мой полный 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" />

Picture of <code>TextView</code>

Ответ 17

Вы просто измените

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>

Ответ 18

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

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

Ответ 19

        <TextView
            android:id="@+id/product_description"
            android:layout_width="165dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:text="Pack of 4 summer printed pajama"
            android:textColor="#d2131c"
            android:textSize="12sp"
            android:maxLines="2"
            android:ellipsize="end"/>