GettingSignals

TextViewに画像表示する

2012年1月26日
Posted by hina

AndroidでWebスクレイプしたHtmlを表示したくて、いろいろ試してみました。

WebViewに渡してやれば表示されるだろうと思ってたけど、
<img>タグで指定した画像が表示されなかったのです。
画像が?で表示されてしまう。

上がWebView
下がTextView

WebViewで<img>タグ使えないのかと勝手な思い込みで、
TextViewに表示してみることにしました。

表示させたいHtmlはこんな感じ。
// Header
String data = “<html><head><meta http-equiv=”content-type” content=”text/html;charset=UTF-8″></head>”;
//<img>タグ
data += “<div><img src=”http://3.bp.blogspot.com/-2wMCsaGbjZs/TYtTiejQmTI/AAAAAAAAAhI/MeZRZjvUX6c/s220/CIMG0998.JPG”></div> “;
// <a>タグ
data += “<a href=”http://gettingsignals.blogspot.com/”>gettingsignals</a>”;
TextViewに画像表示するにはHtml.ImageGetter()を使います。
        TextView textView = (TextView)findViewById(R.id.textView);
        // <a>タグに対応
        MovementMethod movementmethod = LinkMovementMethod.getInstance();
        textView.setMovementMethod(movementmethod);
        // <img>タグのsrcに指定された画像urlから画像を取得
        textView.setText(Html.fromHtml(data, new Html.ImageGetter(){
            public Drawable getDrawable(String source){
                // img srcで指定されたURLからDrawable を取得する
            Drawable d = doGetDrawable(source);
 
                // 取得した元画像のサイズを取得し、表示画像のサイズとする
            if(d != null) {
               int w = d.getIntrinsicWidth();
               int h = d.getIntrinsicHeight();
               d.setBounds(0, 0, w, h);
            }
                
                return d;
            }
        }, null));
// Drawableを取得するメソッド
public static Drawable doGetDrawable( String url )
{
Drawable drawable = null;
   try
   {
       HttpGet method = new HttpGet( url );
       DefaultHttpClient client = new DefaultHttpClient();
       method.setHeader( “Connection”, “Keep-Alive” );
       HttpResponse response = client.execute( method );
       int status = response.getStatusLine().getStatusCode();
       if ( status == HttpStatus.SC_OK ) {
       InputStream is = response.getEntity().getContent();
       drawable = Drawable.createFromStream(is, “”);
       is.close();
       }
   }
   catch ( Exception e )
   {
   e.printStackTrace();
       return null;
   }
   return drawable;
}
実装完了。
で、試してみる。
UnknownHostException
AndroidManifest.xml にパーミッションの追加漏れ。。
<uses-permission android:name=”android.permission.INTERNET”/>
もう一度、実行。
上がWebView
下がTextView
WebViewも表示されてる・・・。
単純にパーミッションの追加漏れが原因だったようです。
最後にWebViewのコード
        WebView webView = (WebView)findViewById(R.id.webView);
        webView.setWebViewClient(new WebViewClient() {});
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setPluginsEnabled( true );
// Headerはつけておくと文字化けとかしない。
        String data = “<html><head><meta http-equiv=”content-type” content=”text/html;charset=UTF-8″></head>”;
    data += “<div><img src=”http://3.bp.blogspot.com/-2wMCsaGbjZs/TYtTiejQmTI/AAAAAAAAAhI/MeZRZjvUX6c/s220/CIMG0998.JPG”></div> “;
        data += “<a href=”http://gettingsignals.blogspot.com/”>gettingsignals</a>”;
// webView.loadData()でもいいけど、特定の文字(%とか)が含まれてると表示されないらしい。
        webView.loadDataWithBaseURL(null, data, “text/html”, “UTF-8”, null);

 

Share

Comments are currently closed.

Follow

カレンダー

2024年4月
1234567
891011121314
15161718192021
22232425262728
2930