当前位置:网站首页>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
边栏推荐
- Tdengine already supports the industrial Intel edge insight package
- Uncover the practice of Baidu intelligent testing in the field of automatic test execution
- 【小技巧】獲取matlab中cdfplot函數的x軸,y軸的數值
- Mobile heterogeneous computing technology GPU OpenCL programming (Advanced)
- 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
- MySQL字符类型学习笔记
- 历史上的今天:第一本电子书问世;磁条卡的发明者出生;掌上电脑先驱诞生...
- 卷起來,突破35歲焦慮,動畫演示CPU記錄函數調用過程
- [system design] index monitoring and alarm system
- How Windows bat script automatically executes sqlcipher command
猜你喜欢

程序员如何活成自己喜欢的模样?

. Net delay queue

Solve liquibase – waiting for changelog lock Cause database deadlock

Advanced opencv:bgr pixel intensity map

程序员搞开源,读什么书最合适?

苹果 5G 芯片研发失败?想要摆脱高通为时过早

Implementation of smart home project

Officially launched! Tdengine plug-in enters the official website of grafana

基于单片机步进电机控制器设计(正转反转指示灯挡位)

Unity particle special effects series - the poison spray preform is ready, and the unitypackage package can be used directly - next
随机推荐
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
Unity粒子特效系列-毒液喷射预制体做好了,unitypackage包直接用 - 上
Why don't you recommend using products like mongodb to replace time series databases?
卷起來,突破35歲焦慮,動畫演示CPU記錄函數調用過程
程序员如何活成自己喜欢的模样?
Android SQLite database encryption
《剑来》语句摘录(七)
MySQL数字类型学习笔记
View Slide
Swift saves an array of class objects with userdefaults and nssecurecoding
Evolution of Baidu intelligent applet patrol scheduling scheme
单片机原理与接口技术(ESP8266/ESP32)机器人类草稿
【系统设计】指标监控和告警系统
钉钉、企微、飞书学会赚钱了吗?
The comparison of every() and some() in JS uses a power storage plan
Observation cloud and tdengine have reached in-depth cooperation to optimize the cloud experience of enterprises
硬核,你见过机器人玩“密室逃脱”吗?(附代码)
cent7安装Oracle数据库报错
oracle 多行数据合并成一行数据
[technical live broadcast] how to rewrite tdengine code from 0 to 1 with vscode