2011年7月9日 星期六

在 TextView 上顯示圖片

有時我們會利用 Html.fromHtml 將 html 字串丟給 TextView 以顯示較為明顯的文字…
若該 html 中有圖片時,是否能在 TextView 上顯示呢?答案是可以的…
利用 Html.formHtml 其中一個 Overload 傳入 ImageGetter callback

以下簡單示範繼承 TextView 並在上方顯示包含圖片 URL 的 html 字串…

HtmlTextView 的使用方法如下


HtmlTextView htmlTxtView = new HtmlTextView(this);
String htmlCode = "<img src='http://xxx.xxx.xxx/me.png'/><a href='http://xxx.xxx.xxx'><font color='#FF0000'>左邊有一張圖</font></a>";
htmlTextView.setText(htmlCode);


HtmlTextView 實作


import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.graphics.drawable.Drawable;

public class HtmlTextView extends TextView
{
public HtmlTextView(Context context)
{
super(context);
}

@Override
public void setText(CharSequence text)
{
setText(String.valueOf(text));
}

public void setText(String html)
{
super.setText(Html.fromHtml(html, getDrawableFromURL, null));
}

private ImageGetter getDrawableFromURL = new Html.ImageGetter()
{
@Override
public Drawable getDrawable(String source)
{
Drawable drawable = null;
try
{
URL url = new URL(source);
URLConnection conn = url.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
drawable = Drawable.createFromStream(is, "url img");
is.close();

// 視情況調整尺寸
//drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());

return drawable;
}
catch (Exception e)
{
}
return null;
}
};
}


題外話…記得這個哦…否則沒有連線能力自然抓不到圖片可以顯示…


<uses-permission android:name="android.permission.INTERNET"></uses-permission>

2 則留言:

  1. drawable = Drawable.createFromStream(is, "url img");

    請問String srcName == "url img"
    用途為何??
    謝謝賜教

    回覆刪除
  2. url img 只是興例…指的是該圖片的 URL

    回覆刪除