一、TextView中HTML文本的显示
显示普通HTML文本
TextView.setText(Html.fromHtml(reasonstr, null, null));
显示带图片的HTML文本
TextView.setText(Html.fromHtml(reasonstr, imgGetter , null));
二、HTML文本中图片的异步加载
Android 4.0以后的最大特性—不允许使用UI线程进行耗时操作,导致了下面方法的失效
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blog_view);
Intent intent = getIntent();
Uri blogUri = intent.getData();
mPost = blogUri.toString();
mUrl = getIntent().getStringExtra("mUrl");
TextView textView = (TextView) findViewById(R.id.scrollView1);
textView.setText(Html.fromHtml(mPost, imgGetter, null));
}
private ImageGetter imgGetter = new ImageGetter(){
@Override
public Drawable getDrawable(String source){
Drawable drawable = Drawable.createFromPath(source);
try {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
}catch (NullPointerException e){
logException(e);
}
return drawable;
}
};
解决办法:一
AsyncTask(效率不高)
class HtmlImageGetter implements Html.ImageGetter {
final double windowsWidth = getWindowManager().getDefaultDisplay().getWidth() - txt_reason.getPaddingLeft() - txt_reason.getPaddingRight();
/**
* 获取图片
*/
@Override
public Drawable getDrawable(String source) {
LevelListDrawable d = new LevelListDrawable();
Drawable empty = getResources().getDrawable(
R.drawable.subject_dateil);
d.addLevel(0, 0, empty);
d.setBounds(0, 0, (int) windowsWidth,
empty.getIntrinsicHeight());
new LoadImage().execute(source, d);
return d;
}
/**
* 异步下载图片类
*/
class LoadImage extends AsyncTask<Object, Void, Bitmap> {
private LevelListDrawable mDrawable;
@Override
protected Bitmap doInBackground(Object... params) {
String source = (String) params[0];
mDrawable = (LevelListDrawable) params[1];
try {
InputStream is = new URL(source).openStream();
return BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 图片下载完成后执行
*/
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
BitmapDrawable d = new BitmapDrawable(bitmap);
mDrawable.addLevel(1, 1, d);
/**
* 适配图片大小
* 默认大小:bitmap.getWidth(), bitmap.getHeight()
* 适配屏幕:getDrawableAdapter
*/
mDrawable = getDrawableAdapter(StrollDetailActivity.this, mDrawable,
bitmap.getWidth(), bitmap.getHeight());
mDrawable.setLevel(1);
/**
* 图片下载完成之后重新赋值textView
*
*/
txt_reason.invalidate();
CharSequence t = txt_reason.getText();
txt_reason.setText(t);
}
}
/**
* 加载网络图片,适配大小
*
* @param context
* @param drawable
* @param oldWidth
* @param oldHeight
*
* @return
*/
public LevelListDrawable getDrawableAdapter(Context context,
LevelListDrawable drawable, int oldWidth, int oldHeight) {
LevelListDrawable newDrawable = drawable;
long newHeight = 0;// 未知数
int newWidth = (int) windowsWidth;// 默认屏幕宽
newHeight = (newWidth * oldHeight) / oldWidth;
newDrawable.setBounds(0, 0, newWidth, (int) newHeight);
return newDrawable;
}
}
}
解决办法:二(推荐)
Glide加载
Html.ImageGetter imageGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
final LevelListDrawable mDrawable = new LevelListDrawable();
final double windowsWidth = getWindowManager().getDefaultDisplay().getWidth() - txt_reason.getPaddingLeft() - txt_reason.getPaddingRight();
URL url;
Glide.with(StrollDetailActivity.this).load(source).asBitmap().placeholder(R.drawable.subject_dateil).into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
BitmapDrawable d = new BitmapDrawable(resource);
mDrawable.addLevel(1, 1, d);
double scale = (double) resource.getHeight() / (double) resource.getWidth();
int imgHeight = (int) (scale * windowsWidth);
int imgWidth = (int) windowsWidth;
mDrawable.setBounds(0, 0, imgWidth, imgHeight);
mDrawable.setLevel(1);
/**
* 图片下载完成之后重新赋值textView
*
*/
txt_reason.invalidate();
txt_reason.setText(txt_reason.getText());
}
});
return mDrawable;
}
};
用的LevelListDrawable 能自动重新绘制画布 需要加上 mDrawable.setLevel(1);
http://blog.csdn.net/maosidiaoxian/article/details/41673425
推荐链接: http://blog.csdn.net/fancylovejava/article/details/17930013
http://stackoverflow.com/questions/16179285/html-imagegetter-textview