您的位置:首页 > 移动开发 > Android开发

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

2017-12-06 20:56 796 查看
困惑了一周的问题终于解决了,决定写一篇文章,因为百度上的方法说的不是非常清楚,所以决定自己写一篇,废话不多说,直接正文先看下效果(页面中只有一个TextView组件)处理网络图片用的是第三方库ImageLoader,链接如下
https://github.com/nostra13/Android-Universal-Image-Loader
点击进入后下载jar包,如下图下载完成后复制jar包,粘贴至androidstudio libs目录下如下图目录中然后鼠标右键jar包进行如下操作点击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;@Overrideprotected 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;}@Overridepublic Drawable getDrawable(String source) {final URLDrawable urlDrawable = new URLDrawable();ImageLoader.getInstance().loadImage(source,new SimpleImageLoadingListener() {@Overridepublic 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;@Overridepublic void draw(Canvas canvas) {if (bitmap != null) {canvas.drawBitmap(bitmap, 0, 0, getPaint());}}}}
程序大概就是这样,重写了
textView.setText(Html.fromHtml(string, imageGetter, null));
中的imageGetter方法
好了,大功告成了,块来看看效果吧

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息