最近需求是textView 后面跟上 一个图片加文字,自然文字可配置。

简单,用span就可以实现,但是文字最多显示三行,多余....

经过适配和实现

直接上代码

//*** 用于展示 textView后面接 图片和文字* 用于视频页面的内容展示* Created by wavewave on 2018/10/25.*/
public class EllipsizeThreeTextView extends android.support.v7.widget.AppCompatTextView {private SpannableStringBuilder spannableStringBuilder;private Drawable drawable;private ImageSpan imageSpan;private MyClickableSpan clickableSpan;private String labelTitle;private String labelUrl;private int length = 0;public EllipsizeThreeTextView(Context context) {this(context, null);}public EllipsizeThreeTextView(Context context, AttributeSet attrs) {super(context, attrs);drawable = this.getResources().getDrawable(R.drawable.icon_flexible_small);}/*** 设置末尾带标签** @param content* @param labelTitle* @param labelUrl*/public void setTextContent(String content, String labelTitle, String labelUrl) {setText(content + "\t\t");this.labelTitle = labelTitle;this.labelUrl = labelUrl;if (!TextUtils.isEmpty(labelTitle)) {if (labelTitle.length() > 15) {//产品规定大于10,为了扩展 预留15个字labelTitle = labelTitle.substring(0, 15);}length = labelTitle.length() + 3;//保险起见  超出后多 删3个字符setLabelTitile("\t" + labelTitle, labelUrl);}}@TargetApi(Build.VERSION_CODES.JELLY_BEAN)@Overrideprotected void onDraw(Canvas canvas) {try {int maxLines = getMaxLines();if (maxLines > 0 && getLayout().getLineCount() > maxLines) {CharSequence charSequence = getText();int lastCharDown = getLayout().getLineVisibleEnd(maxLines - 1);if (charSequence.length() > lastCharDown) {spannableStringBuilder = new SpannableStringBuilder();spannableStringBuilder.append(charSequence.subSequence(0, lastCharDown - length)).append("...\t\t\t");setText(spannableStringBuilder);setLabelTitile(labelTitle, labelUrl);}}} catch (Exception e) {Log.e("EllipsizeTextView", e.getMessage());}super.onDraw(canvas);}private void setLabelTitile(String labelTitle, String labelUrl) {try {if (!TextUtils.isEmpty(labelTitle.trim())) {if (imageSpan == null) {imageSpan = new ImageSpan(getContext(), drawableToBitmap(drawable, labelTitle));}if (clickableSpan == null) {clickableSpan = new MyClickableSpan(labelUrl, getContext());}if (spannableStringBuilder == null) {if (!TextUtils.isEmpty(getText().toString())) {spannableStringBuilder = new SpannableStringBuilder(getText().toString() + "\t");} else {spannableStringBuilder = new SpannableStringBuilder("\t");}}if (drawable == null) {drawable = getResources().getDrawable(R.drawable.icon_flexible_small);}spannableStringBuilder.setSpan(imageSpan, spannableStringBuilder.length() - 1, spannableStringBuilder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);spannableStringBuilder.setSpan(clickableSpan, spannableStringBuilder.length() - 1, spannableStringBuilder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);setHighlightColor(Color.parseColor("#00000000"));append(spannableStringBuilder);setMovementMethod(LinkMovementMethod.getInstance());setText(spannableStringBuilder);}} catch (Exception e) {JuMeiLogMng.getInstance().e("EllipsizeTextView", e.getMessage());}}private Bitmap drawableToBitmap(Drawable drawable, String title) {// 取 drawable 的长宽int w = drawable.getIntrinsicWidth();int h = drawable.getIntrinsicHeight();// 取 drawable 的颜色格式Bitmap.Config config = Bitmap.Config.ARGB_8888;Paint paint = new Paint();paint.setColor(Color.parseColor("#333333"));paint.setTextSize(UIUtils.dip2px(12));paint.setAntiAlias(true);float length = paint.measureText(title);// 建立对应 bitmapBitmap bitmap = Bitmap.createBitmap((int) (w + length + UIUtils.dip2px(8)), h + UIUtils.dip2px(6), config);// 建立对应 bitmap 的画布Canvas canvas = new Canvas(bitmap);Paint mPaint = new Paint();mPaint.setColor(Color.parseColor("#BFFFFFFF"));mPaint.setStyle(Paint.Style.FILL);mPaint.setStrokeWidth(5);canvas.drawRoundRect(new RectF(0, 0, w + length + UIUtils.dip2px(6), h + UIUtils.dip2px(6)), UIUtils.dip2px(2), UIUtils.dip2px(2), mPaint);drawable.setBounds(0, 0, w, h);// 把 drawable 内容画到画布中canvas.translate(UIUtils.dip2px(2), UIUtils.dip2px(3));drawable.draw(canvas);canvas.translate(-UIUtils.dip2px(2), -UIUtils.dip2px(3));canvas.drawText(title, w + UIUtils.dip2px(2), h + UIUtils.dip2px(1), paint);return bitmap;}
}/*** 内容 标签* 自定义点击 span*/
public class MyClickableSpan extends ClickableSpan {private String url;//跳转urlprivate Context context;public MyClickableSpan(String url, Context context) {this.url = url;this.context = context;}@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overridepublic void updateDrawState(TextPaint ds) {ds.linkColor = Color.parseColor("#ffffff");ds.bgColor = Color.parseColor("#ffffff");ds.setUnderlineText(true);}@Overridepublic void onClick(View widget) {Toast.makeText(context, "url:" + url, Toast.LENGTH_SHORT).show();if (!TextUtils.isEmpty(url)) {//跳转url}}
}

TextView 添加 图片文字背景(注意可设置背景的)相关推荐

