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();
    }



    }

  • 相关阅读:
    mysql进阶
    浅谈数据库查询操作时的顺序
    Problem C Emergency Evacuation 一道思维题
    c++随机生成树
    洛谷 P4408 [NOI2003]逃学的小孩
    UVA11300 Spreading the Wealth
    洛谷 P3574 [POI2014]FAR-FarmCraft
    洛谷 P2882 [USACO07MAR]Face The Right Way G
    JSOI BZOJ4472 salesman
    CF 1912 A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/awkflf11/p/5502746.html
Copyright © 2011-2022 走看看