可以高亮显示关键字并设置不同字体大小的自定义TextView
2016-09-28 15:04
645 查看
好久没有写文章了,最近有些时间,所以就写了这篇文章。在写业务的时候,经常会碰到一些这样的需求,一个TextView中需要你高亮显示部分重要的关键字,并且需要字体变的更大些,类似于下图。
像这种需求,如果不用一个TextView来实现,来就得多个TextView控件,这样对于性能是有些伤害的,所以才想去写一个满足这种需求的TextView控件。
写的这个自定义View是去继承了TextView。代码如下:
这个类主要是用了android.text下面的两个类:Spannable和SpannableStringBuilder
用这两个类来实现了,针对于不同的内容来进行设置不能的textStyle,这样便达到了这一效果。
给出实现效果图:
这个功能比较小,但是很实用,希望对大家有帮助。
像这种需求,如果不用一个TextView来实现,来就得多个TextView控件,这样对于性能是有些伤害的,所以才想去写一个满足这种需求的TextView控件。
写的这个自定义View是去继承了TextView。代码如下:
import android.content.Context; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.AbsoluteSizeSpan; import android.text.style.ForegroundColorSpan; import android.util.AttributeSet; import android.widget.TextView; import java.util.ArrayList; import java.util.List; /** * Created by yuzhuo on 16/9/11. */ public class SpannableTextView extends TextView { private Context context; public SpannableTextView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public void setSpecifiedTextsColor(String text, String specifiedTexts, int color,int textSize) { //color is the text need change the color List<Integer> sTextsStartList = new ArrayList<Integer>(); specifiedTexts = specifiedTexts.toLowerCase(); int sTextLength = specifiedTexts.length(); String temp = text.toLowerCase(); int lengthFront = 0;// 记录被找出后前面的字段的长度 int start = -1; do { start = temp.indexOf(specifiedTexts); if (start != -1) { start = start + lengthFront; sTextsStartList.add(start); lengthFront = start + sTextLength; temp = text.substring(lengthFront); } } while (start != -1); SpannableStringBuilder styledText = new SpannableStringBuilder(text); for (Integer i : sTextsStartList) { styledText.setSpan(new ForegroundColorSpan(color), i, i + sTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); if(textSize>0) { styledText.setSpan(new AbsoluteSizeSpan(sp2px(context, textSize)), i, i + sTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } setText(styledText); } /** * 将sp值转换为px值,保证文字大小不变 * * @param spValue * @param context * (DisplayMetrics类中属性scaledDensity) * @return */ public int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } }
这个类主要是用了android.text下面的两个类:Spannable和SpannableStringBuilder
import android.text.Spannable; import android.text.SpannableStringBuilder;
用这两个类来实现了,针对于不同的内容来进行设置不能的textStyle,这样便达到了这一效果。
给出实现效果图:
这个功能比较小,但是很实用,希望对大家有帮助。
相关文章推荐
- 自定义的Label,可以设置同一Label字体的大小不同,颜色不一
- UILabletext去掉乱码 控制颜色 行高 自定义大小 。显示不同的字体颜色、字体大小、行间距、首行缩进、下划线等属性(NSMutableAttributedString)
- iOS 开发~设置label上文字显示不同大小、颜色、字体类型
- TextView内容设置显示不同的字体颜色和不同的字体大小
- 一个TextView设置不同大小字体、EditText显示两行不同样式hint
- iOS设置Label上显示不同字体大小
- TextView内容设置显示不同的字体颜色和不同的字体大小
- 设置label上文字显示不同大小、颜色、字体类型
- IAR中设置字体大小,设置关键字的颜色,行号显示
- 应用键横竖屏切换;label中显示图片;不同类型设备适配的代码;UIWebView字体大小、字体颜色、背景色的设置;
- 渲染自定义格式字符串的UILabel(同一个lable的不同文字可以显示不同的颜色和字体)
- iOS开发~设置label上文字显示不同大小、颜色、字体类型
- label中显示不同颜色的字以及不同字体,字体高亮,DIY label
- GDI+ 设置不同的分辨率来显示不同大小的图片
- [转]Android中的一个TextView中的字体设置不同大小
- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- c#实现打印功能,可以设置纸张大小,字体和颜色等
- Eclipse IDE for c/c++ 可以设置变量匹配高亮显示颜色
- 设置UIButton的文字显示位置、字体的大小、字体的颜色