English 中文(简体)
Android, 如何限制 TextView 的宽度( 在文本结尾处添加三点)?
原标题:Android, How to limit width of TextView (and add three dots at the end of text)?

我有一个 < code> 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"/>
最佳回答

<强 > 折旧:

在您的文本视图中添加一个属性 and mid: singleLine=" true"

<强 > 更新:

android:ellipsize="end" 
android:maxLines="1"
问题回答

以下是我通过玩弄各种选项,将 TextView 强迫成单行(有3点或没有3点)所学到的。

""https://i.sstatic.net/wlG9y.png" alt="此处输入图像描述"/ >

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

这就使得文本滚动自动跨过文本查看。 请注意, < a href="https:// stackoverflow. com/ a/3333855/3681880 > > 有时 需要设定代码 :

textView.setSelected(true);

假设and mid:maxLines="1, and mid:singleLine=" true" 基本上应该做同样的事情,而且由于单线是显然不使用它 我更希望不使用它,但是当我把它拿出来时,马奎不会卷动。但采用 maxLines 并不影响它。

相关:

HorizontalScrollView with 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>

这样用户就可以手动滚动查看整行文本 。

尝试您的布局文件中的文本视图属性...

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

您想要将宽度限制在一条线上, 而不是以字符限制它吗? 由于 < code> singleLine 已被折旧, 您可以一起尝试使用以下内容 :

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

。例如,您可以使用

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"

使用使用

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

 < code> TextView</code>

如果时间过长,应在案文结尾处添加步骤.:

  1. check that the text width is constant
  2. add these two lines android:ellipsize="end" android:maxLines="1"

限制布局中文本视图的完整代码 :

<TextView
        android:layout_width="75dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        android:textSize="15sp"
        android:textAllCaps="false"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="parent" />

I am using Horizonal Recyclerview.
1) Here in CardView, TextView gets distorted vertically when using

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

Check the bold TextViews Wyman Group, Jaskolski... enter image description here

但当我使用单线和椭圆时

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

Check the bold TextViews Wyman Group, Jaskolski... enter image description here

第二个解决方案对我有效(使用单线),我还用OS版本测试了4.1和以上(直到8.0),没有撞车。

代码 :

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

xml :

android:maxLines = "5"

例如:

马太十三岁时,门徒们问耶稣,为什么他用比喻对众人说话呢?他说:你们知道天国的奥秘,确已奉到你们了,但天国没有被赏赐他们。

Output: In Matthew 13, the disciples asked Jesus why He spoke to the crowds in parables. He answered, "It has been given to you to know...

我通过使用

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.

You can limit your textview s number of characters and add (...) after the text. Suppose You need to show 5 letters only and thereafter you need to show (...), Just do the following :

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: I have added check for less character as per your limited no. of characters.

您需要在文本视图的布局中添加以下行

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

希望这对你有用

为了与 < 坚固 > 和机器人: lilipp规模 < / strong > 属性合作, 您必须限制 < em > TextView < / em > 的 < 强度 > 宽度 < / 强度 >, 以免 < em > text < / em > 从 TextView 的视图中超出权限 。

因此, < 坚固 > 和机器人:layout_width 属性在此扮演关键角色, 并相应设定 。

一个 example 可以是:

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

现在, 如果 < 坚固 > 和 mid: text=" 中的 < em> text < 和 < 坚固 > 中 < text < / em > 中 < 这是要显示的很长的文字 " < / strong > 。 < 坚固 > / strong > 从“ TextView” 和“ 坚固的 > 和“ 120dp” < / 坚固的: layout_ width= " 120dp ", < 坚固的: 坚固的 > 和roid: end " < / / 坚固的 > 将会在文本V 中显示 < em > 和 < 坚固的 > 。 (3 dots) < / / 坚固的 >

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

我认为您给出了文本视图的固定高度和宽度。 那么您的解决方案就会有效 。

您可以在 xml 中写入此行, 在那里您可以选择 textview :

android:singleLine="true"

@AzharShaikh的接近方式运作良好。

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

