-
2021-05-26 09:26:35
试试这种方式
创建这个功能
public void makeTextViewResizable(final TextView tv, final int maxLine, final String expandText) {
if (tv.getTag() == null) {
tv.setTag(tv.getText());
}
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = tv.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
if (maxLine <= 0) {
int lineEndIndex = tv.getLayout().getLineEnd(0);
String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
tv.setText(text);
} else if (tv.getLineCount() >= maxLine) {
int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
tv.setText(text);
}
}
});
}
如何使用
这将在第4行末尾写入“SeeMore”而不是“……”
makeTextViewResizable(tv, 4, "SeeMore");
现在不需要在xml中写这些行
android:ellipsize="end"
android:maxLines="3"
更多相关内容 -
label中省略号的位置
2016-03-03 10:09:09iOS4.0版本: ...以字符为显示单位显示,后面部分省略不显示。 label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。 label.lineBreakMode = NSLineBreakByTruncatiiOS4.0版本:
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显示,后面部分省略不显示。
label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字以……方式省略,显示尾部文字内容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容以……方式省略,显示头尾的文字内容。
label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略,显示头的文字内容。
label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显示,后面部分省略不显示。
iOS6.0版本://设置lable中文字过长时的显示格式
label.lineBreakMode = UILineBreakModeMiddleTruncation;
//截去中间
// typedef enum{
// UILineBreakModeWordWrap = 0,
// UILineBreakModeCharacterWrap,
// UILineBreakModeClip,//截去多余部分
// UILineBreakModeHeadTruncation,//截取头部
// UILineBreakModeTailTruncation,//截去尾部
// UILineBreakModeMiddleTruncation,//截去中间
// }
iOS6.0之后的版本:
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, // Wrap at word boundaries, default
NSLineBreakByCharWrapping, // Wrap at character boundaries
NSLineBreakByClipping, // Simply clip
NSLineBreakByTruncatingHead, // Truncate at head of line: "...wxyz"
NSLineBreakByTruncatingTail, // Truncate at tail of line: "abcd..."
NSLineBreakByTruncatingMiddle // Truncate middle of line: "ab...yz"
} NS_ENUM_AVAILABLE(10_0, 6_0);
-
Android TextView 超长文本自动添加省略号
2021-02-05 12:33:15//默认单行 //sp2px(getContext(), textsize) 单个中文的宽度,sp转换成px适应不同手机 int textWidth = sp2px(getContext(), textsize)*(getChineseNums(text)+(getNoChineseNums(text)+1)/2); if (textWidth>width...用法:
public void setTextMy(String text,float textsize,int width)只需要设置text,字体大小和TextView显示的宽度
源码:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
/**setText
* @param text 显示的字符串
* @param textsize 字体大小
* @param width TextView的宽度
*/
public void setTextMy(String text,float textsize,int width){
setSingleLine();//默认单行
//sp2px(getContext(), textsize) 单个中文的宽度,sp转换成px适应不同手机
int textWidth = sp2px(getContext(), textsize)*(getChineseNums(text)+(getNoChineseNums(text)+1)/2);
if (textWidth>width) {
int n = width/BaseUtils.sp2px(getContext(), textsize);
if(n-1
setText(text.substring(0, n-1)+"...");
}else{
setText(text);
}
}else{
setText(text);
}
}
/**字符串中,中文的字数
* @param str
* @return
*/
private int getChineseNums(String str) {
int byteLength = str.getBytes().length;
int strLength = str.length();
return (byteLength - strLength) / 2;
}
/**字符串中,非中文的字数
* @param str
* @return
*/
private int getNoChineseNums(String str) {
int byteLength = str.getBytes().length;
int strLength = str.length();
return strLength - (byteLength - strLength) / 2;
}
/**
* 将sp值转换为px值,保证文字大小不变
*
* @param spValue
* @param fontScale
* (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}
-
TextView 设置显示省略号
2016-07-29 14:29:46限制TextView显示的字符数,多出的部分显示省略号。 效果图如下: 自定义EllipsizingTextView.java,(com.example.user.helloworld.EllipsizingTextView)内容如下: public class EllipsizingTextView extends...限制TextView显示的字符数,多出的部分显示省略号。
效果图如下:
自定义EllipsizingTextView.java,(com.example.user.helloworld.EllipsizingTextView)内容如下:
public class EllipsizingTextView extends TextView { private static final String ELLIPSIS = "..."; private boolean isStale; private boolean programmaticChange; private String fullText; private int maxLength = -1; public EllipsizingTextView(Context context) { super(context); } public EllipsizingTextView(Context context, AttributeSet attrs) { super(context, attrs); } public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * 外部通过调用setMaxLength方法设置显示的最多字数为maxLength * @param maxLength */ public void setMaxLength(int maxLength) { this.maxLength = maxLength; } public int getMaxLength(){ return maxLength; } @Override protected void onTextChanged(CharSequence text, int start, int before, int after) { super.onTextChanged(text, start, before, after); if (!programmaticChange) { fullText = text.toString(); isStale = true; } } @Override protected void onDraw(Canvas canvas) { if (isStale) { super.setEllipsize(null); resetText(); } super.onDraw(canvas); } private void resetText() { int len = fullText.length(); String workingText = fullText; if (maxLength != -1) { if (len > maxLength) { workingText = fullText.substring(0, maxLength).trim(); workingText = workingText + ELLIPSIS; } } if (!workingText.equals(getText())) { programmaticChange = true; try { setText(workingText); } finally { programmaticChange = false; } } isStale = false; } }
如何使用呢?
1. Activity布局文件actiivty_main.xml中使用此自定义TextView,如下:
<com.example.user.helloworld.EllipsizingTextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。" android:maxLines="10"/>
2. 在Activity代码中获取EllipsizingTextView对象,首先定义EllipsizingTextView对象。
3.在onCreate(Bundle savedInstanceState)方法中获取tv_content对象,如下:private EllipsizingTextView tv_content;
4.设置最多显示字符数(设置最多显示120字符,超出部分使用省略号显示),如下:tv_content = (EllipsizingTextView) findViewById(R.id.tv_content);
tv_content.setMaxLength(120);
通过这种方式,适用于当行和多行的情况。
如果单行文本显示不完整末尾显示省略号,就简单多了。只需要在activity的布局文件,TextView节点添加属性:android:singleLine="true"和android:ellipsize="end"即可,如下:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" <strong>android:singleLine="true"</strong> android:text="Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。" <strong>android:ellipsize="end"</strong>/>
如果限制显示指定的行数,超出指定的行数显示省略号。已经有人自定义了
EllipsizingTextView类。
原文地址:http://code.taobao.org/p/android_jiudu/src/trunk/Forlind/src/com/wine/jiubang/ui/view/EllipsizingTextView.java 点击打开链接
代码如下:
package com.example.user.helloworld; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.text.Layout; import android.text.StaticLayout; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class EllipsizingTextView extends TextView { private static final String ELLIPSIS = "..."; public interface EllipsizeListener { void ellipsizeStateChanged(boolean ellipsized); } private final List<EllipsizeListener> ellipsizeListeners = new ArrayList<EllipsizeListener>(); private boolean isEllipsized; private boolean isStale; private boolean programmaticChange; private String fullText; private int mMaxLines = -1; private float lineSpacingMultiplier = 1.0f; private float lineAdditionalVerticalPadding = 0.0f; public EllipsizingTextView(Context context) { super(context); } public EllipsizingTextView(Context context, AttributeSet attrs) { super(context, attrs); // 开始没加这两行的时候,一直不对,maxlinex在textChange里面会被改变为-1 TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.maxLines }); setMaxLines(a.getInt(0, 2)); a.recycle(); } public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // 开始没加这两行的时候,一直不对,maxlinex在textChange里面会被改变为-1 TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.maxLines }); setMaxLines(a.getInt(0, 2)); a.recycle(); } public void addEllipsizeListener(EllipsizeListener listener) { if (listener == null) { throw new NullPointerException(); } ellipsizeListeners.add(listener); } public void removeEllipsizeListener(EllipsizeListener listener) { ellipsizeListeners.remove(listener); } public boolean isEllipsized() { return isEllipsized; } @Override public void setMaxLines(int maxLines) { super.setMaxLines(maxLines); this.mMaxLines = maxLines; isStale = true; } public int getMaxLine() { return mMaxLines; } public int getTextLines(){ return createWorkingLayout(fullText).getLineCount(); } @Override public void setLineSpacing(float add, float mult) { this.lineAdditionalVerticalPadding = add; this.lineSpacingMultiplier = mult; super.setLineSpacing(add, mult); } @Override protected void onTextChanged(CharSequence text, int start, int before, int after) { super.onTextChanged(text, start, before, after); if (!programmaticChange) { fullText = text.toString(); isStale = true; } } @Override protected void onDraw(Canvas canvas) { if (isStale) { super.setEllipsize(null); resetText(); } super.onDraw(canvas); } private void resetText() { int maxLines = getMaxLine(); String workingText = fullText; boolean ellipsized = false; if (maxLines != -1) { Layout layout = createWorkingLayout(workingText); if (layout.getLineCount() > maxLines) { workingText = fullText.substring(0, layout.getLineEnd(maxLines - 1)).trim(); Layout layout2 = createWorkingLayout(workingText + ELLIPSIS); while (layout2.getLineCount() > maxLines) { workingText = workingText.substring(0, workingText.length() - 1 - 1); layout2 = createWorkingLayout(workingText + ELLIPSIS); } workingText = workingText + ELLIPSIS; ellipsized = true; } } if (!workingText.equals(getText())) { programmaticChange = true; try { setText(workingText); } finally { programmaticChange = false; } } isStale = false; if (ellipsized != isEllipsized) { isEllipsized = ellipsized; for (EllipsizeListener listener : ellipsizeListeners) { listener.ellipsizeStateChanged(ellipsized); } } } private Layout createWorkingLayout(String workingText) { return new StaticLayout(workingText, getPaint(), getWidth() - getPaddingLeft() - getPaddingRight(), Layout.Alignment.ALIGN_NORMAL, lineSpacingMultiplier, lineAdditionalVerticalPadding, false); } @Override public void setEllipsize(TextUtils.TruncateAt where) { // Ellipsize settings are not respected } } } }
使用方法:
1 Activity类的布局文件activity_main.xml使用此自定义View,如下:
2 Activity类查找该组件<com.example.user.helloworld.EllipsizingTextView android:id="@+id/etv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。"/>
private EllipsizingTextView tv_content = (EllipsizingTextView)findViewById(R.id.etv); tv_content.setMaxLines(5);
最终实现的效果是:少于5行内容全部显示,超出5行内容不显示,且第5行末尾显示省略号。
-
切割字符串超出规定长度显示省略号,但是中文和英文显示长度不一样
2021-11-10 11:26:51可以使用css样式来解决,如果没有显示省略号,看看是否是行内元素,加上 display: block!important;即可。 display: block!important; width:60px; text-overflow:ellipsis; -o-text-overflow:ellipsis; -... -
css 超出文字显示省略号
2021-03-09 15:31:25这里写自定义目录标题单行省略号多行省略号 单行省略号 直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &... -
电脑wps里省略号怎么打相关阅读-电脑wps里省略号怎么打文章阅读-123文学网
2020-12-21 11:14:411、把电脑输入法调整为中文状态 2、按住键盘上SHIFT键的同时按住键盘横排数字键上的6,就能直接打出省略号了:……是不是很简单呢 很多刚刚接触电脑的人,不知道怎么打省略号。那么电脑怎么打出省略号呢?下面就让... -
table文字溢出显示省略号问题
2020-12-17 20:22:59table文字溢出显示省略号问题 今天遇到一个css样式问题: 如题,在table里面,th 的文字如果太长的话,想要显示省略号会使用下面三行代码: overflow: hidden;text-overflow: ellipsis;white-space: nowrap; 使用这... -
css常用的属性(边框三角形,文本省略号)
2022-03-16 19:48:03文章目录边框列表背景文本显示省略号 边框 边框相关属性 border-width 边框宽度 属性值:length(数值+单位)例如 width:10px border-style 边框样式 属性值: 常用 :solid 实线 dashed 虚线 double 双线 dotted ... -
CSS设置文本不换行多余文字显示省略号及顶部吸顶效果
2022-05-19 10:29:281.实现文字强制不换行 div{ white-space:nowrap } 2.一行文本不换行显示省略号 div{ width:200px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis } -
php 截图中文字符串带省略号
2017-09-05 16:36:41* 字符串截取,支持中文和其他编码 * @static * @access public * @param string $str 需要转换的字符串 * @param string $start 开始位置 * @param string $length 截取长度 * @param string $charset 编码... -
CSS 如何实现文字溢出隐藏时,隐藏左边或者右边,并显示省略号
2022-05-25 14:13:10CSS 如何实现文字溢出隐藏时,隐藏左边或者右边,并显示省略号 指定一个定宽高的盒子,当文字溢出,会换行显示出来。 .box { width: 60px; height: 30px; background-color: #ff000020; } 当限制文字不换行后,... -
溢出的文字省略号显示(单行文本溢出显示省略号,多行文本溢出显示省略号(了解)),常见布局技巧(margin...
2022-04-11 09:35:25溢出的文字省略号显示 单行文本溢出显示省略号 单行文本溢出显示省略号--必须满足三个条件: /*1. 先强制一行内显示文本*/ white-space: nowrap; ( 默认 normal 自动换行) /*2. 超出的部分隐藏*/ ... -
React-native Text文字展示不完需要将剩下的部分使用省略号...来处理
2021-06-22 17:58:05这个时候, 为了用户友好, 可以将展示不下的部分使用省略号代替。 我这里的例子是在app的顶部展示一段 "welcome back, XXX"的文字。 因为在顶部, 我们需要固定高度, 且最多只能展示两行字。 可以看到, 下图中... -
微信小程序的超出部分显示省略号和展开按钮(css方式实现)
2021-04-10 16:35:53一.使用场景 最近在仿写——起点中文网的微信小程序,在...上述样式实现省略号后,剩下最后一个,展开按钮需要出现在省略号后面 如果是在标签后面添加“展开按钮”,此方式行不通,无论怎样添加,省略号都会将后面的内容 -
web前端培训:CSS中单行文本溢出显示省略号的方法
2021-11-08 18:00:03CSS中单行文本溢出显示省略号的方法你知道吗?在web前端技术学习中,这个问题其实是属于老生常谈了,因为css单行文本的应用是非常频繁的,比如网站最基本的文章列表,标题会很长,而显示列表的区域宽度却没有这么宽,... -
[转] 英文写作中省略号的使用
2019-05-25 20:58:00汉语中的省略号是六个点,而且位置是居中的(……)。英语省略号是三个点,而且位置是居下的(…)。汉语的省略号要用中文字体,比如宋体、黑体,不能用西文字体,比如Times New Roman。英语的省略号要用西文字体,... -
echart饼图label超出绘图区域显示省略号
2018-09-20 21:06:31最近在工作遇到这样一个问题,在绘制饼图时,由于label文字过长,而超出...但是,这是canvas所以不能设div标签,再者,label的位置的不确定的,所以宽度也是不确定的。 再加上我们公司的需求比较奇葩,我们要做的是l... -
css中,显示省略号以及用js控制显示省略号
2016-10-21 11:00:06js 原理是:计算字节的方法,1个英文一个位置一个中文占两个位置,给一个总位置,处理获取的字符串再控制显示 function ellipsis(totalWords,ele) { var count = 0, text = $(ele).html(),//考虑换行导致... -
React+TS文本溢出隐藏并显示省略号,移入Tooltip显示全部内容
2022-05-25 15:55:11React+TS文本溢出隐藏并显示省略号,移入Tooltip显示全部内容。当div文字内容过多时显示省略号,并且鼠标移入文字区域tooltip显示全部内容;div文字内容没有溢出时鼠标移入不作tooltip。并且随着窗口变化而变化,... -
web前端总结之文本超出显示省略号
2016-12-03 21:37:50当网页中显示文字过多时,会出现如下样式的文字: 文字显示为省略号,当鼠标移上去时显示文字。 这就是文本超出显示省略号。 -
小程序Canvas逐行绘制文字,超出部分显示省略号
2020-04-15 16:18:51逐行绘制文字,超出显示省略号,这个在小程序需求中还是比较常见的,刚好也遇到了,网上试了很多方法,都不行,然后请教公司的大佬,然后封装了一个方法 //直接this点调用方法 //x , y 绘制的坐标 //maxWigth 绘制... -
vue echarts x轴文本过长,设置超出隐藏显示省略号,鼠标悬浮上显示全部
2021-10-09 15:01:26} chart2.on('mouseover', function (params) { // console.log(params) //注意这里,我是以X轴显示内容过长为例,如果是y轴的话,需要改为yAxis if (params.componentType == "xAxis") { //设置悬浮文本的位置以及... -
ThinkPhp中文字列表控制显示长度并加省略号
2018-07-05 10:15:16*+---------------------------------------------------------- * 字符串截取,支持中文和其他编码 *+---------------------------------------------------------- * @static * @access public ... -
【TextView】Android TextView显示省略号的问题(关于TextView maxLength 和maxEms的学习)
2016-10-19 18:15:571、TextView的属性maxLength和maxEms学习; 2、为什么有时候设置maxEms没效果 3、TextView省略号的显示 -
单元格超过一定长度显示省略号(...),鼠标悬浮显示全部内容
2019-10-04 20:28:56在实际应用中,有的单元格可能内容较多,如何能做到内容超出一定长度显示省略号(...),当鼠标移动到单元格的时候,显示全部内容呢? 2. 解决方案 2.1 方法一(直接用 FineReport 公式实现) 1)在A2... -
html标签label超出长度(文本溢出)时,不换行,而在最后边显示省略号
2019-09-04 16:50:18在label样式上直接写上 style="width:30px;height:20px;...溢出文本显示省略号,text-overflow:ellipsis 这个标题其实已经是一个老生常谈的问题了。很多时候,比如网站最基本的文章列表,标题会很... -
实现单行、多行文本溢出显示省略号...css方法和js方法汇总
2019-09-04 14:37:32实现单行、多行文本溢出显示省略号… ** 前提: 在项目过程成中, 经常会遇到文本溢出以省略号… 代替的情况出现, 我总结了四个方法。 1:单行文本的溢出显示省略号 overflow: hidden; text-overflow:ellipsis; ... -
js中字符串超长作固定长度加省略号(...)处理
2019-08-27 22:38:19由于JavaScript是unicode编码的,所有的字符对于它来说一个就是一个,但是后台程序不是,通常在后台程序中一个中文是占两个字节的,这就导致了前后端校验长度不一致,这个问题可以通过正则来解决。 有时候为了美观,...