Android,如何限制TextView的宽度(并在文本的末尾添加三个点)?
我有一个TextView
,我想限制它的字符。 其实,我可以做到这一点,但我正在寻找的是如何在string的末尾添加三个点(…)。 这一个显示文本已经继续。 这是我的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"/>
推荐使用:
在Textview中添加一个属性android:singleLine="true"
更新:
android:ellipsize="end" android:maxLines="1"
以下是我通过使用各种选项强制TextView
到单行(带和不带三个点)学到的。
机器人: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" />
这只是迫使文本一行。 任何额外的文字被隐藏。
有关:
- 机器人:MAXLINES
- android:singleLine (注意这个和这个 )
- 安卓线
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 =“开始”(… aaabbbccc)
- ellipsize =“middle”(aaa … ccc)
- android:ellipsise,选项的含义
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 显然不赞成使用,我不想使用它,但是当我把它拿出来,滚动字幕不再滚动了。 尽pipemaxLines
不会影响它。
有关:
- Android中的选取框文字
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"
你可以限制你的文本视图的字符数,并在文本后添加(…)。 假设您只需要显示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 }
有点破解^ _ ^。 虽然它不是一个好的解决scheme。 但是一个围绕着我的工作:D
编辑:我已经添加检查less字符根据您有限的没有。 字符。
你可以在XML文件中写这行:
android:singleLine="true"
码:
TextView your_text_view = (TextView) findViewById(R.id.your_id_textview); your_text_view.setEllipsize(TextUtils.TruncateAt.END);
XML:
android:maxLines = "5"
例如
在马太福音13章,门徒问耶稣他为什么用比喻对众人说话。 他回答说:“已经赐给你们要知道天国的奥秘,但他们却没有得到。
输出:在马太福音13章,门徒问耶稣为什么他用比喻对人群说话。 他回答说:“已经给你知道…
我通过使用得到了期望的结果
android:maxLines="2" android:minLines="2" android:ellipsize="end"
技巧是设置maxLines和minLines为相同的值…不只是android:lines =“2”,不要做伎俩。 你也在避免任何被弃用的属性。
为了使用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" />
现在,如果在android:text =“这是一个非常长的文本要显示”的文本在 android:layout_width =“120dp”的 TextView中出现, android:ellipsize =“end”会截断文本 ,之后放置…(3个点) 。 即这是非常长的…将显示在TextView中。
我认为你给定了文本视图的高度和宽度。 那么你的解决scheme将工作。
您需要在textview的布局中添加以下行
android:maxLines="1" android:ellipsize="end" android:singleLine="true"
希望这对你有用。
在文本中添加这两行
android:ellipsize="end" android:singleLine="true"
@AzharShaikh的做法很好。
android:ellipsize="end" android:maxLines="1"
但我意识到一个麻烦,即TextView将被截断(默认情况下)。 显示是否有如下文字:
testinglong_line_without_any_space_abcdefgh
TextView将显示:
testing…
我发现解决scheme来处理这个麻烦,用unicode不间断空格replace空格字符,它使TextView换行而不是单词:
yourString.replace(" ", "\u00A0");
结果:
testinglong_line_without_any_space_abc …
你只是改变
机器人:layout_width = “WRAP_CONTENT”
使用下面这行
机器人: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" />