Textview解析带图片的html示例

 1 public class MainActivity extends Activity {
 2  private Handler handler;
 3  private String html;
 4  private TextView tv;
 5  private ProgressBar bar;
 6  @Override
 7  protected void onCreate(Bundle savedInstanceState) {
 8   super.onCreate(savedInstanceState);
 9   setContentView(R.layout.activity_main);
10   // 网上找的html数据
11   html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>强调</strong></p><p><em>斜体</em></p>"
12     + "<p><a href="http://www.jb51.net">超链接HTML入门</a>学习HTML!</p><p><font color="#aabb00">颜色1"
13     + "</p><p><font color="#00bbaa">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6><p>大于>小于<</p><p>"
14     + "下面是网络图片</p><img src="http://www.jb51.net/1207.jpg"/></body>"
15     + "下面是网络图片</p><img src="http://www.jb51.net/207.jpg"/></body></html>";
16   tv = (TextView) this.findViewById(R.id.id);
17   bar = (ProgressBar) this.findViewById(R.id.id_bar);
18   tv.setMovementMethod(ScrollingMovementMethod.getInstance());// 滚动
19   handler = new Handler() {
20    @Override
21    public void handleMessage(Message msg) {
22     // TODO Auto-generated method stub
23     if (msg.what == 0x101) {
24      bar.setVisibility(View.GONE);
25      tv.setText((CharSequence) msg.obj);
26     }
27     super.handleMessage(msg);
28    }
29   };
30   // 因为从网上下载图片是耗时操作 所以要开启新线程
31   Thread t = new Thread(new Runnable() {
32    Message msg = Message.obtain();
33    @Override
34    public void run() {
35     // TODO Auto-generated method stub
36     bar.setVisibility(View.VISIBLE);
37     /**
38      * 要实现图片的显示需要使用Html.fromHtml的一个重构方法:public static Spanned
39      * fromHtml (String source, Html.ImageGetterimageGetter,
40      * Html.TagHandler
41      * tagHandler)其中Html.ImageGetter是一个接口,我们要实现此接口,在它的getDrawable
42      * (String source)方法中返回图片的Drawable对象才可以。
43      */
44     ImageGetter imageGetter = new ImageGetter() {
45      @Override
46      public Drawable getDrawable(String source) {
47       // TODO Auto-generated method stub
48       URL url;
49       Drawable drawable = null;
50       try {
51        url = new URL(source);
52        drawable = Drawable.createFromStream(
53          url.openStream(), null);
54        drawable.setBounds(0, 0,
55          drawable.getIntrinsicWidth(),
56          drawable.getIntrinsicHeight());
57       } catch (MalformedURLException e) {
58        // TODO Auto-generated catch block
59        e.printStackTrace();
60       } catch (IOException e) {
61        // TODO Auto-generated catch block
62        e.printStackTrace();
63       }
64       return drawable;
65      }
66     };
67     CharSequence test = Html.fromHtml(html, imageGetter, null);
68     msg.what = 0x101;
69     msg.obj = test;
70     handler.sendMessage(msg);
71    }
72   });
73   t.start();
74  }
75  @Override
76  public boolean onCreateOptionsMenu(Menu menu) {
77   // Inflate the menu; this adds items to the action bar if it is present.
78   getMenuInflater().inflate(R.menu.main, menu);
79   return true;
80  }
81 }
原文地址:https://www.cnblogs.com/itpepe/p/4770043.html