Android中⽤StaticLayout实现⽂本绘制⾃动换⾏详解
前⾔
使⽤Canvas的drawText绘制⽂本是不会⾃动换⾏的,即使⼀个很长很长的字符串,drawText也只显⽰⼀⾏,超出部分被隐藏在屏幕之外。可以逐个计算每个字符的宽度,通过⼀定的算法将字符串分割成多个部分,然后分别调⽤drawText⼀部分⼀部分的显⽰,但是这种显⽰效
率会很低。
StaticLayout是android中处理⽂字换⾏的⼀个⼯具类, StaticLayout 已经实现了⽂本绘制换⾏处理,下⾯是如何使⽤ StaticLayout 的例⼦:⽰例代码
ample.amdroidstaticlayoutdemo;
import android.support.v4.app.Fragment;
Layout.Alignment;
StaticLayout;
TextPaint;
import android.app.Activity;
t.Context;
aphics.Canvas;
aphics.Color;
aphics.Paint;
android layout布局aphics.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) {
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){
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, Width(), Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
myStaticLayout.draw(canvas);
}
}
}
这跟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的起始坐标
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论