当前位置:网站首页>StaticLayout的使用详解
StaticLayout的使用详解
2022-07-05 09:41:00 【沙漠一只雕得儿得儿】
在Android开发中,Canvas.drawText不会换行,即使一个很长的字符串也只会显示一行,超出部分会隐藏在屏幕之外。
StaticLayout是android中处理文字的一个工具类,StaticLayout 处理了文字换行的问题,如如下示例:
package com.zhy.someuitest;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
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);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(Color.BLACK);
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, 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 超过多少开始省略
补充:TextView其实也是使用 StaticLayout
边栏推荐
- oracle和mysql批量Merge对比
- The Alipay in place function can't be found, and the Alipay in place function is offline
- Common fault analysis and Countermeasures of using MySQL in go language
- Tongweb set gzip
- On July 2, I invite you to TD Hero online press conference
- Tdengine already supports the industrial Intel edge insight package
- 天龙八部TLBB系列 - 关于包裹掉落的物品
- Analysis on the wallet system architecture of Baidu trading platform
- .Net之延迟队列
- MySQL digital type learning notes
猜你喜欢

自动化规范检查软件如何发展而来?

Unity particle special effects series - the poison spray preform is ready, and the unitypackage package can be used directly - next

Tdengine already supports the industrial Intel edge insight package

Six simple cases of QT

字节跳动面试官:一张图片占据的内存大小是如何计算

Unity粒子特效系列-毒液喷射预制体做好了,unitypackage包直接用 - 上

Mobile heterogeneous computing technology GPU OpenCL programming (Advanced)
![[tips] get the x-axis and y-axis values of cdfplot function in MATLAB](/img/08/2d039df6ea3ace8685512b2af8281d.png)
[tips] get the x-axis and y-axis values of cdfplot function in MATLAB

How to get the STW (pause) time of GC (garbage collector)?

How Windows bat script automatically executes sqlcipher command
随机推荐
盗版DALL·E成梗图之王?日产5万张图像,挤爆抱抱脸服务器,OpenAI勒令改名
Comment obtenir le temps STW du GC (collecteur d'ordures)?
Meitu lost 300 million yuan in currency speculation for half a year. Huawei was exposed to expand its enrollment in Russia. Alphago's peers have made another breakthrough in chess. Today, more big new
90%的人都不懂的泛型,泛型的缺陷和应用场景
Kotlin compose multiple item scrolling
钉钉、企微、飞书学会赚钱了吗?
QT timer realizes dynamic display of pictures
Is it really reliable for AI to make complex decisions for enterprises? Participate in the live broadcast, Dr. Stanford to share his choice | qubit · viewpoint
Analysis on the wallet system architecture of Baidu trading platform
ThreadLocal source code learning
Coffeescript Chinese character to pinyin code
Flutter development: a way to solve the problem of blank space on the top of listview
历史上的今天:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生...
La voie de l'évolution du système intelligent d'inspection et d'ordonnancement des petites procédures de Baidu
QT event filter simple case
Cross process communication Aidl
[C language] the use of dynamic memory development "malloc"
idea用debug调试出现com.intellij.rt.debugger.agent.CaptureAgent,导致无法进行调试
Are databases more popular as they get older?
单片机原理与接口技术(ESP8266/ESP32)机器人类草稿