热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TextViewcanvas.drawText超出长度后...

遇到一个代码中需要自己在代码中去处理TextView超出长度的问题。总结一下TextView超出长度后怎么做。1、方法一:在xml中对TextView的属性进行配置TextView的限定长度:(在xm

遇到一个代码中需要自己在代码中去处理TextView超出长度的问题。

总结一下TextView超出长度后怎么做。


1、方法一:在xml中对TextView的属性进行配置

TextView的限定长度:(在xml中添加属性   android:singleLine="true"、android:ellipsize="end")

TextView中可以设置一个ellipsize属性,作用是当文字长度超过textview宽度时的显示方式:
Android:ellipsize=”start”—–省略号显示在开头 "...pedia"
android:ellipsize=”end”——省略号显示在结尾  "encyc..."
android:ellipsize=”middle”—-省略号显示在中间 "en...dia"
android:ellipsize=”marquee”–以横向滚动方式显示(需获得当前焦点时)
 
对于使用marquee即滚动显示方式的,需要当前textview获得焦点才会滚动。所以有时可能因为实际需要,textview未获得焦点或者需要多个textview都同时滚动显示时,可以采用以下办法:
因为判断textview是否处于focused状态是通过它本身isFocused()方法,这样只要此方法返回为true时,即认为处于focused的状态,就可以滚动啦。
所以可以通过继承TextView类,并override isFocused()方法来控制是否滚动咯。


2、方法二:在代码中限制

有些情况下Text完全是通过canvas画的形式实现的

下面是未做限制的TextView draw。在显示上会出现超出长度的现象

        mTextPaint.setAlpha((int) (255 * 0.4 * mTransAnimator.process));
mTextPaint.setTextSize(mDashSubTextSize);
String mytext = mSyncingSub;
canvas.drawText(mytext,centerX,centerY + mTransDashSubText,mTextPaint);

修复方法是对mytext进行trim,然后再末尾加上...。主要依赖于两个方法,一个是measureText,一个是breakText

measureText是先计算文本的长度,breakText是对超出的情况下进行裁剪,最后+".."形成最终需要展示的文字

        mTextPaint.setAlpha((int) (255 * 0.4 * mTransAnimator.process));
mTextPaint.setTextSize(mDashSubTextSize);

String mytext = mSyncingSub;
if(mSyncingSub != null && mSyncingSub.length() >0) {
float textWidth = mTextPaint.measureText(mSyncingSub);
if ( textWidth> mDashBoardLength) {
int subIndex = mTextPaint.breakText(mSyncingSub, 0, mSyncingSub.length(), true, mDashBoardLength, null);
mytext = mSyncingSub.substring(0, subIndex-3)+"...";
}
}
canvas.drawText(mytext,centerX,centerY + mTransDashSubText,mTextPaint);



推荐阅读
author-avatar
大瑞Y
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有