在Android应用开发时,显示图片是经常遇到的一个操作。下面看看在TextView中添加图片的一些方法。

1、利用SpannableString实现的主要代码是:

        TextView textViewImage = (TextView) findViewById(R.id.textView2);        ImageSpan imageSpan = new ImageSpan(this, R.drawable.a);        SpannableString spannableString = new SpannableString("一棵参天大树!");        spannableString.setSpan(imageSpan, spannableString.length() - 1, spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);        textViewImage.setText(spannableString);

效果如图:


****有没有发现我们文字部分的感叹号“!”没有显示出来!!!『4.0的模拟器』****

解决办法之一是在需要显示文字后多添加一个空格,这样就不会影响到我们希望显示的文字内容!:)

如果希望把图片显示在文字中间,不仅可以使用TextView的append方法,还可以借助SpannableStringBuilder来实现。代码如下:

        TextView textViewImage = (TextView) findViewById(R.id.textView2);                SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();                ImageSpan imageSpan1 = new ImageSpan(this, R.drawable.a);        SpannableString spannableString1 = new SpannableString("一棵参天大树!");        spannableString1.setSpan(imageSpan1, spannableString1.length() - 1, spannableString1.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);                ImageSpan imageSpan = new ImageSpan(this, R.drawable.b);        SpannableString spannableString2 = new SpannableString(" ");        spannableString2.setSpan(imageSpan, spannableString2.length() - 1, spannableString2.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);                spannableStringBuilder.append(spannableString1);        spannableStringBuilder.append("=^_^=");        spannableStringBuilder.append(spannableString2);                textViewImage.setText(spannableStringBuilder);

效果如图:



说明:

  • 使用append追加想要显示的内容;
  • 追加的=^_^=完全显示,没有出现最后一个字符不能显示的问题;

2、利用Html.ImageGetter格式化图片:

  • Spanned android.text.Html.fromHtml(String source, ImageGetter imageGetter, TagHandler tagHandler)方法可以通过ImageGetter对HTML中的Image标签中的src属性做处理,通过TagHandler对HTML中的标签做处理。利用前者,返回遵循一定协议的图片资源来进行显示。本例希望显示assets下的图片资源,故创建一个assetsImageGetter来做相关处理;
  • TextView的setText方法,设置格式化后的内容并显示;

看看assetsImageGetter内都做了什么处理:

private Html.ImageGetter assetsImageGetter = new Html.ImageGetter() {public Drawable getDrawable(String source) {Drawable drawable = null;InputStream inputStream = null;try {inputStream = getAssets().open(source);Bitmap bitmap = BitmapFactory.decodeStream(inputStream);drawable = new BitmapDrawable(bitmap);drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());bitmap = null;} catch (Exception e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}return drawable;}};

说明:

  • source即从img标签中提取到的src字符串,为了实现对assets下文件的处理,在调用时,需要给出assets文件夹下的图片路径;
  • 通过BitmapFactory.decodeStream();获得对应的图片资源;
  • 如果是网络图片,在此需要获得网络图片资源;

调用方法:

            TextView textViewImage = (TextView) findViewById(R.id.textView2);String html = "(:<img src='a.jpg'/>AND<img src='b.jpg'/>:)";CharSequence richText = Html.fromHtml(html, assetsImageGetter, null);textViewImage.setText(richText);

说明:

  • 调用方法中图片的地址从assets目录开始;
  • 使用时,必须把图片地址设置到img标签中的src属性中;

运行效果如下:



3、利用TextView的setCompoundDrawables方法,可以设置四种环绕的图片:

主要代码如下:

textViewImage = (TextView) findViewById(R.id.textView2);// 设置被环绕的文字textViewImage.setText("=^_^=");// 为了看到效果而设置一些属性textViewImage.setPadding(20, 10, 20, 10);textViewImage.setBackgroundColor(Color.GRAY);textViewImage.setGravity(Gravity.CENTER);// 设置环绕的图片Drawable d = getResources().getDrawable(R.drawable.a);d.setBounds(0, 0, 60, 60); //必须设置图片大小,否则不显示textViewImage.setCompoundDrawables(d , d, d, d);

效果如图:




多说一句:如果你原意,应该还可以想到其它方法,呵呵!:)

更多相关文章

  1. Android(安卓)完全隐藏状态栏方法
  2. Android开发Android(安卓)studio之gradle打包apk重命名的方法
  3. Android(安卓)多媒体框架(2)—— android_media_MediaCodec.cpp源
  4. Android之使用bindService启动服务
  5. Android端获取视频第一帧的方法
  6. 第一行代码阅读笔记---详解分析第一个Android程序
  7. Android实现读取SD卡下所有TXT文件名并用listView显示出来的方法
  8. android 很多应用中用到的 listView + viewPager
  9. android模拟器接收不到UDP数据包解决方法

随机推荐

  1. Android圆形头像的绘制(二)之自定义视图
  2. Android IoT开发实战 | 03 - Android日志
  3. Android App卡顿慢优化之多线程优化
  4. Android 拖动条SeekBar的简单使用
  5. Android平台上基于OpenCV的道路循迹
  6. Android(安卓)Scroll详解(三):Android(安
  7. Android Design Support Library最新组件
  8. android智能家居在线语音控制
  9. android 蓝牙控制继电器——单片机控制端
  10. 微信Android终端SDK新手使用指南