Html.fromHtml(url,imageGetter,TagHandler)重写ImageGetter 异步加载图片,加载图片之后重置TextView(EditView)的内容。
参数说明:source=需要展示的html文本内容,imageGetter=需要继承Html.ImageGetter接口实现逻辑,tagHandler=这个参数表示,当textView解析遇到无法识别的html标签是否发送通知或者消息,如果遇到无法解析的标签,该方法将会被调用。这个没有具体测试过,一般赋值null。
问题:1网络图片的加载不能阻塞主线程,因此需要异步加载 (ImageLoader 会好些 有缓存机制)
2加载图片之后无法正常显示(偏小) (使用Drawable.createFromResourceStream)
3重新设置图片大小之后在个别系统上会出现图片错位(这个暂时无法解决,还望有解决办法的共享一下解决思路)(没复现)
代码:
UrlDrawable :可以让你加载图片的时候显示初始的图片,也就是加载中的图片。
public class URLDrawable extends BitmapDrawable {
protected Drawable drawable;
@Override
public void draw (Canvas canvas) {
if (drawable != null ) {
drawable.draw(canvas);
}
}
}
UrlParser :重写ImageGetter.
public class URLImageParser implements Html .ImageGetter {
Context context;
EditText container ;
public URLImageParser(EditText editText, Context c) {
this .context = c;
this .container = editText;
}
public Drawable getDrawable(String source) {
URLDrawable urlDrawable = new URLDrawable();
ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask( urlDrawable);
asyncTask.execute(source);
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask <String , Void , Drawable > {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable drawable) {
this .urlDrawable = drawable;
}
@Override
protected Drawable doInBackground(String... params) {
String source = params[0 ];
return fetchDrawable(source);
}
@Override
protected void onPostExecute(Drawable result) {
if (result != null ){
urlDrawable.setBounds(0 , 0 , result.getIntrinsicWidth(), result.getIntrinsicHeight());
urlDrawable.drawable = result;
URLImageParser.this .container .invalidate();
URLImageParser.this .container .setHeight(URLImageParser.this .container .getHeight() + result.getIntrinsicHeight());
URLImageParser.this .container .setEllipsize(null );
}
}
public Drawable fetchDrawable(String urlString) {
try {
URL url = new URL(urlString);
Drawable drawable = Drawable.createFromResourceStream(context.getResources() , null ,url.openStream(), "src" , null );
if (drawable!= null ){
drawable.setBounds(0 , 0 , drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
return drawable;
}else {
return null ;
}
} catch (Exception e) {
return null ;
}
}
}
}
使用textView加载带网络图片的html内容需求是可以实现的,但是由于html支持的标签有限,自己实现会很复杂,例如自定义字体颜色、span标签等都不能很好的支持,所以选择了webview展示,相对于EditView来说,不可编辑但是展示效果和处理比EditView的效果好,不需要自己写需要解析的标签(坑)。图文并茂的页面还是使用webView比较好,但是webView是不是就完美解决了呢?然而并不是,毕竟webView加载页面是页面的内容,效果没有Android原生的好,同事使用webView加载页面在Android系统4.4+开始滑动页面会有明显的卡顿和跳帧,有些简直无法接受。
使用腾讯X5SDK优化webView加载腾讯X5SDK能够加速webView加载,优化滑动卡顿,效果还是比较明显的(没测),只是使用条件比较苛刻,在国内使用的APP还是可以考虑。
实现图文混排的另一种方式,不是对img标签
1.spanString
(http://blog.csdn.net/feizhixuan46789/article/details/10334441)