第一次接触到staticLayout,是在自定义view歌词控件里。其实textView里面也使用了staticLayout。


在Android开发中,Canvas.drawText不会换行,即使一个很长的字符串也只会显示一行,超出部分会隐藏在屏幕之外。

而StaticLayout是android中处理文字的一个工具类,StaticLayout 处理了文字换行的问题,如如下示例:

public class StaticLayoutView extends View {StaticLayout staticLayout;public StaticLayoutView(Context context) {this(context, null);}public StaticLayoutView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public StaticLayoutView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);TextPaint textPaint=new TextPaint(Paint.ANTI_ALIAS_FLAG);textPaint.setColor(Color.RED);textPaint.setStyle(Paint.Style.FILL);textPaint.setTextSize(50);String text="在Android开发中,Canvas.drawText不会换行,即使一个很长的字符串也只会显示一行,超出部分会隐藏在屏幕之外.StaticLayout是android中处理文字的一个工具类,StaticLayout 处理了文字换行的问题";staticLayout=new StaticLayout(text, textPaint, canvas.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1.0f,0.0f , false);staticLayout.draw(canvas);}
}

运行效果图:

在Staticlayout的中构造参数有三个:

 public StaticLayout(CharSequence source, TextPaint paint,int width,Alignment align, float spacingmult, float spacingadd,boolean includepad) {this(source, 0, source.length(), paint, width, align,spacingmult, spacingadd, includepad);}public StaticLayout(CharSequence source, int bufstart, int bufend,TextPaint paint, int outerwidth,Alignment align,float spacingmult, float spacingadd,boolean includepad) {this(source, bufstart, bufend, paint, outerwidth, align,spacingmult, spacingadd, includepad, null, 0);}public StaticLayout(CharSequence source, int bufstart, int bufend,TextPaint paint, int outerwidth,Alignment align,float spacingmult, float spacingadd,boolean includepad,TextUtils.TruncateAt ellipsize, int ellipsizedWidth) {this(source, bufstart, bufend, paint, outerwidth, align,TextDirectionHeuristics.FIRSTSTRONG_LTR,spacingmult, spacingadd, includepad, ellipsize, ellipsizedWidth, Integer.MAX_VALUE);
}

以最后一个构造函数为例,说明参数作用:

CharSequence source 需要分行的字符串
int bufstart 需要分行的字符串从第几的位置开始
int bufend 需要分行的字符串到哪里结束
TextPaint paint 画笔对象
int outerwidth layout的宽度,超出时换行
Alignment align layout的对其方式,有ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE 三种
float spacingmult 相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度。
float spacingadd 在基础行距上添加多少
boolean includepad,
TextUtils.TruncateAt ellipsize 从什么位置开始省略
int ellipsizedWidth 超过多少开始省略

StaticLayout的介绍/使用相关推荐

  1. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  2. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  3. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  4. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  5. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  6. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

  7. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  8. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

  9. Tensorrt一些优化技术介绍

    Tensorrt一些优化技术介绍 Figure 1. A quantizable AveragePool layer (in blue) is fused with a DQ layer and a ...

最新文章

  1. MindSpore 高阶优化器
  2. 开启基于Query的实例分割新思路!腾讯华科提出QueryInst
  3. 路由器配置与管理完全手册(H3C篇)学习感想
  4. android apk签名工具_Android 应用修改为系统签名的方法(macOS)
  5. Python3 实现批量图像数据增强(扩增)并复制xml标签文件【目标检测笔记】
  6. ubuntu下eclipse新建项目没有java project的解决办法
  7. 使用u-boot的tftp下载功能烧写程序到Nand Flash ——韦东山嵌入式Linux学习笔记09
  8. Mybatis源码分析--Mapper接口的代理生成原理
  9. ElasticSearch、Logstash和Kiabana三个开源工具。
  10. Python3 爬虫实战 — 模拟登陆哔哩哔哩【滑动验证码对抗】
  11. r语言descstats_一条命令轻松绘制CNS顶级配图-ggpubr
  12. python数据存储系列教程——python对象与json字符串的相互转化,json文件的存储与读取
  13. 使用inno setup制作安装包
  14. linux中创建deamon进程的三种方法
  15. JavaScript 英文根据规则转成相对应的中文
  16. 基于麻雀算法的无人机航迹规划 - 附代码
  17. xorg方式在无图形环境安装oracle,告别静默安装
  18. 桌面整理助手 - DesktopAssistant 1.2.1.9
  19. muscle多序列比对简单应用
  20. 淘宝/天猫邻家好货 API 返回值说明

热门文章

  1. asp中如何输入html,ASP.NET中输入文本的HTML解析办法
  2. 关闭打开Excel弹出要安装“Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto”加载项
  3. Nacos系列:Nacos的三种部署模式
  4. Adaptive Execution让Spark SQL更高效更好用
  5. GitLab 已迁移至谷歌云平台,并表示目前运行良好
  6. 「镁客·请讲」NOLO VR张道宁:空间定位技术加持下的VR,是可以搞出商业价值的...
  7. 11.系统安全分析与设计
  8. 危机边缘第一季/全集Fringe迅雷下载
  9. 市场与需求带动 向智能安放转型成大势所趋
  10. java导出生成word