zoukankan      html  css  js  c++  java
  • TextView与Html相结合的具体方法?


    TextView与Html相结合的具体方法?


    android教程之textview解析带图片的html示例

    Android中的TextView,本身就支持部分的Html格式标签。这其中包括常用的字体大小颜色设置,文本链接等。使用起来也比较方便,只需要使用Html类转换一下即可。比如:

    textView.setText(Html.fromHtml(str));

    一、实现TextView里的文字有不同颜色

    import android.text.Html;

    TextView t3 = (TextView) findViewById(R.id.text3);
    t3.setText(Html.fromHtml( "<b>text3:</b> Text with a " + "<a href="http://www.google.com">link</a> " +"created in the Java source code using HTML."));

    二、TextView显示html文件中的图片
    我们知道要让TextView解析和显示Html代码。可以使用

    Spanned text = Html.fromHtml(source);
    tv.setText(text);

    来实现,这个用起来简单方便。
    但是,怎样让TextView也显示Html中<image>节点的图像呢?
    我们可以看到fromHtml还有另一个重构:

    fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
    实现一下ImageGetter就可以让图片显示了:

    ImageGetter imgGetter = new Html.ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {
    Drawable drawable = null;
    drawable = Drawable.createFromPath(source); // Or fetch it from the URL
    // Important
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
    .getIntrinsicHeight());
    return drawable;
    }
    };

    至于TagHandler,我们这里不需要使用,可以直接传null。

    ---------------------
    public class MainActivity extends Activity {

    private Handler handler;
    private String html;
    private TextView tv;
    private ProgressBar bar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 网上找的html数据
    html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>强调</strong></p><p><em>斜体</em></p>"
    + "<p><a href="http://www.jb51.net">超链接HTML入门</a>学习HTML!</p><p><font color="#aabb00">颜色1"
    + "</p><p><font color="#00bbaa">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6><p>大于>小于<</p><p>"
    + "下面是网络图片</p><img src="http://www.jb51.net/1207.jpg"/></body>"
    + "下面是网络图片</p><img src="http://www.jb51.net/207.jpg"/></body></html>";

    tv = (TextView) this.findViewById(R.id.id);
    bar = (ProgressBar) this.findViewById(R.id.id_bar);
    tv.setMovementMethod(ScrollingMovementMethod.getInstance());// 滚动


    handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {

    if (msg.what == 0x101) {
    bar.setVisibility(View.GONE);
    tv.setText((CharSequence) msg.obj);
    }
    super.handleMessage(msg);
    }
    };

    // 因为从网上下载图片是耗时操作 所以要开启新线程
    Thread t = new Thread(new Runnable() {

    Message msg = Message.obtain();
    @Override
    public void run() {

    bar.setVisibility(View.VISIBLE);
    /**
    * 要实现图片的显示需要使用Html.fromHtml的一个重构方法:public static Spanned
    * fromHtml (String source, Html.ImageGetterimageGetter,
    * Html.TagHandler
    * tagHandler)其中Html.ImageGetter是一个接口,我们要实现此接口,在它的getDrawable
    * (String source)方法中返回图片的Drawable对象才可以。
    */

    ImageGetter imageGetter = new ImageGetter() {
    @Override
    public Drawable getDrawable(String source) {

    URL url;
    Drawable drawable = null;
    try {
    url = new URL(source);
    drawable = Drawable.createFromStream(url.openStream(), null);
    drawable.setBounds(0, 0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());

    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    return drawable;
    }
    };

    CharSequence test = Html.fromHtml(html, imageGetter, null);
    msg.what = 0x101;
    msg.obj = test;
    handler.sendMessage(msg);
    }
    });

    t.start();
    }



    }

  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/awkflf11/p/5502746.html
Copyright © 2011-2022 走看看