Android中StaticLayout的简单实用

2024-06-14 14:48

本文主要是介绍Android中StaticLayout的简单实用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

StaticLayout在Android中实现自动换行多行文本,通过查看源码可以发现TextView内部也是通过这个类来实现的
父类是:
android.text.Layout
Layout的子类是:
StaticLayout:布局了以后不能进行编辑
DynamicLayout:可以进行编辑
BoringLayout:是一种非常简单的文本布局实现,它适合一行,并且全部是从左到右的字符。

StaticLayout中的构造方法已经不能使用,需要通过StaticLayout.Builder来使用

 

    init{layoutBuilder = StaticLayout.Builder.obtain(text_value, 0, text_value.length, Textpaint(), screenWidth)mStaticlayout = layoutBuilder.build()}override fun onDraw(canvas: Canvas?) {mStaticlayout.draw(canvas)}

在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);}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

运行效果图:

在这里插入图片描述
在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);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

以 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);
}说明参数的作用

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

这篇关于Android中StaticLayout的简单实用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060702

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则