困惑了一周的问题终于解决了,决定写一篇文章,因为百度上的方法说的不是非常清楚,所以决定自己写一篇,废话不多说,直接正文


先看下效果(页面中只有一个TextView组件)


Android TextView使用HTML处理图片文字混合显示Android TextView使用HTML处理图片文字混合显示



处理网络图片用的是第三方库ImageLoader,链接如下


https://github.com/nostra13/Android-Universal-Image-Loader

点击进入后下载jar包,如下图


Android TextView使用HTML处理图片文字混合显示


下载完成后复制jar包,粘贴至androidstudio libs目录下如下图目录中


Android TextView使用HTML处理图片文字混合显示


然后鼠标右键jar包进行如下操作


Android TextView使用HTML处理图片文字混合显示


点击OK,加载一会ImageLoader包就成功导入了


注意:ImageLoader需要在onCreate方法中实例化

ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(this));


下面看完整程序,以下的代码可以直接复制到程序中运行




import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String string="\"<p>据多家美媒消息,五年前的今天,也就是2012年12月6日,湖" +
                "人名宿科比-布莱恩特迎来个人生涯一个非常大的里程碑!他成为NBA历史上" +
                "第5位总得分达到30000分的球员,也成了历史最年轻的30000分先生。</p>" +
                "<p><img src=\"http://p4.qhimg.com/t0143c3caa0f210471d.jpg?size=960" +
                "x960\"\" class=\"mCS_img_loaded\"></p><p>在湖人以103-87战胜黄蜂的比赛" +
                "中,科比出战33分钟,17投10中,得到29分6篮板4助攻。其中,第二节比赛他用" +
                "一记抛投让自己的职业生涯总得分达到30000分。</p><p>科比在这一天是34岁104" +
                "天,超越了张伯伦(35岁179天)成为NBA历史上最年轻的30000分先生。</p><p>" +
                "<img src=\"http://p6.qhimg.com/t018adb2d64db452679.jpg?size=1024x576\"" +
                " class=\"mCS_img_loaded\"></p><p>詹姆斯目前32岁,如无意外的话,他在本赛" +
                "季(生涯第15个赛季)就能超越科比,成为NBA历史最年轻的30000分先生。</p><p>" +
                "<img src=\"http://p2.qhimg.com/t0111fe70b44cb3e393.jpg?size=1024x770\"" +
                " class=\"mCS_img_loaded\"></p><p><img src=\"http://p0.qhimg.com/t011f7" +
                "a164e5cd0d6f1.jpg?size=858x572\" class=\"mCS_img_loaded\"></p><p>返回搜" +
                "狐,查看更多</p><p>责任编辑:</p>\"";
        ImageLoader imageLoader = ImageLoader.getInstance();//ImageLoader需要实例化
        imageLoader.init(ImageLoaderConfiguration.createDefault(this));
        textView=(TextView)findViewById(R.id.textView);
        URLImageParser imageGetter = new URLImageParser(textView);
        textView.setText(Html.fromHtml(string, imageGetter, null));
    }
    public class URLImageParser implements Html.ImageGetter {
        TextView mTextView;
        public URLImageParser(TextView textView) {
            this.mTextView = textView;
        }
        @Override
        public Drawable getDrawable(String source) {
            final URLDrawable urlDrawable = new URLDrawable();
            ImageLoader.getInstance().loadImage(source,
                    new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            urlDrawable.bitmap = loadedImage;
                            urlDrawable.setBounds(0, 0, loadedImage.getWidth(), loadedImage.getHeight());
                            mTextView.invalidate();
                            mTextView.setText(mTextView.getText());
                        }
                    });
            return urlDrawable;
        }
    }
    public class URLDrawable extends BitmapDrawable {
        protected Bitmap bitmap;
        @Override
        public void draw(Canvas canvas) {
            if (bitmap != null) {
                canvas.drawBitmap(bitmap, 0, 0, getPaint());
            }
        }
    }
}

程序大概就是这样,重写了
textView.setText(Html.fromHtml(string, imageGetter, null));
中的imageGetter方法

好了,大功告成了,块来看看效果吧


相关文章:

  • 2021-08-07
  • 2022-01-21
  • 2021-08-08
  • 2021-12-09
猜你喜欢
  • 2021-12-27
  • 2022-12-23
  • 2022-12-23
  • 2021-06-26
  • 2022-12-23
相关资源
相似解决方案