前言

需求:给一个字符串拼接上一个"全国"标签,需要一直跟在文字后面。

ui图:

想法:

采用spannable的方法给文字后面添加图片。

正文

1.写一个xml当"全国"标签view。

//shape样式

ps:为什么要套一个LinearLayout呢?因为在spannable中添加绘制图片,不好修改其中标签的位置,故套一层ViewGroup,再在里面修改margin从而控制位置。

2.将view转换成drawable.

将view转成drawable的工具方法。

//工具类

/**

* 将view转换成Drawable

* @param view

* @return

*/

public static Drawable convertViewToDrawable(View view) {

int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

view.measure(spec, spec);

view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

Canvas c = new Canvas(b);

c.translate(-view.getScrollX(), -view.getScrollY());

view.draw(c);

view.setDrawingCacheEnabled(true);

Bitmap cacheBmp = view.getDrawingCache();

Bitmap viewBmp = cacheBmp.copy(Bitmap.Config.ARGB_8888, true);

view.destroyDrawingCache();

BitmapDrawable drawable = new BitmapDrawable(Application.getResources(), viewBmp);

cacheBmp.recycle();

return drawable;

}

3.使用ImageSpan塞入drawable.

String centerName="你需要显示的内容";

centerName += F.getInstance().getString(R.string.entire_country);//加上全国两个字,后面会被替换成图片

View globalView = LayoutInflater.from(F.getInstance().getContext()).inflate(R.layout.view_treament_center_golbal, null);

String finalCenterName = centerName;

Drawable drawable = ViewUtils.convertViewToDrawable(globalView);

SpannableStringBuilder spannableString = new SpannableStringBuilder(finalCenterName);

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getMinimumHeight());//必须设置,代表drawable在canvas的draw位置

ImageSpan imageSpan = new ImageSpan(drawable);

