全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

前言

使用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);

总结

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


# staticlayout  # 换行  # android  # 文本换行  # Android LinearLayout实现自动换行效果  # Android LinearLayout实现自动换行  # 浅谈Android textview文字对齐换行的问题  # Android自定View流式布局根据文字数量换行  # 行间  # 很长  # 的是  # 多个  # 对其  # 三种  # 只显示  # 分别为  # 这篇文章  # 谢谢大家  # 很低  # 来实现  # 如何使用  # 涂上  # 这跟  # 这两者  # 前移  # 实现了  # 包含了 


相关文章: 如何选择高效可靠的多用户建站源码资源?  如何用y主机助手快速搭建网站?  如何用已有域名快速搭建网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何通过IIS搭建网站并配置访问权限?  如何在万网自助建站平台快速创建网站?  如何用腾讯建站主机快速创建免费网站?  制作表格网站有哪些,线上表格怎么弄?  如何在橙子建站上传落地页?操作指南详解  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何快速搭建安全的FTP站点?  小型网站建站如何选择虚拟主机?  微信推文制作网站有哪些,怎么做微信推文,急?  如何实现建站之星域名转发设置?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何在IIS中新建站点并配置端口与IP地址?  如何在香港免费服务器上快速搭建网站?  如何安全更换建站之星模板并保留数据?  手机网站制作与建设方案,手机网站如何建设?  内网网站制作软件,内网的网站如何发布到外网?  南京网站制作费用,南京远驱官方网站?  如何通过多用户协作模板快速搭建高效企业网站?  如何通过老薛主机一键快速建站?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何获取开源自助建站系统免费下载链接?  nginx修改上传文件大小限制的方法  如何在宝塔面板中修改默认建站目录?  如何高效完成独享虚拟主机建站?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  简单实现Android验证码  定制建站哪家更专业可靠?推荐榜单揭晓  建站主机选哪种环境更利于SEO优化?  浅析上传头像示例及其注意事项  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站之星CMS五站合一模板配置与SEO优化指南  高防服务器租用指南:配置选择与快速部署攻略  制作公司内部网站有哪些,内网如何建网站?  建站之星安装路径如何正确选择及配置?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何在香港服务器上快速搭建免备案网站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  沈阳制作网站公司排名,沈阳装饰协会官方网站?  网站网页制作专业公司,怎样制作自己的网页?  专业网站建设制作报价,网页设计制作要考什么证?  较简单的网站制作软件有哪些,手机版网页制作用什么软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。