android 显示图片和文字,android TextView显示文字和图片

本文介绍了在Android应用中如何在TextView中显示图片和文字,包括使用Html.fromHtml()方法,处理网络图片时遇到的问题,以及针对主线程不执行耗时操作的解决策略,通过开辟子线程加载图片并更新TextView内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做web的时候jsp页面可以直接显示一段html代码,如:

TextView使用HTML

强调

斜体

"

+"

超链接HTML入门学习HTML!

颜色1"

+"

颜色2

标题1

标题2

标题3

大于>小于<

" +

                   "下面是网络图片

suyan.jpg%5C%22 suyan.jpg%5C%22 suyan.jpg%5C%22在jsp页面和老版的android 版本之前都可以显示图片,

较早版本的android实现:2.3.3测试

Html html="";

TextView tv=(TextView)findViewById(R.id.textView1);

tv.setText(Html.fromHtml(html, imgGetter,null));

ImageGetter imgGetter = new Html.ImageGetter() {

public Drawable getDrawable(String source) {

Toast.makeText(context,source,Toast.LENGTH_LONG).show();

TextView tvs=(TextView)findViewById(R.id.textView);

String ss=tvs.getText()+source+"\n";

tvs.setText(ss);

Log.d("image",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;

}

};

我的项目是4.2的以上代码在获取网络图片是就会报错,因为android在之后的版本中不允许在主线程中做比较耗时的操作比如http请求,所以以上代码运行是就会报错!后来自己就对上面的代码做了处理

private Map bitmaps=new HashMap();//存放新闻中图片

private boolean newsImgIsShow=false;//判断新闻中图片是否显示

private List urls=new ArrayList();//存放文章中的图片链接

TextView  tvContent=(TextView) findViewById(R.id.tv_news_details_content);

urls.clear();

String strHtml=="";

tvContent.setText(Html.fromHtml(strHtml,imgGetter,null));//先把文章赋值给textview

//imgGetter过滤文章中的图片

ImageGetter imgGetter = new Html.ImageGetter() {

public Drawable getDrawable(String source) {

Drawable drawable=null;

//source文章中图片地址

if(newsImgIsShow){//判断图片是否已经获取

//将图片从map中取出

BitmapDrawable bd = new BitmapDrawable(bitmaps.get(source));

drawable=bd;

}else{

//将图片地址添加到列表中

urls.add(source);

//设置默认图片

drawable=getResources().getDrawable(R.drawable.no_photo);

}

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable

.getIntrinsicHeight());

return drawable;

}

};

final Handler handler=new Handler(){

public void handleMessage(Message msg){

super.handleMessage(msg);

if(msg.what==1){//图片请求成功后重新设置textview

newsImgIsShow=true;

tvContent.setText(Html.fromHtml(strHtml,imgGetter,null));

}

}

};

//开辟子线程请求服务器图片

new Thread(){

public void run(){

try {

for(String url:urls){

Log.d("url",url);

Bitmap bitmap=null;

try {

bitmap=HttpHelper.getURLBitmap(url);//图片请求

if(null==bitmap){

bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.no_photo);

}

} catch (Exception e) {

// TODO: handle exception

bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.no_photo);

}

bitmaps.put(url, bitmap);

}

Message msg=new Message();

msg.what=1;

handler.sendMessage(msg);

} catch (Exception e) {

// TODO: handle exception

}

}

}.start();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值