这里会涉及到实现原理的解析,如果只是需要使用轮子,请拉到最底下;

1. TextView 效果

首先,让我们先来看一下TextView的显示效果:

中文情况下还好,但是英文情况下的显示效果就不是很好看了,右边会留了很长的空白,对于追求用户体验的,这样的显示效果肯定是不能满足的;但是TextView内部也没有提供API给我们,那么就只能自己来实现了;

2. 对齐原理

原理:将一行剩余的宽度平分给当前单词的间距,这样来达到左右对齐的效果;

那么我们就有两种实现方案:

(1)TextView绘制一行的计算原理简单粗暴,就是计算这一行显示不下一个单词的时候,就进行回车换行;TextView已经手动给我们计算出了一行能显示多少的字符,那么我们只需要通过计算剩余的宽度再进行绘制即可;

会存在问题:如果一行存在单词较少的情况,就会出现间隔过大的问题;

比如

(2)通过手动计算一行能显示多少个字符,然后再计算剩余的宽度进行绘制;

这样只是比第一步多了个自己计算一行能显示多少个字符的操作;

但是这样也会存在问题:如果单词存在中英文混合,或者非中文的情况,会很大概率出现换行时单词被截断的问题;

比如

3. 最终方案

以上两种方案都会存在缺陷,那这样的话我们就得对出现的问题提出解决方案;

当前市场上有成熟的阅读软件,最常用的就是左右对齐的排版效果,来看看当前的阅读软件是怎么解决这些问题的;

先看一下微信读书app的显示效果:

再看一下掌阅app的显示效果:

微信读书和掌阅都是对这个过长的单词进行截断处理,然后使用“-”符号将这两个截断的单词连接起来,再进行绘制时就不会出现上述两种方案的问题;

那么最终方案就是:

通过手动计算一行能显示多少个单词,如果一行最后一个单词显示不下,则进行截断处理,中文则不不存在该问题,这里针对非中文的处理;然后再根据剩余空间进行绘制;

那么有了方案之后,接下来看看具体要怎么实现;

4. 最终实现

(1)先遍历当前页面的字符,将中英文截取为一个个单词,具体实现在getWordList(String text)方法里面;通过遍历当前的字符,判断如果为中文时,则为一个单词,非中文时则通过遍历该英文单词进行拼接,最后拼成一个非中文单词;

(2)通过遍历当前的单词,计算每一行要显示的单词集合,具体实现在getLineList(List frontList)这个方法里面;遍历单词时,当添加最后一个单词时,宽度已经超过一行显示的距离,那么就判断最后一个单词是否为中文,是的话则添加到下一行,否则的话则进行截断处理;

(3)通过第二步计算出来的每一行的单词,计算剩余的距离进行绘制;

5. 优化点

(1)代码里修改了绘制的逻辑后,那么关于TextView的一些基础属性也要进行适配;比如布局的方向,可以使用TextView自带的属性来进行设置;通过android:gravity=""和android:textAlignment=""属性来定义布局的文字方向,是居左还是居右边,这两个属性都可以进行设置,textAlignment属性的优先级比较高,如果同时设置的话,那么则以textAlignment属性为准;

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:textSize="16sp"

android:gravity="start"

android:textAlignment="textStart"/>

(2)对于实现的英文单词截断的效果,还有优化的地方,经过一些小伙伴的提醒,发现还可以通过音节的进行拆分,再去研究了一波微信读书和掌阅的截断效果,发现确实是使用了音节来进行截断,这样展示效果就更加完美了;

后面研究了一波资料后,发现可以通过元音来进行截断,英语单词的元音有5个,分别是a,e,i,o,u; 那么就可以通过元音加一个辅音的规则来进行截断;比如an,en之类的;这里只实现了一种规则来进行截断,其他的规则过于复杂,暂时没有引入;

看一下优化后的效果:

GitHub源码地址:

到这里就结束啦。

以上就是Android 实现文字左右对齐的详细内容,更多关于Android 文字左右对齐的资料请关注脚本之家其它相关文章!

