100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 富文本在TextView中显示图片

富文本在TextView中显示图片

时间:2023-07-17 22:36:19

相关推荐

富文本在TextView中显示图片

最近在项目中有需求使用到了富文本,在android中我们设置TextView显示富文本,如果不涉及图片的话还是比较简单的

TextView tv = new TextView(this);Spanned spanned = Html.fromHtml(content);tv.setText(spanned);

但是如果html中有图片的话就会出现以下情况,原本会出现图片的地方出现了空格:

所以需要在填充富文本的时候对图片处理一下,Html中提供了两个方法

Html.fromHtml(String source);

Html.fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler);

其中三参的方法fromHtml可以处理图片的问题,需要匿名内部类实现 ImageGetter,第三个参数可以设置null;

同时因为 ImageGetter 内部类是根据URL来获取网络图片填充富文本的,所以是一个耗时操作,需要放在子线程中实现,而TextView的setTest又是更新UI的操作,所以可以利用Handler,完整代码如下:

private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 1:CharSequence charSequence = (CharSequence) msg.obj;if (charSequence != null) {hotActivityContent.setText(charSequence);hotActivityContent.setMovementMethod(LinkMovementMethod.getInstance());}break;default:break;}}};

private void setActivityContent(final String activityContent) {new Thread(new Runnable() {@Overridepublic void run() {Html.ImageGetter imageGetter = new Html.ImageGetter() {@Overridepublic Drawable getDrawable(String source) {Drawable drawable;drawable = ImageUtils.getInstance().getImageNetwork(source);if (drawable != null) {drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());} else if (drawable == null) {return null;}return drawable;}};CharSequence charSequence = Html.fromHtml(activityContent.trim(), imageGetter, null);Message ms = Message.obtain();ms.what = 1;ms.obj = charSequence;mHandler.sendMessage(ms);}}).start();}

/*** 连接网络获得相对应的图片* @param imageUrl* @return*/public Drawable getImageNetwork(String imageUrl) {URL myFileUrl = null;Drawable drawable = null;try {myFileUrl = new URL(imageUrl);HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();conn.setDoInput(true);conn.connect();InputStream is = conn.getInputStream();// 在这一步最好先将图片进行压缩,避免消耗内存过多Bitmap bitmap = BitmapFactory.decodeStream(is);drawable = new BitmapDrawable(bitmap);is.close();} catch (Exception e) {e.printStackTrace();}return drawable;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。