在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半角,英文展示不全相关推荐

  1. java全角字符转换为半角 半角转全角

    /// <summary>/// 判断字符是否英文半角字符或标点/// </summary>/// <remarks>/// 32 空格/// 33-47 标点// ...

  2. 全角字符和半角字符的概念

    1. 什么是全角和半角? 全角–指一个字符占用两个标准字符位置. 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符.一般的系统命令是不用全角字符的,只是在作文字 ...

  3. php字符串里含有全角符号,php将字符串中全角字符转换为半角字符_PHP教程

    php将字符串中全角字符转换为半角字符 php将字符串中全角字符转换为半角字符,摘自ecshop. /** * 将一个字串中含有全角的数字字符.字母.空格或'%+-()'字符转换为相应半角字符 * @ ...

  4. word全角字符改半角2021-09-24

    使用中文输入法,输入的中文是全角字符,在半角状态下,输入的数字就是半角数字. 以搜狗拼音输入法为例,介绍全角.半角数字切换. 单击全角.半角数字切换按钮,即可进行全角.半角数字切换,半月形为半角数字, ...

  5. C#实现全角字符和半角字符转换

    本文转自: http://blog.csdn.net/wangchao1982/article/details/1857444,写的很好,直接转了,谢谢! 很多的朋友都在学习和工作中遇到过全角和半角的 ...

  6. 去掉字符串两端的全角空格和半角空格(含源代码)

    昨天,遇到了一个技术问题.本来我在程序中用的trim()方法来处理从JSP页面传来的值,后来在测试时,发现当我输入的是全角空格时,trim()方法失效. 需求是这样的,只是去掉字符串两端的空格(不论是 ...

  7. php 全角符号 转成半角,php全角字符转换为半角字符简单示例

    这篇文章主要为大家详细介绍了php全角字符转换为半角字符简单示例,具有一定的参考价值,可以用来参考一下. 对php全角字符转换为半角字符简单示例感兴趣的小伙伴,下面一起跟随512笔记的小编巴闭妹来看看 ...

  8. ORACLE 全角数字转半角数字

    数据库表 test 字段 id  name age 全角数字:123456 半角数字:123456 length和lengthb的区别: length(123456)             6 le ...

  9. php全角数字转半角,php代码中全角数字如何转半角

    php代码中全角数字转半角的方法:使用replace转换,代码为[for($i=0;$i php代码中全角数字转半角的方法: 把全角数字转为半角数字function GetAlabNum($fnum) ...

最新文章

  1. 如何在网站上同步查看BCH数据
  2. 全面屏适配方案,终极版,华为隐藏导航栏解决方案
  3. linux查看内存、cpu等硬件信息
  4. java sequencefile_Hadoop SequenceFile数据结构介绍及读写
  5. css开头的文本格式,css文件开头怎么写
  6. java 怎么使用同名类_java两个不同名类 在里面建立两个同名的类 怎么破
  7. UI设计实用素材|数据可视化UX套件
  8. get url img
  9. ps-色彩饱和度的设计
  10. win7下ngnix mysql php的安装_windows7下nginx +mysql+多版本PHP共存安装方法
  11. linux之 sed命令
  12. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验01 顺序程序设计(2021级)
  13. 用python实现单词本功能
  14. Lodop6.226_Clodop3.075.zip
  15. 考研,我就推荐几个常用的APP
  16. cad怎么把图层英文变成中文_CAD图层中英文对照表.pdf
  17. 二手交易app manifest.xml
  18. 删除SATA硬盘安全删除硬件图标
  19. 北京市高等教育自学考试2023年教材信息表
  20. Co掺杂Fe3O4@MnO2/PDMS-TEOS@Fe3O4 聚二甲基硅氧烷修饰正硅酸四乙酯@四氧化三铁

热门文章

  1. 微信小程序单行文本溢出部分省略号显示无效
  2. 袋鼠云数智之旅·德清站|受邀出席数字旅游最佳实践高峰论坛,分享数智良渚建设经验
  3. Python-文件和文件夹的移动、复制、删除、重命名
  4. iwatch可以用计算机吗,Apple Watch能接电脑么?连接方法教程
  5. 百度图说——零编程玩转ECharts图表
  6. 前端如何防止DDOS攻击
  7. 一位【田】姓学生的2016年【java】小游戏全码
  8. 53岁周鸿祎考上清华博士;图灵奖得主杨立昆炮轰ChatGPT:五年内就没人用了;Red Hat恪守对开源的承诺|极客头条...
  9. iOS保存视频到相册
  10. 中秋节的HTML5制作,中秋节视频制作教程大放送-会声会影中文官网