好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

TextView使用HTML标签_html/css_WEB-ITnose

关于TextView 的富文本实现方式,有2中,一种使用Html来做,一种是使用SpannableString;

标题1

标题2

标题3

大于>小于

" + "下面是网络图片

"; tv.setMovementMethod(ScrollingMovementMethod.getInstance());//滚动 tv.setText(Html.fromHtml(html));


要实现图片的显示需要使用Html.fromHtml的另外第二个重构方法:

public static Spanned fromHtml (String source, Html.ImageGetterimageGetter, Html.TagHandler tagHandler)

其中Html.ImageGetter是一个接口,我们要实现此接口,在它的getDrawable(String source)方法中返回图片的Drawable对象才可以。

ImageGetter imgGetter = new Html.ImageGetter() {        public Drawable getDrawable(String source) {              Drawable drawable = null;              URL url;                try {                     url = new URL(source);                    drawable = Drawable.createFromStream(url.openStream(), "");  //获取网路图片              } catch (Exception e) {                    return null;                }                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable                            .getIntrinsicHeight());              return drawable;         }}; 


这里主要是实现了Html.ImageGetter接口,通过图片的URL地址获取相应的Drawable实例。

上面介绍的是显示网络上的图片,但如何显示本地的图片呢:

   ImageGetter imgGetter = new Html.ImageGetter() {        public Drawable getDrawable(String source) {              Drawable drawable = null;                             drawable = Drawable.createFromPath(source); //显示本地图片              drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable                            .getIntrinsicHeight());              return drawable;         }}; 

只需将source改为本地图片的路径便可,在这里我使用的是:

String source;
source=getFilesDir()+"/ic_launcher.png";

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

这里主要讲一种场合的使用,来源

http://HdhCmsTestarticle/36643.htm

然而,有一种场合,默认支持的标签可能不够用。比如,我们需要在textView中点击某种链接,返回到应用中的某个界面,而不仅仅是网络连接,如何实现?

Html类 中有一个接口类处理点击标签的处理的:

/**     * Is notified when HTML tags are encountered that the parser does     * not know how to interpret.     */     public static interface TagHandler {         /**         * This method will be called whenn the HTML parser encounters         * a tag that it does not know how to interpret.         */         public void handleTag(boolean opening, String tag,                                  Editable output, XMLReader xmlReader); 


private void handleStartTag(String tag, Attributes attributes) {          if (tag.equalsIgnoreCase("br")) {              // We don't need to handle this. TagSoup will ensure that there's a 
for each
// so we can safely emite the linebreaks when we handle the close tag. } else if (tag.equalsIgnoreCase("p")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { handleP(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("em")) { start(mSpannableStringBuilder, new Bold()); } else if (tag.equalsIgnoreCase("b")) { start(mSpannableStringBuilder, new Bold()); } .................. } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) = '1' && tag.charAt(1)

如果不是默认的标签,会调用mTagHandler的handleTag方法。所以,我们可以实现此接口,来解析自己定义的标签类型。


自定义一个 标签,实现接口

public class GameTagHandler implements TagHandler {      private int startIndex = 0;      private int stopIndex = 0;      @Override      public void handleTag(boolean opening, String tag, Editable output,              XMLReader xmlReader) {          if (tag.toLowerCase().equals("game")) {              if (opening) {                  startGame(tag, output, xmlReader);              } else {                  endGame(tag, output, xmlReader);              }          }       }      public void startGame(String tag, Editable output, XMLReader xmlReader) {          startIndex = output.length();      }      public void endGame(String tag, Editable output, XMLReader xmlReader) {          stopIndex = output.length();          output.setSpan(new GameSpan(), startIndex, stopIndex,                      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);      }      private class GameSpan extends ClickableSpan implements OnClickListener {          @Override          public void onClick(View v) {              // 跳转某页面  ,自己实现跳转的动作,就可以点击TextView中的指定文字进行自定义的动作的了         }      } 

然后在工程中调用方法:

textView.setText(Html.fromHtml(“点击 这里 跳转到游戏”,null, new GameTagHandler()));

textView.setClickable(true);

textView.setMovementMethod(LinkMovementMethod.getInstance());

查看更多关于TextView使用HTML标签_html/css_WEB-ITnose的详细内容...

  阅读:31次