iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中用StaticLayout实现文本绘制自动换行详解
  • 910
分享到

Android中用StaticLayout实现文本绘制自动换行详解

自动自动换行Android 2022-06-06 01:06:24 910人浏览 八月长安
摘要

前言 使用canvas的drawText绘制文本是不会自动换行的,即使一个很长很长的字符串,drawText也只显示一行,超出部分被隐藏在屏幕之外。可以逐个计算每个字符的宽度,

前言

使用canvas的drawText绘制文本是不会自动换行的,即使一个很长很长的字符串,drawText也只显示一行,超出部分被隐藏在屏幕之外。可以逐个计算每个字符的宽度,通过一定的算法将字符串分割成多个部分,然后分别调用drawText一部分一部分的显示, 但是这种显示效率会很低。

StaticLayout是Android中处理文字换行的一个工具类, StaticLayout 已经实现了文本绘制换行处理,下面是如何使用 StaticLayout 的例子:

示例代码


package com.example.amdroidstaticlayoutdemo;
import android.support.v4.app.Fragment;
import android.text.Layout.Alignment;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.os.Build;
public class MainActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(new MyView(this));
 }
 public class MyView extends View { 
  Paint mPaint; //画笔,包含了画几何图形、文本等的样式和颜色信息 
  public MyView(Context context) { 
   super(context);  
  } 
  public MyView(Context context, AttributeSet attrs){ 
   super(context, attrs); 
  } 
  public void onDraw(Canvas canvas){ 
   super.onDraw(canvas); 
   TextPaint tp = new TextPaint();
   tp.setColor(Color.BLUE);
   tp.setStyle(Style.FILL);
   tp.setTextSize(50);
   String message = "paint,draw paint指用颜色画,如油画颜料、水彩或者水墨画,而draw 通常指用铅笔、钢笔或者粉笔画,后者一般并不涂上颜料。两动词的相应名词分别为p";
   StaticLayout myStaticLayout = new StaticLayout(message, tp, canvas.getWidth(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
   myStaticLayout.draw(canvas);
   canvas.restore();
  } 
 } 
}

这跟TextView的效果是一样的,其实TextView也是调用 StaticLayout 来实现换行的。

StaticLayout的构造函数有三个:


public StaticLayout(CharSequence source,
     TextPaint paint,
     int width,
     Layout.Alignment align,
     float spacingmult,
     float spacingadd,
     boolean includepad)
public StaticLayout(CharSequence source,
     int bufstart,
     int bufend,
     TextPaint paint,
     int outerwidth,
     Layout.Alignment align,
     float spacingmult,
     float spacingadd,
     boolean includepad)
public StaticLayout(CharSequence source,
     int bufstart,
     int bufend,
     TextPaint paint,
     int outerwidth,
     Layout.Alignment align,
     float spacingmult,
     float spacingadd,
     boolean includepad,
     TextUtils.TruncateAt ellipsize,
     int ellipsizedWidth)

android StaticLayout参数解释

StaticLayout(CharSequence source, int bufstart, int bufend,

TextPaint paint, int outerwidth,

Alignment align,

float spacingmult, float spacingadd,

boolean includepad,

TextUtils.TruncateAt ellipsize, int ellipsizedWidth)

1.需要分行的字符串

2.需要分行的字符串从第几的位置开始

3.需要分行的字符串到哪里结束

4.画笔对象

5.layout的宽度,字符串超出宽度时自动换行。

6.layout的对其方式,有ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE 三种。

7.相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度。

8.在基础行距上添加多少

实际行间距等于这两者的和。

9.参数未知

10.从什么位置开始省略

11.超过多少开始省略

需要指出的是这个layout是默认画在Canvas的(0,0)点的,如果需要调整位置只能在draw之前移Canvas的起始坐标

canvas.translate(x,y);

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程网的支持。

您可能感兴趣的文章:Android LinearLayout实现自动换行效果Android LinearLayout实现自动换行浅谈Android textview文字对齐换行的问题Android自定View流式布局根据文字数量换行


--结束END--

本文标题: Android中用StaticLayout实现文本绘制自动换行详解

本文链接: https://www.lsjlt.com/news/21948.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在html5中使用canvas绘制文本自动换行
    怎么在html5中使用canvas绘制文本自动换行?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一个150*100的canvas画布,加个边框明显边界<canvas&nb...
    99+
    2023-06-09
  • JavaMe开发中怎么绘制可自动换行文本
    这期内容当中小编将会给大家带来有关JavaMe开发中怎么绘制可自动换行文本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。【问题描述】JavaMe Graphics类中的drawString不支持文本换行,...
    99+
    2023-06-17
  • Android绘制文本与图片及动效详解
    目录绘制文本绘制图片绘制路径逐帧动画补间动画绘制文本 绘制类 借助 Canvas 类进行绘制 通过重写View.onDraw 方法来进行旁白描绘 package com.mingri...
    99+
    2022-12-17
    Android绘制文本 Android绘制图片 Android绘制动效
  • 小程序 canvas 绘制文本实现换行,设置字距
    小程序 canvas 绘制文本实现换行,设置字距 在使用 canvas 绘制文本的过程中,对于很长的文本,canvas 不能自动的进行换行处理,另外小程序无法像 web 端那样很方便的使用 svg,所以在此做一个简单的记录。 浅析 在实现之...
    99+
    2023-12-22
    小程序 前端
  • Android开发TextView内的文字实现自动换行
    目录前言Layout构造方法:拓展具体实现前言 相信这个方法Canvas.drawText大家一定不陌生,TextView就是使用它将文字绘制出来。可是这个方法并没有文字换行的功能,...
    99+
    2024-04-02
  • 使用canvas怎么实现文本内容自动换行
    本篇文章为大家展示了使用canvas怎么实现文本内容自动换行,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。ctx: 画布的上下文环境content: 需要绘制的文本内容drawX: 绘制文本的x坐标...
    99+
    2023-06-09
  • Android自定义View实现绘制虚线的方法详解
    前言说实话当第一次看到这个需求的时候,第一反应就是Canvas只有drawLine方法,并没有drawDashLine方法啊!这咋整啊,难道要我自己做个遍历不断的drawLine?不到1秒,我就放弃这个想法了,因为太恶心了。方法肯定是有的,...
    99+
    2023-05-31
    android 自定义view 虚线
  • 怎么用css控制文本实现越界省略号以及自动换行
    这篇文章主要讲解了“怎么用css控制文本实现越界省略号以及自动换行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用css控制文本实现越界省略号以及自动换...
    99+
    2024-04-02
  • Android如何开发TextView内的文字实现自动换行
    这篇文章主要讲解了“Android如何开发TextView内的文字实现自动换行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android如何开发TextView内的文字实现自动换行”吧!L...
    99+
    2023-07-02
  • 【Flutter】Flutter 实现 Text 自动换行 解决长文本溢出问题
    文章目录 一、前言二、Flutter Text 组件简介三、Flutter Text 自动换行的重要性四、Flutter Text 自动换行的实现五、Flutter Text 自动换行的高级应...
    99+
    2023-09-23
    flutter javascript 前端 原力计划
  • css表格单元格中的长文本怎么实现自动换行
    这篇文章主要介绍“css表格单元格中的长文本怎么实现自动换行”,在日常操作中,相信很多人在css表格单元格中的长文本怎么实现自动换行问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 深入探讨PyCharm中自动换行的机制及实现
    在软件开发中,PyCharm是一款被广泛使用的集成开发环境。它能够为开发者提供丰富的功能和工具,使得编程变得更加高效和愉快。其中,自动换行功能是PyCharm中的一个重要特性,本文将深...
    99+
    2024-02-24
    pycharm 实现 换行原理
  • mybatis中实现枚举自动转换方法详解
    前言最近在工作中遇到一个问题,在设计数据库的时候,我们有时候会把表里的某个字段的值设置为数字或者为英文来表示他的一些特殊含义。就拿设置成数字来说,假如1对应是学生,2对应是教师,在Java里面定义成这样的枚举,但是一般使用mybatis查出...
    99+
    2023-05-31
    mybatis 枚举 自动转换
  • Android中怎么实现文本内容自动朗读功能
    Android中怎么实现文本内容自动朗读功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android提供了自动朗读支持。自动朗读支持可以对指定文本内容进行朗读,从而发生声音...
    99+
    2023-05-30
    android
  • Android使用kotlin实现多行文本上下滚动播放
    最近在项目中用到了上下滚动展示条目内容,就使用kotlin简单编写实现了一下该功能。 使用kotlin实现viewflipper展示textview的上下滚动播放 其中包含了kot...
    99+
    2024-04-02
  • Android中如何使用kotlin实现多行文本上下滚动播放
    本篇内容主要讲解“Android中如何使用kotlin实现多行文本上下滚动播放”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android中如何使用kotlin实现多行文本上下滚动播放”吧!使用...
    99+
    2023-06-26
  • 怎么用div+pre标签的组合实现文本原格式显示与自动换行
    这篇文章主要讲解了“怎么用div+pre标签的组合实现文本原格式显示与自动换行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用div+pre标签的组合实...
    99+
    2024-04-02
  • Android中应用前后台切换监听的实现详解
    前言最近在工作中遇到了这么一个需求:如何实现 Android 应用前后台切换的监听?下面来一起看看详细的介绍:iOS 内边是可以实现的,AppDelegate 给了一个回调监听:@UIApplicationMainclass AppDele...
    99+
    2023-05-31
    android 监听切换 前后台
  • Python中使用kitti数据集实现自动驾驶(绘制出所有物体的行驶轨迹)
    目录1、利用IMU、GPS计算汽车移动距离和旋转角度2、画出kitti车的行驶轨迹3、画出所有车辆的轨迹本次内容主要是上周内容的延续,主要画出kitti车的行驶的轨迹 同样的,我们先...
    99+
    2024-04-02
  • SQL Server使用脚本实现自动备份的思路详解
    因服务器安装的SQL Server版本不支持自动定时备份,需自行实现,大概思路为: 创建备份数据库的脚本 创建批处理脚本执行步骤一中的脚本 创建Window...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作