android textview全角,bug-textview半角,英文展示不全
在android的原生TextView中遇到如图所示等情况,由于特殊符号半角、或者字母串等等,TextView自动分割机制作出的效果并不美观。
image.png
image.png
尝试方案:
添加半角转全角后—一个数字或字母占两个字符,看似一行占满,但是间隙变大,视觉效果差。如下图
image.png
image.png
最终解决方案:
获取每一个字符测量长度,手动添加换行符。重新设置text。
public class AutoSplitTextView extends TextView {
private String autoText;
private float textWidth;
private float textHeight;
private Paint textPaint;
public AutoSplitTextView(Context context) {
this(context,null);
}
public AutoSplitTextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public AutoSplitTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//解决首次渲染,没有补全的bug。
int mWidth = -1;
@Override
protected void onDraw(Canvas canvas) {
//onDraw可能会被多次调用,因此不是每次调用都需要重绘,这里做了个判断,text是否跟上一次一样,若一样,不再计算,否则重新计算赋值
if(mWidth != getWidth() || !autoText.equals(getText().toString()) ){
autoText=autoSplitText(this);
setText(autoText);
mWidth = getWidth();
}
super.onDraw(canvas);
}
private String autoSplitText(AutoSplitTextView textView) {
CharSequence rawCharSequence = textView.getText();
String originText = rawCharSequence.toString();//获取原始文本
textPaint = textView.getPaint();
textWidth = textView.getWidth() - textView.getPaddingLeft() - textView.getPaddingRight();
textHeight = textView.getHeight();
String allTextLines=originText.replaceAll("\n","");
StringBuilder stringBuilder = new StringBuilder();
if (textPaint.measureText(allTextLines)>textWidth){
//如果整行宽度超过控件所用宽度,则按字符测量,在超过可用宽度的最后一个字符添加换行符
float lineWidth = 0;
for (int i = 0; i < allTextLines.length(); i++) {
char textChar = allTextLines.charAt(i);
lineWidth += textPaint.measureText(String.valueOf(textChar));
if (lineWidth <= textWidth) {
stringBuilder.append(textChar);
} else {
stringBuilder.append("\n");
i--;
lineWidth = 0;
}
}
}else {
stringBuilder.append(allTextLines);
}
return stringBuilder.toString();
}
}
然后我们再来看一下
image.png
image.png
android textview全角,bug-textview半角,英文展示不全相关推荐
- java全角字符转换为半角 半角转全角
/// <summary>/// 判断字符是否英文半角字符或标点/// </summary>/// <remarks>/// 32 空格/// 33-47 标点// ...
- 全角字符和半角字符的概念
1. 什么是全角和半角? 全角–指一个字符占用两个标准字符位置. 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符.一般的系统命令是不用全角字符的,只是在作文字 ...
- php字符串里含有全角符号,php将字符串中全角字符转换为半角字符_PHP教程
php将字符串中全角字符转换为半角字符 php将字符串中全角字符转换为半角字符,摘自ecshop. /** * 将一个字串中含有全角的数字字符.字母.空格或'%+-()'字符转换为相应半角字符 * @ ...
- word全角字符改半角2021-09-24
使用中文输入法,输入的中文是全角字符,在半角状态下,输入的数字就是半角数字. 以搜狗拼音输入法为例,介绍全角.半角数字切换. 单击全角.半角数字切换按钮,即可进行全角.半角数字切换,半月形为半角数字, ...
- C#实现全角字符和半角字符转换
本文转自: http://blog.csdn.net/wangchao1982/article/details/1857444,写的很好,直接转了,谢谢! 很多的朋友都在学习和工作中遇到过全角和半角的 ...
- 去掉字符串两端的全角空格和半角空格(含源代码)
昨天,遇到了一个技术问题.本来我在程序中用的trim()方法来处理从JSP页面传来的值,后来在测试时,发现当我输入的是全角空格时,trim()方法失效. 需求是这样的,只是去掉字符串两端的空格(不论是 ...
- php 全角符号 转成半角,php全角字符转换为半角字符简单示例
这篇文章主要为大家详细介绍了php全角字符转换为半角字符简单示例,具有一定的参考价值,可以用来参考一下. 对php全角字符转换为半角字符简单示例感兴趣的小伙伴,下面一起跟随512笔记的小编巴闭妹来看看 ...
- ORACLE 全角数字转半角数字
数据库表 test 字段 id name age 全角数字:123456 半角数字:123456 length和lengthb的区别: length(123456) 6 le ...
- php全角数字转半角,php代码中全角数字如何转半角
php代码中全角数字转半角的方法:使用replace转换,代码为[for($i=0;$i php代码中全角数字转半角的方法: 把全角数字转为半角数字function GetAlabNum($fnum) ...
最新文章
- 如何在网站上同步查看BCH数据
- 全面屏适配方案,终极版,华为隐藏导航栏解决方案
- linux查看内存、cpu等硬件信息
- java sequencefile_Hadoop SequenceFile数据结构介绍及读写
- css开头的文本格式,css文件开头怎么写
- java 怎么使用同名类_java两个不同名类 在里面建立两个同名的类 怎么破
- UI设计实用素材|数据可视化UX套件
- get url img
- ps-色彩饱和度的设计
- win7下ngnix mysql php的安装_windows7下nginx +mysql+多版本PHP共存安装方法
- linux之 sed命令
- 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验01 顺序程序设计(2021级)
- 用python实现单词本功能
- Lodop6.226_Clodop3.075.zip
- 考研,我就推荐几个常用的APP
- cad怎么把图层英文变成中文_CAD图层中英文对照表.pdf
- 二手交易app manifest.xml
- 删除SATA硬盘安全删除硬件图标
- 北京市高等教育自学考试2023年教材信息表
- Co掺杂Fe3O4@MnO2/PDMS-TEOS@Fe3O4 聚二甲基硅氧烷修饰正硅酸四乙酯@四氧化三铁
热门文章
- 微信小程序单行文本溢出部分省略号显示无效
- 袋鼠云数智之旅·德清站|受邀出席数字旅游最佳实践高峰论坛,分享数智良渚建设经验
- Python-文件和文件夹的移动、复制、删除、重命名
- iwatch可以用计算机吗,Apple Watch能接电脑么?连接方法教程
- 百度图说——零编程玩转ECharts图表
- 前端如何防止DDOS攻击
- 一位【田】姓学生的2016年【java】小游戏全码
- 53岁周鸿祎考上清华博士;图灵奖得主杨立昆炮轰ChatGPT:五年内就没人用了;Red Hat恪守对开源的承诺|极客头条...
- iOS保存视频到相册
- 中秋节的HTML5制作,中秋节视频制作教程大放送-会声会影中文官网