首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android中多行文本末尾添加图片排版问题解决方法

图片会在TextView右边竖直方向中间位置显示,而不是我们期望最后一位置显示。...这时我们可以尝试使用ImageSpan来将图片放置最后一: final TextView text = findViewById(R.id.text); final String string...对象 ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); //设置ImageSpan,将其位置设置spannableString...后面发现如果字符串中包含了空格的话,就会自动以空格位置进行换行。所以解决思路就是按照TextView宽度,计算每一能够容纳字符个数,每一最后插入一个空格,就能解决换行凌乱了。...具体实现如下: //先设置原始文本 text.setText(string); //使用post方法,TextView完成绘制流程后消息队列中被调用 text.post(new Runnable()

2.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    真·富文本编辑器演进之路-Span整体性控制

    转化为Drawable,设置给ATSpan,并传入@相关数据信息 将ImageSpan插入Edittext,实现整体性Span文本插入 可以发现,这种方案实现步骤是比较简单,但是它的确定也很明显...: 首先,由于是ImageSpan,所以与普通文本对齐方式上,始终会存在一些误差,这些误差有来自TextView-Drawable转换过程,也有ImageSpan对齐过程,所以,样式上,对齐会有一些问题...,同时,由于TextView-Drawable整体性,一旦TextView有多行或者当前行剩余位置不够,那么第二剩余区域都将被View矩形区域填满,从而导致这些区域无法再输入文本,如下所示。...通过SpanWatcher控制 第二种方案,我们使用普通文本,但是对普通文本增加Span标记,并对这个Span做整体性控制,这种方案复杂一点,要处理地方也比较多,但是由于它使用是普通文本,所以样式上可以其它普通文本完全保持一致...TextVIew内部,它通过DynamicLayout来渲染Spannable数据,在其内部会设置SpanWatcher来监听Span新增、修改删除,当监听到变化后,会调用其内部方法进行刷新。

    2K30

    TextView实现自定义换行以及缩进文字格式化对齐

    ); setText(spannable); Spannable是根据当前TextView文本内容创建出来,然后可以用ImageSpan去替换Spannable中任意一个位置 文本缩进实现 依然是用...); setText(spannable); } 这里面有一个点需要注意,ListView或者RecycleViewAdapter加载这些View时候有可能View可能还没有渲染所以宽度获取到为零...还没渲染时候首先测量View宽度,那就去参考onMeasure方法中是怎么测量了,measure方法就是根据转入参数去测量得出View测量长度宽度,然后通过getMeasuredWidth...getMeasuredHeight方法来获取到测量值,测量长度宽度核心就在于一个实际长度宽度,另一个就是测量模式,这两个属性结合就可以得出一个测量结果 测量View方法 int widthSpec...0时候就使用这个模式去测量 EXACTLY:父容器已经为子容器设置了尺寸,子容器应当服从这些边界,不论子容器想要多大空间(对应match_parent) AT_MOST:最大不能超过当前给定参考值

    2.6K20

    让你EditText删除表情比微信更高效--记一次android性能分析优化实战

    (spData.start, spData.end); return true; } } return false; } SpData中保存了表情对应文本开始位置结束位置..., spData.end);这一 精确定位 再准备顺藤摸瓜找到卡顿真正元凶,但是代码跳着跳着就到SpannableStringBuilderTextView这两个超大类里去了,在哪卡还不知道自己就绕晕了...ChangeWatcher实现了SpanWatcher接口,它是用来监听TextView中Span发生变化 当从中间删除一个表情,被删除表情后面的所有的ImageSpan位置都发生了变化,每个ImageSpan...,复制给新SpannableStringBuilder,设置到输入框之前删除表情,因为此时新SpannableStringBuilder中并不包含ChangeWatcher所以不会多次调用ChangeWatcher.onSpanChanged...Emoji出现在TextView中逃不出也用ImageSpan,想看看谷歌会不会也有从中间开始删除表情卡顿feature,就去找了下这个库demo,一跑发现demo中不管从末尾还是从中间删都不会卡

    1.4K30

    真·富文本编辑器演进之路-Span开胃菜

    Span会导致TextView重新测量文本,以实现正确布局渲染,例如,更改文本大小可能会导致字词显示不同上。...Spanfalg标志位标记了Span是否应该扩展至包含插入文本开始结束点。任何标志位设置以后,只要插入文本位置位于开始位置结束位置之间,Span就会自动扩展。...这种方式ImageSpan尺寸不是很大时候,是可以,其原理就是对ImageSpan进行偏移,但是文字高是没有发生改变,也就是像图中这样,多行文本高并未发生改变,但是ImageSpan实现居中效果...第二种方式,就是将文本高属性做修改,也就是让ImageSpan尺寸小于高,动态将原本文字高,改为ImageSpan尺寸,甚至更大一点,这样ImageSpan自然就可以居中了。 ?...用这种方式处理后,文字ImageSpan会在新参数中整体居中,这种效果应该是比较具有拓展性,不像第一种会在ImageSpan过大时候,遮挡下一文字。

    2.5K20

    【Android】强大SpannableStringBuilder

    (这是一个内容标记都可以更改文本类) 不同于我们平时赋值使用String、StringBuffer等,只能给TextView设置文本内容,而文本样式只能用TextView来控制,而且该样式可定制性还不大好...SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新文本会应用该样式,而在文本后插入新文本也会应用该样式 Spannable....设置图片,将index为6、7字符替换成了图片,也就是说,该图片占有index67位置。...代码中指定index为5、6、7字符都成了可点击文本,其他区域还是不可点击。 效果: 点击事件 有同学反映设置部分点击事件后,还需要给真整个TextView单独设置点击事件时会出问题。...自己去试试看,哈哈哈~~ 这边有一个我CSDN上看到解决方法,可以从另一个角度来解决这个问题。——解决方案 组合使用 当然,上面的这些用法都能组合使用。来个?

    2.5K120

    详解Android SpannableString多行图文混排应用实战

    TeXtView大家应该都不陌生,文本展示控件嘛! 就用TextView显示普普通通文本,OK,很简单,Android入门都会,没入门门缝外看两眼也都会,哈哈,开玩笑。...嗯 ~ 也行,算是一种方法,可这有一个限制,首先,图片只能在TextView两端,其次,两端都只能设置一张图片。要是图片要在文本中间呢?...如果就涉及到一的话我们只需要在文本后面加个imageview就行,但是如果多行显示的话这样做就不太好了 那么什么是SpannableString呢?...SpannableString其实String一样,都是一种字符串类型,同样TextView也可以直接设置SpannableString作为显示文本,不同是SpannableString可以通过使用其方法...setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what表示设置格式是什么,可以是前景色、背景色也可以是可点击文本等等

    1.1K10

    Android实现EditText图文混合插入上传功能

    前段时间做了一个Android会议管理系统,项目需求涉及到EditText图文混排,如图: ? 在上图”会议详情”中,需要支持文本图片混合插入,下图演示输入示例: ?...一、明确需求 首先,点击”会议详情”文本框中,正常输入文本,然后点击左下角图片图标,进入系统相册用来选择一张图片并插入到文本框中,你还可以将光标停留在任意文字中间,完成图片插入,回退建即可以逐个删除文字...二、实现思路 如果要在一个EditText中显示图片,首先得简单了解一下SpannableStringImageSpan使用。...ImageSpan,相信也能够体会到它们用法。...如果不需要保存图文混合插入内容,那就不必执行这一步,imageSpan替换时,可以用任意字符替换,因为对于spannebleString而言,插入图片其实就是一些字符而已,这一点可以输出edittext.gettext

    1.3K30

    Android中如何实现图文混排

    项目开发中需要实现这种效果,多余两,两最后是省略号,省略号后面是下拉更多,之前用过是Html.fromHtml去处理图文混排,仅仅是文字后图片或者文字颜色字体什么,但是这里需要在最后文字省略号后面添加图片...ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); //用ImageSpan替换文本 ss.setSpan(span, 18, 19...记得android中有个android.text包,这里提供了对文本强大处理功能。...(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); //需要处理文本,[smile]是需要被替代文本 SpannableString...span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); //开始替换,注意第2第3个参数表示从哪里开始替换到哪里替换结束(start

    1.4K90

    Android实现可点击展开TextView

    通常情况下是 TextView 文本后面或下边添加一个可点击图标,来实现 TextView 展开与收缩。如下图: 收缩状态 ? 展开状态 ?..., desc);//显示收缩状态文本图标 } // TextView 实际显示文本长度 == 应该显示文本长度(正常状态) else if(ellipsizeStr.length...应该显示文本长度(展开状态) else{ closeFun(tv, ellipsizeStr, desc);//显示展开状态文本图标 }...SpannableString 中,我们可以通过设置 ImageSpan 来给 TextView 添加图标,但是普通 ImageSpan 是不能响应点击事件而且也不能设置图片位置,那么我们要如何实现一个可以响应点击事件并且可以设置图片位置...textview中插入图片 自定义可点击ImageSpan并在TextView中内置“View“ 以上就是本文全部内容,希望对大家学习有所帮助。

    2.2K20

    微博文本编辑显示(emoji表情,@某人、链接高亮点击)

    ImageSpan 可以根据设定好文本长度,对对应文本进行替换显示。...因为考虑到字数限制还有大小问题,下面还有对应参数,大小一般我设置是20dp(够大了吧= =),插♀入时候注意当前光标位置哟,而Android文本输入框一般对于ImageSpan 回退都是整个删除...之后SpannableString来存储对应ImageSpan文本中间关系,最后利用SpannableStringBuilder 将生成好SpannableString插入到输入框中。...那么首先再找一个女朋友,设置TextVidewAutoLinkMask为系统识别的URLPhone,这样系统就会把对应女朋友(文本)识别出来处理为Spanable格式 textView.setAutoLinkMask...这里需要注意逻辑是 @人文本中出现顺序返回List顺序不一定一致 @同一个人名字可能出现多次 所以找女朋友还是以这里以返回的人list为主,一个一个到文本中去配对吧。

    2.2K20

    详解Android登陆界面用户协议解决方案

    来看他有神们不同,有那些难点 1,选中框被文字包裹,单纯checkboxtextview无法实现,因为选中框会在文字左方 2,协议文件有很多,不定项,文件是服务器返回,而且每个文件中间都会有一个颜色不一样点隔开..., 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } 这里可以看到我没有用系统ImageSpan,因为该文字存在换行,系统ImageSpan图标无法进行居中,...父类 DynamicDrawableSpan中方法,DynamicDrawableSpan类中,虽有getCachedDrawable(), // 但是私有的,不能被调用,所以调用ImageSpan...//与文字中间线对齐(这种方式不论是否设置行间距都能保障文字中间线图片中间线是对齐) // y+ascent得到文字内容顶部坐标,y+descent得到文字底部坐标...,挨个添加到之前string中,为每个协议设置为蓝色,并设置点击事件,最后返回最终SpannableStringBuilder (先添加点击事件,否则前景色会被点击事件颜色淡化) for (int

    1.1K31

    Android控件TextView实现静态图与动态GIF图文混排

    最近做项目功能时,需要在TextView中展示图文,刚开始做时候以为很简单,只需要用个ImageView跟TextView来展示就行了,可是发现这样做,不能实现我们需要效果,这就需要涉及到富文本TextView...来展示图文,下面介绍静态图片图文动态GIF图文两种展示方式: 静态图片图文: 效果如下: [bkcvxx8is4.png] 这里写图片描述 代码: String content...来实现,但默认图片展示gif图片是静态取第一帧图片,我们可以获取图片时候使用Glide,来实现播放gif,glide是图片加载库,这个库被广泛运用在google开源项目中,包括2014年google...GlidePicasso有90%相似度,准确说,就是Picasso克隆版本。但是细节上还是有不少区别的。而且性能上更加优化。...把Glide引入到我们项目中,然后创建UrlDrawable GlideImageGetter 代码可以参考:底部公众号回复"富文本"即可获取 方法调用: String content

    2.1K30

    【CSS】文字溢出问题 ( 强制文本中显示 | 隐藏文本超出部分 | 使用省略号代替文本超出部分 )

    一、文字溢出问题 ---- 元素对象内部显示文字 , 如果文本过长 , 则会出现文本溢出问题 ; 下面的示例中 , 150x25 像素盒子中 , 显示 骐骥一跃,不能十步;驽马十驾,功不舍;...; 显示效果 : 二、文字溢出处理方案 ---- 文字溢出处理方案 : 首先 , 强制文本中显示 ; white-space: nowrap...; 然后 , 隐藏文本超出部分 ; overflow: hidden; 最后 , 使用省略号代替文本超出部分 ; text-overflow: ellipsis; white-space 样式 用于设置...文本显示方式 : 默认方式 : 显示多行 ; white-space: normal; 显示一 : 强行将盒子中文本显示中 ; white-space: nowrap; text-overflow.../title> div { width: 150px; height: 25px; border: 1px solid red; /* 首先 强制文本中显示

    4.1K10

    Android ImageSpan与TextView同一图片居中

    开发中常常会遇到标签(图片)+文字需求,实现方式一般采用SpannableString方式来实现。 这时候会遇到图片ImageSpan没有办法居中问题。...descent到下一字符ascent之间距离,行间距 } ascent线Y坐标 = baseline线y坐标 + fontMetric.ascent; descent线Y坐标 = baseline...; ImageSpan ImageSpan构造函数中有一个对齐方式参数,但只提供了 ALIGN_BASELINE(顶部对齐)、ALIGN_BOTTOM (底部对齐)两种对齐方式,没有居中对齐方式..., 所以只能重写ImageSpan实现图片居中。...y:替换文字基线坐标。 top:替换改行文字最顶部位置。 bottom:替换改行文字最底部位置,行间距属于上一,因而bottom是行间距底部位置。

    2.5K20

    Android 千变万化 TextView:神奇 SpannableString

    enter image description here 6)删除线下划线 删除线下划线是两种常用文本标记符号,SpannableString 当然也是支持。...设置删除线下划线很简单,只要指定起始位置结束位置即可,下面直接看代码效果图吧。 删除线 删除线用到类是 StrikethroughSpan,没有参数。...enter image description here 7)文字上标下标 这个实际开发中不常用,但是却很重要,因为万一遇到这种需求要自己实现的话还挺麻烦。...这样设置后,字符串 str 就和 drawable 对象对应上了,显示时会显示 drawable,但是调用 editText.getText() 得到还是字符串。...整个过程就是操作 SpannableString 过程,SpannableString 内部通过 ImageSpan 把字符串 Drawable 对应起来,显示时候表现为 Drawable,

    4.1K20
    领券