Android 绘制文字换行问题

在绘制文字时,如果绘制内容的实际长度大于View的宽度,那么字符将在一行绘制,超出部分不显示。由于绘制函数onDraw没有对换行做逻辑处理,所以超出屏幕的部分便不可见了。如果还是想使用Canvas.drawText函数,那么需要对字符串做换行判断,然后分别绘制各行的字符串。看到一个简单的可行性方法,在此贴出代码:

		@Override
		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);

			TextPaint textPaint = new TextPaint();
			textPaint.setARGB(0xFF, 0, 0, 0);
			textPaint.setTextSize(14.0F);
			
			String aboutTheGame = "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD";
			
			StaticLayout layout = new StaticLayout(aboutTheGame, textPaint,
					getWindowManager().getDefaultDisplay().getWidth() - 4,
					Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true);
			canvas.translate(2, 0);
			layout.draw(canvas);
			
			DynamicLayout dynamicLayout = new DynamicLayout(aboutTheGame,
					textPaint,
					getWindowManager().getDefaultDisplay().getWidth() - 4,
					Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true);
			canvas.translate(2, 80);
			dynamicLayout.draw(canvas);
			
		}

 说明:

  • 此方法可以简单实现换行,但是效果有点瑕疵,尤其中文字符串;
  • 主要是利用StaticLayout或者DynamicLayout的draw方法来完成换行操作;

多说一句:如果想深入一点了解这个问题,还是看源码来的快!:)

猜你喜欢

转载自wangleyiang.iteye.com/blog/1771653