在真机调试的时候遇到一个问题:
之前用WebView加载html文本的时候,使用的方式:
mWebViewDes.loadData(Html.fromHtml(des).toString(), “text/html”, “UTF-8”);
在华为note8上中文正常显示,
在华为nova2上测试,发现同样的代码在这里出现了乱码
百度搜索发现需要使用下面的方法:
mWebViewDes.loadData(Html.fromHtml(des).toString(), “text/html; charset=UTF-8”, null);
经测试,两边真机均正常显示中文。
================ 2019-09-20补充 ================
使用TextView加载富文本(包含图文)
代码如下(Kotlin写法):
tvHtml.text = Html.fromHtml(contentHtml, Html.FROM_HTML_MODE_COMPACT, Html.ImageGetter { source ->
Thread(Runnable {
mDrawable.addLevel(0, 0, resources.getDrawable(R.mipmap.ic_launcher))
mDrawable.setBounds(0, 0, 200, 200)
val bitmap: Bitmap
try {
bitmap = BitmapFactory.decodeStream(URL(source).openStream())
val msg = handler.obtainMessage()
msg.what = HANDLER_MESSAGE
msg.obj = bitmap
handler.sendMessage(msg)
} catch (e: Exception) {
e.printStackTrace()
}
}).start()
mDrawable
}, null)
private val handler = @SuppressLint("HandlerLeak")
object : Handler() {
override fun handleMessage(msg: Message) {
if (msg.what === HANDLER_MESSAGE) {
val bitmap = msg.obj as Bitmap
val drawable = BitmapDrawable(null, bitmap)
mDrawable.addLevel(1, 1, drawable)
mDrawable.setBounds(0, 0, bitmap.width, bitmap.height)
mDrawable.level = 1
val charSequence = tvHtml.text
tvHtml.text = charSequence
tvHtml.invalidate()
}
}
}
说明:
要显示图片需要通过Html.ImageGetter
因为图片是一个URL所以需要下载,是耗时的操作,所以这里开了个子线程进行下载,通过Handler在主线程进行更新文本。参考自:https://www.kaelli.com/21.html