让多行HTML文本如下:<div style="color: red;"><b>foo</b></div>
。之所以可以是多行,是因为以下条件中的至少一个为真:a)文本很长或b)至少有一个<br />
。
目标是在使用Bitmap
构建的画布上绘制此文本。
我编写的最少代码如下(android.graphics.Canvas
,android.graphics.drawable.BitmapDrawable
...):
private BitmapDrawable addTextOnImage(BitmapDrawable bitmapDrawable) {
Bitmap bitmap = ...;
String caption = rich_editor_caption.getHtml();
StaticLayout mTextLayout_caption = StaticLayout.Builder.obtain(caption, 0, caption.length(), mTextPaint, bitmap.getWidth()).build();
Bitmap final_bitmap = Bitmap.createBitmap(bitmap.getWidth(), mTextLayout_caption.getHeight() + bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(final_bitmap);
mTextLayout_caption.draw(canvas);
return new BitmapDrawable(getActivity().getResources(), final_bitmap);
}
如果变量caption
包含HTML代码,则不会解释后者。换句话说:标签实际上将显示在结果图像中。
是否可以使Android应用解释该代码?
答案 0 :(得分:0)
StaticLayout.Builder.obtain.obtain(caption, 0, caption.length(), mTextPaint, bitmap.getWidth()).build() ;
在文档中,第一个参数是“ source CharSequence:
要布局的文本,可以选择使用范围,该值永远不能为null。”(https://developer.android.com/reference/kotlin/android/text/StaticLayout.Builder#obtain)
因此,请不要向其传递html代码的字符串,而应向其传递表示解释的html的具有跨度的字符序列。为此,应该使用 Html.fromHtml (https://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String,%20int))。
注意:这个答案是不完整的:即使使用了标记<b style="color: rgb(255, 0, 0);">Rrr</b>
,像Html.FROM_HTML_OPTION_USE_CSS_COLORS
这样的HTML也会被解释为没有颜色。