Android, How to limit width of TextView (and add three dots at the end of text)?

前端 未结 21 1831
野的像风
野的像风 2020-12-02 03:44

I have a TextView that I want to limit characters of it. Actually, I can do this but the thing that I\'m looking for is how to add three dots (...) at the end o

相关标签:
21条回答
  • 2020-12-02 04:26

    In order to work with the android:ellipsize attribute, you have to limit the layout width of the TextView, such that the text is out of bounds from view of TextView.

    So, android:layout_width attribute plays a key role here, set it accordingly.

    One example can be:

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

    Now, here if the text in android:text="This is a very long text to be displayed" goes out of view from TextView with a android:layout_width="120dp", android:ellipsize="end" will truncate the text and place ...(3 dots) after it. i.e. This is very long... will be displayed in the TextView.

    0 讨论(0)
  • 2020-12-02 04:28

    You just change ...

    android:layout_width="wrap_content"
    

    Use this below line

    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>
    
    0 讨论(0)
  • 2020-12-02 04:29

    The approach of @AzharShaikh works fine.

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

    But I realize a trouble that TextView will be truncated by word (in default). Show if we have a text like:

    test long_line_without_any_space_abcdefgh

    the TextView will display:

    test...

    And I found solution to handle this trouble, replace spaces with the unicode no-break space character, it makes TextView wrap on characters instead of words:

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

    The result:

    test long_line_without_any_space_abc...

    0 讨论(0)
  • 2020-12-02 04:30

    I take it you want to limit width to one line and not limit it by character? Since singleLine is deprecated, you could try using the following together:

    android:maxLines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    
    0 讨论(0)
  • 2020-12-02 04:30

    I got the desired result by using

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

    The trick is set maxLines and minLines to the same value... and Not just android:lines = "2", dosen't do the trick. Also you are avoiding any deprecated attributes.

    0 讨论(0)
  • 2020-12-02 04:32

    eg. you can use

    android:maxLength="13"
    

    this will restrict texview length to 13 but problem is if you try to add 3 dots(...), it wont display it, as it will be part of textview length.

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

    apart from this you have to use

     android:maxLines="1"
    
    0 讨论(0)
提交回复
热议问题