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

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

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

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

 

 

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()。