自动换行StaticLayout的简单介绍

xiaoxiao2021-02-27  303

赠人玫瑰,手留余香,,,

昨天的项目中做到了一个生成图片打印的功能,其中用到了一个StaticLayout 这么一个Layout,在此记录下,希望能稍微对需要的小伙伴们有点帮助。 StaticLayout是一个 可以实现 自动换行的Layout,看别人说的,TextView的自动换行也是通过StaticLayout来实现的(只是看别人这么写,我并不知道)。然后如果我们可以在自定义view中通过这个Layout来实现自动换行,虽然简单,但是实用性大大的有! StaticLayout的功能在其构造方法中体现的淋漓尽致,大家看下面代码的注释就懂了 StaticLayout( CharSequence source, //需要分行的字符串 int bufstart, //分行的字符串从第几的位置开始 int bufend, //分行的字符串从第几的位置结束 TextPaint paint, int outerwidth, //宽度,字符串超出宽度时自动换行 Alignment align, //有ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE 三种 float spacingmult, //相对行间距,相对字体大小,1.5f表示行间距为1.5倍的字体高度 float spacingadd,. //在基础行距上添加多少实际行间距等于这两者的和。 boolean includepad, TextUtils.TruncateAt ellipsize, //从什么位置开始省略 int ellipsizedWidth //超过多少开始省略需要指出的是这layout是默认画在Canvas的(0,0)点的,如果需要调整位置只能在draw前移Canvas的起始坐标canvas.translate(x,y);

以上是StaticLayoutd 构造方法的介绍,抄过来的,感谢

http://blog.csdn.net/kongbaidepao/article/details/48247217

下面介绍我在项目中是使用吧,

/** * @param context * @return */ static public Boolean printBill(Activity context) { try { int height = 50 + 14 * 30; // 打印高度计算:每多一行加50 Bitmap bitmap = Bitmap .createBitmap(WIDTH, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawColor(Color.WHITE); TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG); paint.setStrokeWidth(1); paint.setColor(Color.BLACK); paint.setTypeface(Typeface.SANS_SERIF); String content = ""; StaticLayout layout; // 打印标题--购物小票 paint.setTextSize(32); content = "备注信息"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_CENTER, 1F, 0, false); canvas.translate(0, 0); layout.draw(canvas); // 分割线 content = "======================\r\n"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_NORMAL, 1F, 0, false); canvas.translate(0, 50); layout.draw(canvas); // 打印客户姓名 content = "客户姓名: " + customerName + "\r\n"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_NORMAL, 1F, 0, false); canvas.translate(0, 50); layout.draw(canvas); // 打印门店名称 content = "门店名称: " + orgName + "\r\n"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_NORMAL, 1F, 0, false); canvas.translate(0, 50); layout.draw(canvas); // 打印款项 content = "款项类型: " + type + "\r\n"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_NORMAL, 1F, 0, false); canvas.translate(0, 50); layout.draw(canvas); // 打印ERP单号 content = "ERP单号: " + erpCode + "\r\n"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_NORMAL, 1F, 0, false); canvas.translate(0, 50); layout.draw(canvas); // 打印HY单号 content = "HY单号: " + jtlOrderNo + "\r\n"; layout = new StaticLayout(content, paint, (int) (400), Layout.Alignment.ALIGN_NORMAL, 1F, 0, false); canvas.translate(0, 50); layout.draw(canvas); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); String path = Environment.getExternalStorageDirectory() + "/image.png"; System.out.println(path); FileOutputStream os = new FileOutputStream(new File(path)); bitmap.compress(Bitmap.CompressFormat.PNG, 100, os); os.flush(); os.close(); AppHelper.callPrint(context, path); return true; } catch (Exception e) { e.printStackTrace(); return false; } }

就这么简单,我也想多说点,可是再说下去说啥呢。我也很绝望啊,可我能怎么办,,,

转载请注明原文地址: https://www.6miu.com/read-1884.html

最新回复(0)