解析html富文本

package com.example.texthtml;


import java.net.URL;


import org.xml.sax.XMLReader;




import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.Html.TagHandler;
import android.text.method.LinkMovementMethod;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public class MainActivity extends Activity {



@Override  
   protected void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
       struct();  
       setContentView(R.layout.activity_main);  
       final TextView tv = (TextView) findViewById(R.id.txt);  
       String html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>强调</strong></p><p><em>斜体</em></p>"  
               + "<p><a href=\"http://www.dreamdu.com/xhtml/\">超链接HTML入门</a>学习HTML!</p><p><font color=\"#aabb00\">颜色1"  
               + "</p><p><font color=\"#00bbaa\">颜色2</p><p><font color=\"#aabb00\">颜色1"  
               + "</p><p><font color=\"#00bbaa\">颜色2</p><p><font color=\"#aabb00\">颜色1"  
               + "</p><p><font color=\"#00bbaa\">颜色2</p><p><font color=\"#aabb00\">颜色1"  
               + "</p><p><font color=\"#00bbaa\">颜色2</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://p1.so.qhimg.com/sdr/647_1080_/t0147a15ea60cc9ba01.jpg\"/></body>"
               + "下面是网络图片</p><img src=\"http://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/></body></html>";  
       
 
       tv.setMovementMethod(ScrollingMovementMethod.getInstance());// 设置可滚动  
       tv.setMovementMethod(LinkMovementMethod.getInstance());//设置超链接可以打开网页  
      MyTagHandler tagHandler = new MyTagHandler(this);
       tv.setText(Html.fromHtml(html, imgGetter,tagHandler)); 
       tv.setClickable(true);
   }  

       //这里面的resource就是fromhtml函数的第一个参数里面的含有的url  
   ImageGetter imgGetter = new Html.ImageGetter() {  
       public Drawable getDrawable(String source) {  
           Log.i("RG", "source---?>>>" + source);  
//            Toast.makeText(MainActivity.this, source, Toast.LENGTH_SHORT).show();
           Drawable drawable = null;  
           URL url;  
           try {  
               url = new URL(source);  
               Log.i("RG", "url---?>>>" + url);  
               drawable = Drawable.createFromStream(url.openStream(), ""); // 获取网路图片  
           } catch (Exception e) {  
               e.printStackTrace();  
               return null;  
           }  
           drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),  
                   drawable.getIntrinsicHeight());  
           Log.i("RG", "url---?>>>" + url);  
           return drawable;  
       }  
   };  
 
   public static void struct() {  
       StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
               .detectDiskReads().detectDiskWrites().detectNetwork() 
               .penaltyLog().build());  
       StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
               .detectLeakedSqlLiteObjects() // 探测SQLite数据库操作  
               .penaltyLog() // 打印logcat  
               .penaltyDeath().build());  
   }



}  








package com.example.texthtml;


import java.util.Locale;


import org.xml.sax.XMLReader;


import android.content.Context;
import android.text.Editable;
import android.text.Html.TagHandler;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


public class MyTagHandler  implements  TagHandler  {


private Context mContext;
public MyTagHandler(Context context) {
mContext = context.getApplicationContext(); }


@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if (tag.toLowerCase(Locale.getDefault()).equals("img")) {
// 获取长度
int len = output.length();
// 获取图片地址
ImageSpan[] images = output.getSpans(len-1, len, ImageSpan.class);
String imgURL = images[0].getSource();
// 使图片可点击并监听点击事件
output.setSpan(new ClickableImage(mContext, imgURL), len-1, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}



class ClickableImage extends ClickableSpan {
private String url;
private Context context;
public ClickableImage(Context context, String url) {
this.context = context;
this.url = url;
}
@Override
public void onClick(View widget) {
// 进行图片点击之后的处理
Toast.makeText(context, url, 1).show();
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值