前言

遇到一个这个需求就是在文字的末尾添加图片,其实本来也挺常规的,通常可以这样去实现

复文本的方式

String html = testUrl + " <img src='%1$s'>";html = String.format(html, R.drawable.white_copy);pay_address.setText(Html.fromHtml(html, new Html.ImageGetter() {@Overridepublic Drawable getDrawable(String source) {Integer id = Integer.valueOf(source);Drawable drawable = getResources().getDrawable(id);drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());return drawable;}}, null));

通过SpannableString

 pay_address.post(new Runnable() {@Overridepublic void run() {SpannableString spannableString = new SpannableString(testUrl);VerticalImageSpan imageSpan = new VerticalImageSpan(getContext(),R.drawable.white_copy);spannableString.setSpan(imageSpan, testUrl.length() - 1, testUrl.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);//pay_address.setText(spannableString);pay_address.setAdaptiveText(spannableString);}});

但是不知道大家注意到没我的后面的地址是数字和字母混合的处理起来发现textview会莫名其秒的换行如下

我设置的宽度是足够的,但是不知道TextView的绘制原理是什么居然自动换行了。
大概看了下SpannableString的绘制主要是使用DynamicLayout里面的方法来计算行数。

解决方案

问题主要是文本换行并没有按照我们期望的样子进行,而是换行之后后面还留了一大半空白。后面发现如果字符串中包含了空格的话,就会自动以空格的位置进行换行。所以解决思路就是按照TextView的宽度,计算每一行能够容纳的字符个数,在每一行的最后插入一个空格,就能解决换行凌乱了。

//先设置原始文本
text.setText(string);
//使用post方法,在TextView完成绘制流程后在消息队列中被调用
text.post(new Runnable() {@Overridepublic void run() {//获取第一行的宽度float lineWidth = text.getLayout().getLineWidth(0);//获取第一行最后一个字符的下标int lineEnd = text.getLayout().getLineEnd(0);//计算每个字符占的宽度float widthPerChar = lineWidth / (lineEnd + 1);//计算TextView一行能够放下多少个字符int numberPerLine = (int) Math.floor(text.getWidth() / widthPerChar);//在原始字符串中插入一个空格,插入的位置为numberPerLine - 1StringBuilder stringBuilder = new StringBuilder(string).insert(numberPerLine - 1, " ");//SpannableString的构建SpannableString spannableString = new SpannableString(stringBuilder.toString() + " ");Drawable drawable = getResources().getDrawable(R.mipmap.copy);drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);spannableString.setSpan(imageSpan, spannableString.length() - 1, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);text.setText(spannableString);}
});

完美解决

Android 实现在文字末尾添加图片相关推荐

  1. TextView 多行文字末尾添加图片

    private TextView content: String showText="我是多行文字,我末尾需要添加一张图片"; //注意此处showText后+ " &q ...

  2. android 图片绑定按钮,Android编程实现给Button添加图片和文字的方法

    本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, ...

  3. Android 仿微信朋友圈添加图片

    github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...

  4. 初次使用Android Studio问题,Android Studio往项目中添加图片

    2019独角兽企业重金招聘Python工程师标准>>> 习惯了iOS往项目中直接拖拽的图片的习性,第一次往Android Studio中添加图片为难了,怎么也拖拽不进去,为难了,研究 ...

  5. PHP 根据文字内容添加图片上实现自动换行的小程序

    前进的动力来自很多东西,渴望也好,向往也好,压力也好. 总之是源于人对更好的事物的追求. 想要变成大牛,就永远不要失去这种渴望,这种追求. 最近这一周一直在鼓捣一个将用户输入的文字加载到图片上面的功能 ...

  6. Android Studio 中 为模拟器添加图片和图片路径(图文级教程)

    需求:为android 模拟器添加图片,供编程测试 系统:Android 11.0 模板/框架:- 环境:- 语言:Java 近来要做个发彩信的测试,本以为是很简单的过程,代码写好了,却发现模拟器中没 ...

  7. android 11短信应用添加图片附件,旋转问题

    短信应用中添加附件 private static void selectMediaByType(Context context, int requestCode, String contentType ...

  8. android 动态向Gallery中添加图片及倒影3D效果

    在android中gallery可以提供一个很好的显示图片的方式,实现上面的效果以及动态添加数据库或者网络上下载下来的图片资源.我们首先实现一个自定义的Gallery类. MyGallery.java ...

  9. ECharts Title文字前添加图片

    项目需要被逼无奈开始了对ECharts研究和使用 问题:在ECharts Title前添加图片 废话不多说,直接上代码 : title: {text: ' {a| 动态数据}',show: true, ...

最新文章

  1. dede采集 标题不完整
  2. 剑指offer-二叉搜索树的后序遍历序列
  3. 数据交换平台_从零开始理解大数据架构之数据交换平台
  4. 2010-2011年中国嵌入式开发从业人员调查报告隆重推
  5. tp5.1升级指导---控制器调整 _initialize方法更改为initialize
  6. 面向程序员的精品开源字体
  7. iphone 4s IOS9 越狱教程
  8. 利用word2007插入参考文献
  9. “JSON parse error: Unexpected character (‘\“‘ (code 34)): was expecting comma to separate Object ent
  10. Android轻松实现分享功能
  11. 北斗短报文和北斗定位入门篇
  12. 华盛顿大学西雅图 计算机科学 申请条件,华盛顿大学西雅图分校申请有哪些条件...
  13. 北京软件开发商城app系统软件开发大概多少钱
  14. 腾讯云服务器地域与可用区
  15. 幕课在线办公项目笔记——day1
  16. 事件抽取中的“门面技术”:事件名称生成浅谈
  17. 分布孔径红外探测系统研究综述
  18. 产品设计太难了!别怕,给你5个优秀案例照着学
  19. Warning C206
  20. 自己动手编写java编译器

热门文章

  1. 关于“显示器驱动程序 AMD driver已停止响应 并且已成功恢复”错误的应对方法...
  2. luch-request
  3. 鄂尔多斯无人值守煤炭运销管理系统软件功能要求(二)
  4. 易语言如何封装免杀防误报大漠多线程api模块
  5. SQL Server索引语法
  6. Kafka的结构、特点和原理(细节)
  7. STM32单片机(二)STM32环境搭建
  8. abe.jar工具,解决提示Don‘t know how to process version 5
  9. Clickhouse 查询分布式表子查询 (Distributed Subqueries )
  10. DDI市场指南2014