版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014619545/article/details/81262175
方式一:
使用Html.fromHtml(html, urlImageParser, null)方法
代码:
URLImageParser urlImageParser = new URLImageParser(mContext, tvContent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// flags
// FROM_HTML_MODE_COMPACT:html块元素之间使用一个换行符分隔
// FROM_HTML_MODE_LEGACY:html块元素之间使用两个换行符分隔
tvContent.setText(
Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT, urlImageParser, null));
} else {
tvContent.setText(Html.fromHtml(html, urlImageParser, null));
}
//类是copy的
public class URLImageParser implements Html.ImageGetter {
private Context context;
private TextView tvContent;
private int actX;//实际的宽 放大缩小基于textview的宽度
private int actY;
public URLImageParser(Context context, TextView tvContent) {
this.context = context;
this.tvContent = tvContent;
//获取全屏大小
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
//我的textview有左右留边 margin
actX = metrics.widthPixels - 20;
actY = metrics.heightPixels;
}
@Override
public Drawable getDrawable(String source) {
final URLDrawable urlDrawable = new URLDrawable();
Glide.with(context).load(source).into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
BitmapDrawable bmd = (BitmapDrawable) resource;
Bitmap bitmap = bmd.getBitmap();
int x = bitmap.getWidth();
int y = bitmap.getHeight();
if (x > actX || y > actY) {
//进行等比例缩放程序
Matrix matrix = new Matrix();
matrix.postScale((float) (actX * 1.00 / x), (float) (actX * 1.00 / x));
//长和宽放大缩小的比例
bitmap = Bitmap.createBitmap(bitmap, 0, 0, x, y, matrix, true);
}
urlDrawable.bitmap = bitmap;
urlDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
tvContent.invalidate();
tvContent.setText(tvContent.getText()); // 解决图文重叠
}
});
return urlDrawable;
}
public class URLDrawable extends BitmapDrawable {
protected Bitmap bitmap;
@Override
public void draw(Canvas canvas) {
if (bitmap != null) {
canvas.drawBitmap(bitmap, 0, 0, getPaint());
}
}
}
}
方法二:
使用WebView来显示:
//webview的通用设置
WebSettings webSettings = tvContent.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setJavaScriptEnabled(true);//支持js
webSettings.setDomStorageEnabled(true);
//去掉网页的滚动条
tvContent.setHorizontalScrollBarEnabled(false);//水平不显示
tvContent.setVerticalScrollBarEnabled(false); //垂直不显示
tvContent.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
//设置加载动画
tvContent.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress >= 99) {
umi.dismissLoading();
} else {
umi.showLoading();
}
}
});
//Jsoup 引入的处理jar包,可以针对某些类型来设置其属性
Document parse = Jsoup.parse(html);
Elements imgs = parse.getElementsByTag("img");
Elements videos = parse.getElementsByTag("video");
//设置图片 的宽度为100% 高度为自动
if (!imgs.isEmpty()) {
for (Element e : imgs) {
imgs.attr("width", "100%");
imgs.attr("height", "auto");
}
}
//设置视频 的宽度为100% 高度为自动
if (!videos.isEmpty()) {
for (Element e : videos) {
videos.attr("width", "100%");
videos.attr("height", "auto");
}
}
String content = parse.toString();
tvContent.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);
使用上述webview方式,要下载jsoup的jar包:jsoup-1.8.1.jar
对比上面的两种方法,感觉webview的展示要更加完美,推荐使用webView方式。