2009-11-24 30 views
16

任何一个可以帮助我如何使用Html.ImageGetter显示图像使用HTML图像src标签?和示例或很好的教程Html.ImageGetter

回答

28

要从应用程序资源,首先得到的图像在文本文件中插入一个一个HTML图像标记是这样的:

<img src="my_image"> 

注意,“my_image”只是一个可绘制的名字不是路径。然后使用此代码diplay与图像中的文本的TextView

myTextView.setText(Html.fromHtml(myText, new ImageGetter() { 
    @Override public Drawable getDrawable(String source) { 
     Drawable drawFromPath; 
     int path = 
      myActivity.this.getResources().getIdentifier(source, "drawable", 
       "com.package..."); 
     drawFromPath = myActivity.this.getResources().getDrawable(path); 
     drawFromPath.setBounds(0, 0, drawFromPath.getIntrinsicWidth(), 
     drawFromPath.getIntrinsicHeight()); 
     return drawFromPath; 
    } 
}, null)); 

如果img标签源拼写错误的应用程序了会崩溃,因为该方法将无法找到可绘制,可加入使更多的代码,以防止这...

+0

感谢为我工作 – 2013-02-07 09:46:37

+0

因此,我们应该更加小心图像名称例如不flower.jpg它应该是花 – mehmet 2014-06-09 19:45:12

1
 
textView.setText(Html.fromHtml(htmlToSetAsText, new ImageGetter() {     
    @Override 
    public Drawable getDrawable(String source) { 
     String path = "/sdcard/" + source; 
     Drawable bmp = Drawable.createFromPath(path); 
     bmp.setBounds(0, 0, bmp.getIntrinsicWidth(), bmp.getIntrinsicHeight()); 

     return bmp; 
    } 
}, null)); 
5

从kape123的答案无疑帮助了我。我差不多在那里。

容易错过的位是在Drawable上调用setBounds。 Html.ImageGetter帮助文档还提供了一条线索,它说:

如果尚未设置边界,请确保在Drawable上调用setBounds()。

+0

略微加重的部分是如何他们并不完全告诉你如何做到这一点。为什么它不默认的内在价值观也超越了我。 – Erik 2014-08-11 16:43:31

+0

我有同样的问题。即没有设置边界。只是一个想法,他们不能抛出一个例外,以便我们能更快地了解这一点吗? – 2015-06-22 12:22:05

5

这里是一样的接受的答案,但作为一个顶级类(如果你想使用它从不同的地方是更好):

public class ResourceImageGetter implements ImageGetter { 
    private Context mContext; 

    public ResourceImageGetter(Context context) { 
     mContext = context; 
    } 

    @Override 
    public Drawable getDrawable(String source) { 
     Resources resources = mContext.getResources(); 
     int identifier = resources.getIdentifier(source, "drawable", mContext.getPackageName()); 
     Drawable res = resources.getDrawable(identifier); 
     res.setBounds(0, 0, res.getIntrinsicWidth(), res.getIntrinsicHeight()); 
     return res; 
    } 
}