android让字体左右对齐,Android 实现文字左右对齐相关推荐

  1. android灰字体什么意思,Android 6.0状态栏使用灰色文字和图标

    Android StatusBar中的字体和图标默认都是白色的,但是Android在6.0之前是没有办法更改这个颜色, 在Android 6.0中提供了一个SYSTEM_UI_FLAG_LIGHT_S ...

  2. android+设置字体行高,android textview设置字体的行距和字间距

    android textview设置字体的行距和字间距 字间距 textView有一个属性android:textScaleX是调节字间距的,它的值是一个float型.查看源代码,默认textView ...

  3. android html 字体颜色代码,Android TextView通过解析html显示不同颜色和大小

    先贴一张效果图 效果 介绍 通过SpannableString.SpannableStringBuilder可以很方便的给TextView加上各种各样的样式,比如不同的颜色和大小,这里就不多说了,具体 ...

  4. css如何实现文字两端对齐,CSS实现文字两端对齐的方法是什么

    CSS实现文字两端对齐的方法是什么 发布时间:2020-08-31 14:13:18 来源:亿速云 阅读:76 作者:小新 小编给大家分享一下CSS实现文字两端对齐的方法是什么,希望大家阅读完这篇文章 ...

  5. android实现字体靠右,Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)...

    一.需求: 标题可能写的不够全部,下面来看下图片,大家就明白是什么意思了.视频与票的图标跟在标题后面显示,当标题过长时icon显示到省略号-后(textview省略号显示,图标自动靠后). 二.问题解 ...

  6. android text字体居中显示,Android Canvas的drawText()和文字居中方案

    自定义View是绘制文本有三类方法 // 第一类 public void drawText (String text, float x, float y, Paint paint) public vo ...

  7. android 测量字体宽高,Android中测量Text的宽度和高度

    @(Android技术文章) 个人博客地址: 斯科特安的时间 Android中,在自定义View中通过Canvas绘制文字时,经常需要测量文字的宽度和高度. Paint.measureText (测量 ...

  8. android textview 字体颜色设置,Android textview 设置不同的字体大小和颜色

    在实际应用中,需要将一个字符串已不同的颜色,字体显示出来.当然完全可以通过不同textview拼接出来.也可以通过一个textview来展示. 步骤如下: 1.定义不同style . 不妨如下定义2个 ...

  9. android控制台字体大小设置,Android studio 4.1 豆沙护眼色配置、字体大小设置、内存大小设置...

    1.左边目录栏颜色配置: 2.代码编辑区域背景色设置 3.控制台背景色设置 4.菜单栏.工具栏.左边栏字体大小设置 6.修改内存大小.显示内存 例如:修改android-studio/bin/stud ...

  10. android里面字体的设置,Android中字体设置Font

    1.一般使用默认字体,可以使用以下四种安卓系统提供的字体. android:typeface="normal" android:typeface="sans" ...

最新文章

  1. OpenCV Manager package was not found Try to install it?
  2. 计算 sigmoid 函数的导数
  3. Wireshark数据分析IP
  4. QPainter类的CompositionMode各值含义
  5. C++11 标准新特性: 右值引用与转移语义
  6. Mysql外键约束foreign key
  7. 大型专利公司岗位设置
  8. WinDriver 驱动安装err e000024b,err e000022f解决办法
  9. [刀塔自走棋] 一些数据
  10. 《神奇的数学》读后感_奇妙的数学王国读后感10篇
  11. 十大热门行业公布 成都仍是跳槽首选
  12. 1008day1作业:字符串(方法、格式化、strip左右字符)、列表(方法、max、min、去重、统计个数、两列表比较取出大值zip合成新列表)、斐波那契、水仙花数、冒泡排序列表、计算器、九九乘法
  13. css解决transform 方法字体抖动
  14. OSPF状态切换以及包内容的交互,以及如何根据LSDB还原单区域拓扑
  15. 神奇的口袋——Java
  16. 苏大强说:这才是最适合SOHO的客户开发方法
  17. 第28章 LTDC—液晶显示中英文—零死角玩转STM32-F429系列
  18. MongoDB多层嵌套查询
  19. 大三学生——要不要上研究生?
  20. CnOpenData公共数据专区上新 | 中文金融情感词典

热门文章

  1. 代码调用SPSS功能执行分析
  2. 分解质因数_java
  3. S_ALR_87011963 No data selected
  4. ad采样正弦电压计算c语言程序,TMS320F2812 DSP编程之AD采样精度的校准算法(转)...
  5. qt_翻译文件常用缩写
  6. 喝杯java冷静一下是什么梗_大哥喝冰阔落是什么梗 喝冰阔落的出处在哪
  7. ArcGIS中通过JPG图片文件提取矢量要素
  8. 计算机在我们日常生活中越来越重要英语,怎么翻译因特网在我们日常生活中起着越来越重要的作用用英语-网络的重要性用英语-英语-戈驴聪同学...
  9. 有监督学习与无监督学习的区别
  10. 【计算技巧】分数复数的共轭--分数复数模的平方计算技巧