去除TextView设置lineSpacingExtra后,最后一行多出的空白

转载请标明出处:http://77blogs.com/?p=278

有些手机中,给TextView设置lineSpacingExtra后会出现最后一行的文字也出现lineSpacingExtra,不是某些版本才会,这跟机型有关。

可以用下面这种方法解决:

 

 

Android自动解析html带图片,实现图文混排

在android中,如何将html代码转换为text,然后显示在textview中呢,有一个简单直接的方法:

 

然而用的时候却发现html里面的图片没法被被解析出来,别慌,Html还有一个方法:

 

其中,我们可以自定义imageGetter,这个对象是用于解析html中的图片。

 

最终调用:

textView.setText(Html.fromHtml(text, new MImageGetter(textView, this), null));

这样便可以实现图文混排了,在该显示图片的地方显示图片。

 

如果是要显示网络上的图片,getDrawable方法可以这样

 

第三个参数 其作用是把 HTML 带标记的文本内容字符串转化成可以显示效果的的 Spanned 字符串 。由于并非所有的 HTML 标签都可以转化,所以在使用时,用户需要自己添加一些必要的标签和处理方法时才会使用的。

 

转载请标明出处,维权必究:http://77blogs.com/?p=304

参考链接:https://blog.csdn.net/qq_30548105/article/details/78031347

TextView图文混排

转载请标明出处:http://77blogs.com/?p=491

大家都知道,textView有一个setCompoundDrawables的方法来设置上下左右位置的图标,当然,也可以在xml布局文件中设置,然而问题来了,假如我们把图标放在左边,当我们让TextView分多行显示的时候,会出现一种情况,左边的图标并不会与第一行对齐,而是与整个textView居中对齐。

即我们要的是下图:

结果是这个图:

怎么办呢?我们可以用图文混排:

我们可以利用SpannableString和ImageSpan。

1、构建SpannableString对象。

2、获取Drawable对象,即将我们的图案转换为Drawable对象,并设置大小。

3、构建ImageSpan 对象

 4、设置给上面的SpannableString对象

5、最终设置给TextView

 

加下来讲讲上面的方法:

1、ImageSpan对象,第二个参数为图像与文字的对齐方式,ImageSpan只带有两个对齐方式,分别是:ALIGN_BASELINE、ALIGN_BOTTOM。

ALIGN_BOTTOM 表示与文字内容的底部对齐,如果在构造ImageSpan时没有传入对齐方式,那么默认就是这种底部对齐。

ALIGN_BASELINE, 表示与文字内容的基线对齐


 

2、setSpan()方法


 

what传入各种Span类型的实例; 
startend标记要替代的文字内容的范围; 
flags是用来标识在Span范围内的文本前后输入新的字符时是否把它们也应用这个效果,它有如下几个:

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE、

Spanned.SPAN_INCLUSIVE_EXCLUSIVE、

Spanned.SPAN_EXCLUSIVE_INCLUSIVE、

Spanned.SPAN_INCLUSIVE_INCLUSIVE

INCLUSIVE表示应用该效果,EXCLUSIVE表示不应用该效果,如Spanned.SPAN_INCLUSIVE_EXCLUSIVE表示对前面的文字应用该效果,而对后面的文字不应用该效果。

 

坑:

1、既然ImageSpan只带有两个对齐方式,那我们需要自己实现居中对齐:

 

 为何上面的自定义能够实现居中对齐呢?首先要了解Paint.FontMetrics。

请看另一篇博客:https://www.cnblogs.com/tangZH/p/8692910.html

 

TextView走马灯

转载请标明出处:http://77blogs.com/?p=557

设置textView走马灯形式显示:

给Textview设置以上的属性,android:ellipsize=”marquee”便是指定超出范围的时候以跑马的形式显示(注意上面的属性是只有在内容超出TextView宽度时候才有效果)。

不能用max_line属性,要用singleLine属性。

别忘了在activity里面让TextView去获取一下焦点:TvTitle.requestFocus()。

Paint.FontMetrics

要了解TextView对文本的绘制,那么就需要了解Paint.FontMetircs。

官方对该类的解释是:Class that describes the various metrics for a font at a given text size., 意思是说,这玩意儿是绘制文本内容时存储该文本内容位置信息的一个类。

 

这个类里面存储的字段有哪些?有下面五个字段:

 

而这五个字段除了leading,其余的都是根据BaseLine来确定,也就是基线。

 

1、何为BaseLine

 

2、接下来说说里面字段的具体含义,请看下图:

根据上图可知:

    • ascent
      文字内容的顶部到基线的距离。即 ascent=文字内容顶部Y坐标 – 基线Y坐标。由于android中坐标系是 右下为正,所以得到的ascent实际是一个负数。
    • descent
      文字内容的底部到基线的距离。即 descent=文字内容底部Y坐标 – 基线Y坐标。
    • 基线
      在图中,基线的坐标用Y表示。实际上,基线的Y坐标=文字内容中间线Y坐标+1/2 (文字内容高度)
    • top
      对应图中 文字所在行的top 坐标
    • bottom
      对应图中 文字所在行的bottom 坐标
      需要注意:如果设置了行间距,且文本内容产生了换行,那么这个bottom 也会将行间距包裹。所以, 图中蓝色的文字内容中间线的Y轴坐标并不一定等于 (bottom+top)/2

参考链接:https://www.cnblogs.com/huolongluo/p/7057973.html