  1. Android TextView中的文字通过SpannableString,设置不同的颜色,字体,不同文字段的点击事件

    SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,不同的是SpannableString可以通过使用其方法 ...

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

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

  3. html怎么加背景图片不重复,css怎么设置背景图片不重复?

    在使用css添加背景图片时,默认的样式是图片重复:但有时页面只需要一个不重复的大背景图片,那么如何让背景图片不重复?下面本篇文章就来给大家介绍一下,希望对大家有所帮助. 在CSS中,可以使用backg ...

  4. 修改Textview内图片文字间距和图片大小

    平常我们的 图片文字结合如图: 对于上面的这种布局,我们一般采用的一个ViewGroup嵌入一个ImageView和一个TextView.如下所示: <LinearLayoutandroid:i ...

  5. python窗口设置背景图片_PyQt5 实现给窗口设置背景图片的方法

    PyQt5 实现给窗口设置背景图片的方法 QPalette类可以十分简单的达到设置窗口背景图片的目的 def use_palette(self): self.setWindowTitle(" ...

  6. html设置背景图片高度,如何使用CSS设置背景图像的大小?

    如何使用CSS设置背景图像的大小?下面本篇文章就来给大家介绍一下使用CSS设置背景图像大小的方法,希望对大家有所帮助. image CSS background-size属性可用于设置背景图像大小:使 ...

  7. pycharm里的HTML添加背景,pycharm怎么改变背景颜色-pycharm设置背景颜色的方法

    pycharm这款软件相信有很多编程人员都有所了解,它是一款专用编辑Python语言的编程软件,其中有非常丰富的语言工具可以让用户在编写代码的过程中更加方便,那么大家都知道敲代码的过程都是比较枯燥乏味 ...

  8. html+页面的背景透明,css设置背景透明 元素不透明

    css设置背景透明 元素不透明 在做前端页面的时候,我们会遇到这样的情况,需要背景为半透明状态,但是层里面的内容不需要为透明的状态.有时候我们设置的时候会出现不管内容还是背景同时都成透明了,如何实现背 ...

  9. html怎样调节背景透明度,css设置背景透明度的方法是什么

    css设置背景透明度的方法是什么 发布时间:2020-09-01 15:43:28 来源:亿速云 阅读:83 作者:小新 这篇文章将为大家详细讲解有关css设置背景透明度的方法是什么,小编觉得挺实用的 ...

最新文章

  1. 开发日记-20190915 关键词 汇编语言王爽版 第十二章
  2. darwin转发时,摄像机在3G和4G模式下的参数设置
  3. 全球及中国电镀砂轮行业盈利模式分析与十四五投资规划研究报告2021年版
  4. 使用SQL进行递归查询
  5. Go 语言编写 CPython 扩展 goPy
  6. Spark _30_SparkStreaming算子操作Driver HA
  7. 自学编程成功概率有多少可能
  8. [ASP,VB] - 利用ASP调用API COM接口实现开关机
  9. unity 3d shaderlab 开发实战详解_vue实战开发011:使用router-view嵌套路由详解
  10. 深入理解 PHP7 中全新的 zval 容器和引用计数机制
  11. 【爬虫剑谱】一卷1章 软件篇-Mongodb的安装及配置
  12. sql组合索引和独立索引_SQL索引概述和策略
  13. C# Socket tcp 发送数据大小问题
  14. Instant Run 的操作影响到了代码,导致Android App启动闪退的问题
  15. pdf虚拟打印机免费版使用教程
  16. 手把手写Demo系列之车道线检测
  17. 学习zencart模板制作
  18. hostapd对WIFI 热点(AP)的配置方法
  19. 专利 | 基于微表情与脑波分析算法的心理健康状况分析算法
  20. 服务器定时任务是通过什么样的方式实现的

热门文章

  1. win10安装VMware workstation Pro和Ubuntu20.04过程及注意事项
  2. 【Linux成长之路】CentOS7中netstat命令详解
  3. 医疗纠纷如何进行防范?医疗纠纷的处置?
  4. Alpha 冲刺(9/10)
  5. 【前端】烟雾文字效果(html +js)
  6. python办公自动化(Excel)的实例教程
  7. python之路-HTML初识
  8. 第十二届蓝桥杯真题砝码称重dp
  9. DenseNet发明者黄高:动态模型好在哪里?
  10. 技术分享-应用列表性能优化