spannableString.setSpan(imageSpan, spannableString.length() - 2, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

holder.mTvCenterName.setText(spannableString);

这一段代码需要理解下:

1.使用LayoutInflater加载刚刚写的xml,"全国"view

View globalView = LayoutInflater.from(F.getInstance()

.getContext())

.inflate(R.layout.view_treament_center_golbal, null);

2.使用刚刚的工具将view转换成drawable,也可以叫你的ui给你切个图。

3.设置drawable绘制位置

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

Drawable的setBounds方法有四个参数,setBounds(int left, int top, int right, int bottom),这个四参数指的是drawable将在被绘制在canvas的哪个矩形区域内。

例如

@Override

protected void onDraw(Canvas canvas) {

drawable.setBounds(100, 100, 500, 500);

drawable.draw(canvas);

}

上面的代码会将drawable绘制在canvas内部(100,100,500,500)表示的矩形区内(这个矩形区域的坐标是以canvas左上角为坐标原点的)

4.通过给SpanString设置ImageSpan增加图片。

spannableString.setSpan(imageSpan, spannableString.length() - 2, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

setSpan方法:

参数1:增加的样式内容;

参数2:替换的开始位置;

参数3:替换的结束位置;

参数4:含尾不含头

参数4的枚举:

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含start和end所在的端点 (a,b)

Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b]

Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含start,但不包含end所在的端点 [a,b)

Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含start和end所在的端点 [a,b]

实现效果:

相关链接

文字高亮

android 字符串拼接 drawable文件,【Android】android开发之文字拼接图片,图文混排...相关推荐

  1. Android中实现不同文字颜色和图文混排的Span总结

    一.怎么在TextView中设置首行缩进两个字符 在string资源文件中,在文字的前面加入"\u3000\u3000"即可实现首行缩进 在Java代码中,使用setText(&q ...

  2. android自定义图片文本,Android 实现文字与图片的混排

    在我们的项目中,常常会碰到图片与文字混排的问题.解决这类问题的方法有非常多,本文给出的方法不是唯一的.仅仅有依据实际场景才干找到更适合的方法. 本文主要通过xml布局来实现图片与文字的混排(水平排列) ...

  3. 【小松教你手游开发】【系统模块开发】图文混排 (在label中插入表情)

    本身ngui是自带图文混排的,这个可以在ngui的Example里找到.但是为什么不能用网上已经说得很清楚,比如雨松momo的http://www.xuanyusong.com/archives/29 ...

  4. #Android笔记# 超级足球app 开发总结(二)—— SpannableString根据标记插入文字实现图文混排

    最近利用业余时间,开发了一款基于懂球帝接口数据的足球资讯app,整体的UI也是仿照懂球帝设计的.这是一个比较综合的项目,用到了不少以前没用过的组件和api,而且产生了很多新的开发思路,有些实现方式也是 ...

  5. android多媒体图文混排,干货!!!Android富文本实现图文混排

    效果图 rich.jpg 像图中的效果,大家在开发并不少见,大家可能不知道android提供了实现图文混排的类.大家或许会写一个布局或者使用drawableLeft这个属性实现文本的左侧图标. and ...

  6. Android图文混排(仿QQ空间评论)

    你知道TextView中可以"塞入"图片么? 之前项目需求,做一个类似QQ的点赞评论功能,效果图如下: 本文主要讲解评论这一块,至于点赞和表情帖,后续再说. 评论功能的介绍:评论内 ...

  7. android:如何在TextView实现图文混排

    我们通常在TextView文本中设置文字.可是如何设置图文混排呢? 我就在这里写一个例子 .我们需要用到一点简单的HTML知识 在TextView中预订了一些类似HTML的标签,通过标签可以使Text ...

  8. android textview 添加图片大小,Android_Android中使用TextView实现图文混排的方法,向TextView或EditText中添加图像比 - phpStudy...

    Android中使用TextView实现图文混排的方法 向TextView或EditText中添加图像比直接添加文本复杂一点点,需要用到标签. 只有一个src属性,该属性原则上应该指向一个图像地址或可 ...

  9. android 实现表格横向混动_Android图文混排实现方式详解

    在使用TextView的时候,我们经常需要在TextView中进行图文混排,比如在QQ中聊天的消息中的表情,底部tab图标等. 一.场景 二.实现方式 Android官方对TextView的图文混排提 ...

最新文章

  1. Linux 如何实现 VLAN - 每天5分钟玩转 OpenStack(12)
  2. 做Java头发少_这35个Java代码优化细节,你用了吗
  3. JS的一些扩展:String、StringBuilder、Uri
  4. 1.7 Java到底有没有多维数组?
  5. 决策类AI成最具商业价值应用产品 第四范式入选Gartner中国5大代表厂商
  6. Oracle 常用sql场景应用(未完待续......)
  7. python3.6是用来干嘛的_学 Python 都用来干嘛的?
  8. oracle树结构统计,ORACLE 递归树型结构统计汇总
  9. ssh 配置文件中 maxsessions 与 MaxStartups
  10. lunux安装多个mysql_实例详解linux下多个mysql5.7.19(tar.gz)安装图文教程
  11. python functools
  12. 软件工程实践总结--个人作业
  13. java高级工程师认证考试_ACAA 认证Java开发工程师
  14. Eclipse SVN历史乱码问题
  15. flash 模拟eeprom
  16. 聊聊 iOS 出海 App 中的多语言和 ASO 优化和雷区
  17. 五大自动化测试 Python 框架
  18. 市场对计算机应用技术的需求,计算机应用技术专业人才需求调研分析
  19. 所有设备都不安全 只要连WiFi 就会被入侵
  20. 打开ftp文件发生错误,请检查是否有权限

热门文章

  1. 【PTA题目】7-4 输出大写英文字母 (15 分)
  2. 【图形学】后处理下的HDR、颜色分级、颜色映射与颜色空间
  3. linux 修改pe,修改PE系统设定的2种方法
  4. 【智能计算系统笔记】第一章笔记及课后习题
  5. MicroSD卡(TF卡)SPI模式实现方法
  6. 什么是威胁情报(Threat Intelligence)
  7. decaf 接口用法
  8. 我在新浪微博上安家了
  9. python 遍历文件夹PDF并转换成图片
  10. 董卿:把这10个气质传给孩子