但我意识到一个麻烦, 文本View 将会被单词缩短( 默认情况下) 。 显示我们是否有像 :

< pargen@ em > 测试长线_ line_ 没有_ anny_ space_ abcdefgh

TextView 将显示 :

<%% em> test

我找到了解决这个麻烦的解决方案, 将空格替换为 Unicode no-break space 字符, 它让 TextView 以字符而不是单词来包装 :

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

结果:

< pargen@ em > 测试长线_ line_ 没有_ anny_ space_ abc >

除了

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

您应该设置

android:layout_width="0dp"

也称为“匹配限制”,因为 lobin_content 值只是使框扩展以适合整个文本,而 ellipsize 属性无法产生效果。

三个点 < 强 > 简单 < /强 >

android:layout_width="100dp" <!--your dp or match_parent or 0dp>
android:maxLines="2" <!--count your line>
android:ellipsize="end"

在您的文本中添加这两个行

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

这样您就可以设定视图的最大长度, 同时, 您在结尾处将会有点 (“ num” 是您的 dp 数 ) :

android:maxWidth="{num}dp"
android:ellipsize="end"

您可以通过 xml 做到这一点:

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

设置android:maxLength="8" ,在 Textview

如果您想要设置您的String & gt; 5 。 然后设置文本视图5+3 的长度( 三点)

if (yourString.length()>5) // 
    {
        textview.setText(yourString.substring(0,5)+"...");
    }
    else {
        textview.setText(title);
    }

1. 设置静态 width like 7odp

2. 使用 android:ellipsize="end"

3. 使用 和机器人:maxLines="1

4. 使用 and midd: singleLine= " true" ,使用 和机器人: singleLine=" true"

<TextView
        android:id="@+id/tv_status"
        **android:layout_width="70dp"**
        android:layout_height="wrap_content"
        android:layout_marginEnd="@dimen/padding_8"
        android:gravity="center|center_horizontal"
        android:includeFontPadding="false"
        android:textColor="@color/black_2a"
        android:textSize="@dimen/text_size_1"
        **android:ellipsize="end"
        android:maxLines="1"
        android:singleLine="true"**
        app:layout_constrainedWidth="true"
        app:borrowStatusText="@{item.lenders[0].status}"
        app:layout_constraintEnd_toStartOf="@id/iv_vector"
        app:layout_constraintTop_toTopOf="parent" />

你只是改变...

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>




相关问题
Android - ListView fling gesture triggers context menu

I m relatively new to Android development. I m developing an app with a ListView. I ve followed the info in #1338475 and have my app recognizing the fling gesture, but after the gesture is complete, ...

AsyncTask and error handling on Android

I m converting my code from using Handler to AsyncTask. The latter is great at what it does - asynchronous updates and handling of results in the main UI thread. What s unclear to me is how to handle ...

Android intent filter for a particular file extension?

I want to be able to download a file with a particular extension from the net, and have it passed to my application to deal with it, but I haven t been able to figure out the intent filter. The ...

Android & Web: What is the equivalent style for the web?

I am quite impressed by the workflow I follow when developing Android applications: Define a layout in an xml file and then write all the code in a code-behind style. Is there an equivalent style for ...

TiledLayer equivalent in Android [duplicate]

To draw landscapes, backgrounds with patterns etc, we used TiledLayer in J2ME. Is there an android counterpart for that. Does android provide an option to set such tiled patterns in the layout XML?

Using Repo with Msysgit

When following the Android Open Source Project instructions on installing repo for use with Git, after running the repo init command, I run into this error: /c/Users/Andrew Rabon/bin/repo: line ...

Android "single top" launch mode and onNewIntent method

I read in the Android documentation that by setting my Activity s launchMode property to singleTop OR by adding the FLAG_ACTIVITY_SINGLE_TOP flag to my Intent, that calling startActivity(intent) would ...

From Web Development to Android Development

I have pretty good skills in PHP , Mysql and Javascript for a junior developer. If I wanted to try my hand as Android Development do you think I might find it tough ? Also what new languages would I ...

热门标签