Android一个TextView文字颜色不同或多个关键字不同颜色
来源:互联网 发布:apache开启rewrite 编辑:程序博客网 时间:2024/06/09 00:26
今天公司要求一个TextView中有不同的文字颜色
,比如说:一二三四五一二三四五一二三四五一二三四五,要求一是黄色二是绿色三是红色其他均是黑色.(哈哈只是个例子别认真)^_^
针对这样的问题,洒家真的是脑袋疼,因为以前会写多个TextView来设置不同的颜色,然后在组合嘛,现在觉得这个办法简直Low不过,当时确实解决了问题.
现在突然这样要求之后发现,再去创建不同TextView不仅资源浪费而且还能活活把人累死,偶然想起一次公司配合html写的TextView文字变色突发奇想,写了一个自定义控件,因为是临时写的又怕下了班懒,不写博客.特此记下.这个控件不仅完成了支持一个TextView可以改变某一个关键词的颜色,还支持一个TextView可以有多个关键字且关键字颜色不同.
先看两张效果图吧
.单个关键词多个关键词,这些可都是一个TextView.
那么废话不多说,给大家共享我的源码,写的菜的地方也希望大神指出来,共同进步~~
/** * Created by wanghan on 2016/11/2. */public class PartColorTextView extends TextView { private final String SRM="<font color=\"⊙\">%1$s</font>";//文字转换Hmtl的格式固定不要动 private final String OF="⊙";//替换颜色的字符 public PartColorTextView(Context context) { super(context); } public PartColorTextView(Context context, AttributeSet attrs) { super(context, attrs); } public PartColorTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** *@author WangHan *创建时间:2016/11/2 14:38 *方法名:setPartText *描述: 給文字顏色設置 *参数:allText:全部文字 keyText:变色关键字 otherTextColor:默认文字颜色 keyTextColor:要变颜色的字的颜色必须是个Color(getRe.getColor.)这样获得 *返回值: *特殊注释:该方法适合只有一个关键词的时候 */ public void setPartText(String allText,String keyText,int otherTextColor,int keyTextColor) { String NF = String.format("#%06X", 0xFFFFFF & keyTextColor); String replace = SRM.replace(OF, NF); String format = String.format(replace, keyText); try { String textStr = allText.replaceAll(keyText, format); Spanned spanned = Html.fromHtml(textStr); setTextColor(otherTextColor); setText(spanned); }catch (PatternSyntaxException e) { e.printStackTrace(); } } /** *@author WangHan *创建时间:2016/11/2 14:38 *方法名:setPartText *描述: 給文字顏色設置 *参数:allText:全部文字 keyColorMap:用于一段话有多个,且颜色要求不同的集合,Key是关键字,Value是Color keyTextColor:要变颜色的字的颜色必须是个Color(getRe.getColor.)这样获得 *返回值: *特殊注释:该方法适合一段话有多个关键词的时候 */ public void setPartText(String allText,HashMap<String,Integer> keyColorMap,int otherTextColor) { Spanned spanned = null; String textStr=null; Set<String> keySet = keyColorMap.keySet(); for (String s : keySet) { String NF = String.format("#%06X", 0xFFFFFF & keyColorMap.get(s)); String replace = SRM.replace(OF, NF); String format = String.format(replace, s); try { if (textStr==null) { textStr = allText.replaceAll(s, format); }else { textStr=textStr.replaceAll(s, format); } }catch (PatternSyntaxException e) { e.printStackTrace(); } } setTextColor(otherTextColor); spanned= Html.fromHtml(textStr); setText(spanned); }}
附上用法:
public class MainActivity extends AppCompatActivity { private PartColorTextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1 = (PartColorTextView) findViewById(R.id.main_tv); String allll="一二三四五一二三四五一二三四五"; tv1.setPartText(allll,"二",Color.BLACK,getResources().getColor(R.color.colorAccent));//单个关键词参数:全部文本,关键字文本,全部文本颜色,关键字文本颜色
<span style="font-family: Arial, Helvetica, sans-serif;"> }</span>
}
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1 = (PartColorTextView) findViewById(R.id.main_tv); String allll="1. 关闭Autotuning(自动调整)\n" + " 禁用这个可以帮助dns查找和网络发现。禁用方法和vista差不多。\n" + " admin权限下在命令提示符里打:\n" + " Netsh interface tcp set global autotuning=disabled\n" + " 然后应该会显示OK。要检查执行结果的话,再输入\n" + " Netsh interface tcp show global\n" + " (应该是第五行)可以看到recieve window auto-tuning level的对应项是disabled就是了。\n" + " 这个方法对vista也有提速效果。"; HashMap<String, Integer> keysColor = new HashMap<>();//参数之一:key:关键字 Value:颜色 但一定是Color(int)的.如果是#ffffff这样的话建议还是写在color资源包中,个人习惯. keysColor.put("Autotuning", Color.GREEN); keysColor.put("Netsh",Color.RED); keysColor.put("OK",Color.BLUE); keysColor.put("禁用",Color.GRAY); keysColor.put("dns",Color.CYAN); tv1.setPartText(allll,keysColor,Color.BLACK);//多关键词多颜色 }
1 0
- Android一个TextView文字颜色不同或多个关键字不同颜色
- Android TextView不同文字显示不同颜色
- Android+HTML 针对android一个控件TextView中文字颜色、大小不同的解决方案
- Android TextView 实现文字大小不同和文字颜色不同
- Android TextView 实现文字大小不同和文字颜色不同
- Android 一个TextView中设置文字不同字体大小和颜色的最完整方法
- 给一个TextView控件中的文字显示不同的颜色
- textview 设置多个状态文字颜色
- android设置TextView中文字不同的颜色
- textview中的文字不同颜色
- textView 文字显示不同颜色
- Android TextView设置值时,使一个字符串有不同颜色(多种颜色)
- 【Android】一个TextView显示不同颜色字体
- TextView上面显示不同文字和颜色
- Android在一个TextView设置不同样式的文字
- 一个TextView显示多个颜色
- 一个TextView显示多个颜色
- android 一个 textview 设置不同的字体大小和颜色
- 1
- JVM架构之JVM工作原理
- AndroidStudio Gradle:Resolvedependencies':app:_debugCompile' 问题
- 常用js整理
- 172. Factorial Trailing Zeroes
- Android一个TextView文字颜色不同或多个关键字不同颜色
- 【LightOJ】1410 - Consistent Verdicts(思维)
- 从零开始学JDBC--1.13 批处理
- x264代码剖析(七):encode()函数之x264_encoder_encode()函数
- hdu1717(小数化分数)
- 进度条(ProgressBar)的功能与用法
- 会话-Cookie
- 对称矩阵与压缩存储算法(java实现)
- FPGA