默认Textview显示中文英文效果如下,右边没有对齐

自定义TextView如下:

class AlignTextView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : AppCompatTextView(context, attrs, defStyleAttr) {private var alignOnlyOneLine = falseinit {val typedArray: TypedArray =context.obtainStyledAttributes(attrs, R.styleable.AlignTextView)alignOnlyOneLine = typedArray.getBoolean(R.styleable.AlignTextView_alignOnlyOneLine, false)typedArray.recycle()}override fun onDraw(canvas: Canvas?) {when (val content: CharSequence = text) {is String -> handleString(content, canvas)//不是String类型按原来的执行就完了else -> super.onDraw(canvas)}}private fun handleString(text: String, canvas: Canvas?) {val layout: Layout = layoutfor (i in 0 until layout.lineCount ) {val lineBaseLine = layout.getLineBaseline(i).toFloat() + paddingTopval lineStart = layout.getLineStart(i)val lineEnd = layout.getLineEnd(i)if (alignOnlyOneLine && layout.lineCount == 1) {//只有一行,并且采用了对齐方式val line = text.substring(lineStart, lineEnd)val width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, paint)drawScaledText(canvas, line, lineBaseLine, width)} else if (i == layout.lineCount - 1) {//最后一行canvas?.drawText(text.substring(lineStart),paddingLeft.toFloat(),lineBaseLine,paint)} else {//中间行val line = text.substring(lineStart, lineEnd)val width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, paint)drawScaledText(canvas, line, lineBaseLine, width)}}}/** 绘制当前行对齐*/private fun drawScaledText(canvas: Canvas?, line: String, lineBaseLine: Float, width: Float) {if (line.isEmpty())returnvar x = paddingLeft.toFloat()//判断最后一个字符是不是换行符val forceNextLine = line.toCharArray()[line.length - 1].toInt() == 10//下一行要换行if (forceNextLine || line.length - 1 == 0) {canvas?.drawText(line, x, lineBaseLine, paint)return}//计算出每个字符之间的间隔val d = (measuredWidth - width - paddingLeft - paddingRight) / (line.length - 1)for (element in line) {val c = element.toString()val vw = StaticLayout.getDesiredWidth(c, paint)canvas?.drawText(c, x, lineBaseLine, paint)x += vw + d  //下个字符的x坐标}}}

实现效果:

TextView文字左右对齐相关推荐

  1. Android TextView 文字两端对齐

    Android 自带的 TextView 的对齐方式只能左对齐或者右对齐,如果想要两端都对齐就需要自定义控件,但是有一个更简单的方法就是使用 WebView, 通过设置 text-align:just ...

  2. 如何实现以上垂直方向上两个TextView内文字左右对齐

    会员号 昵    称 如何实现以上垂直方向上两个TextView内文字左右对齐呢? 网上给出了各种,什么加空格,加标点,证明没有靠谱的! 最后想到一个最简单的方式: 1. 将所有文字字符串都增加到最大 ...

  3. android 换行乱_浅谈Android textview文字对齐换行的问题

    今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下. 经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下 ...

  4. TextView渲染机制与优化(StaticLayout),TextView上的文字分散对齐,TextView用处

    Android 字体适配的各种场景- https://github.com/wildma/FontAdaptation -- TextView中的.setText和.append的区别: setTex ...

  5. android让字体左右对齐,Android 模仿微信读书文字左右对齐效果

    原标题:Android 模仿微信读书文字左右对齐效果 本文作者 作者:Amter https://www.jianshu.com/p/020786e22a6f 左右对齐的文字效果,很常见,在大多数文章 ...

  6. Java安卓文字居中_设置TextView文字居中,代码实现android:layout_gravity

    设置TextView文字居中 android:gravity指的是控件的位置 而android:layout_gravity指的是这个layout的,是外面的 有2种方法可以设置TextView文字居 ...

  7. java 如何实现分散对齐_[Android]TextView实现分散对齐(两端对齐)

    TextView是个特别基础的Android控件,只要有文本基本就少不了它.但是最近在项目开发的过程中我发现TextView存在很多局限性,其中最令我头疼的就是TextView文本排版方面的问题.我们 ...

  8. HTML 标签包含规范,规避脱标流,图片和文字垂直居中对齐,

    1 标签包含规范 ◆div可以包含所有的标签. ◆p标签不能包含div h1等标签. ◆h1可以包含p,div等标签. ◆行内元素尽量包含行内元素,行内元素不要包含块元素. 2 规避脱标流 ◆尽量使用 ...

  9. div+css如何让一行内的文字两端对齐?

    css如何让一行内的文字两端对齐? text-align:justify;. text-justify语法:text-justify : auto |inter-word | newspaper | ...

最新文章

  1. Js打印表格时部分边框不显示(table 标签)
  2. linux宝塔如何开启gzip,宝塔nginx如何开启网站gzip
  3. OpenCV在图像上添加边框borders
  4. django【orm操作】
  5. python实现8大排序算法
  6. linux0.11中断描述符,Linux 0.11总结
  7. 还可以这样玩?揭秘打通线上线下新思路
  8. 把握初期企业的发展战略规划
  9. loadrunner——参数化
  10. vscode 添加库头文件_VSCode配置C/C++并添加非工作区头文件的方法
  11. 异步编程的优势和难点
  12. 关于AI拍照搜题的一些想法
  13. 银行行号和银行代码是一样的吗?区别是什么?
  14. Matlab 和 Simulink 教程学习基础入门
  15. Laravel 源码解读
  16. 如何批量将 Excel 文档转为 Json 格式
  17. 计算不可压缩流体 -- 数学基础
  18. PixiJS学习(5)几何图形
  19. 智道分析吊瓜子的营养价值
  20. 车牌识别分割定位_解析车牌识别系统有什么优势?

热门文章

  1. iOS重定向输出打印(NSLog、printf)
  2. linux笔记:安装程序后,使用时显示找不到命令(command not found)
  3. 一根电话线,教你如何电脑连电视
  4. 实现发送手机短信验证码功能
  5. C语言历史、特点、数据类型
  6. 使用docker-compose 大杀器来部署服务
  7. c#将字符串转换为数组_C# 字符串转数组
  8. Vue初学——计算属性Computed和Methods
  9. lol 服务器未响应,win7旗舰版玩英雄联盟出现登陆服务器未响应怎么办
  10. 通过chroot运行linux,通过chroot构建Linux操作系统