3 回答
TA贡献1828条经验 获得超3个赞
如果您查看文档,Html.fromHtml(text)它会显示:
<img>HTML中的任何标签都将显示为通用替换图像,您的程序可以通过该替换图像进行浏览,并用实际图像替换。
如果您不想自己进行替换,则可以使用另一个Html.fromHtml()方法,该方法采用an Html.TagHandler和Html.ImageGetteras参数以及要解析的文本。
在您的情况下,您可以将解析null为,Html.TagHandler但Html.ImageGetter由于没有默认实现,因此您需要自己实现。
但是,您将要面临的问题是Html.ImageGetter需要同步运行,如果要从Web下载图像,则可能需要异步执行。如果可以在应用程序中添加要显示为资源的任何图像,则ImageGetter实现将变得更加简单。您可以通过以下方式摆脱困境:
private class ImageGetter implements Html.ImageGetter {
public Drawable getDrawable(String source) {
int id;
if (source.equals("stack.jpg")) {
id = R.drawable.stack;
}
else if (source.equals("overflow.jpg")) {
id = R.drawable.overflow;
}
else {
return null;
}
Drawable d = getResources().getDrawable(id);
d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}
};
不过,您可能想找出一些更聪明的方法,用于将源字符串映射到资源ID。
TA贡献1856条经验 获得超11个赞
这就是我使用的方法,不需要您对资源名称进行硬核化,并且会在没有找到任何内容的情况下先在您的应用程序资源中查找可绘制资源,然后在库存的android资源中查找可绘制资源-允许您使用默认图标等。
private class ImageGetter implements Html.ImageGetter {
public Drawable getDrawable(String source) {
int id;
id = getResources().getIdentifier(source, "drawable", getPackageName());
if (id == 0) {
// the drawable resource wasn't found in our package, maybe it is a stock android drawable?
id = getResources().getIdentifier(source, "drawable", "android");
}
if (id == 0) {
// prevent a crash if the resource still can't be found
return null;
}
else {
Drawable d = getResources().getDrawable(id);
d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
return d;
}
}
}
可以这样使用(示例):
String myHtml = "This will display an image to the right <img src='ic_menu_more' />";
myTextview.setText(Html.fromHtml(myHtml, new ImageGetter(), null);
- 3 回答
- 0 关注
- 726 浏览
相关问题推荐
添加回答
举报