android 字符串 修改部分字符串的字体颜色

方法一:Android中string.xml文件中设置部分字体颜色大小

列子:

1.在string.xml文件中:

 <string name="tips_all"><Data><![CDATA[清理进程:<font color="#7700ff00"><b>%1$d<br/></b></font>清理内存:<font color="#7700ff00"><b>%2$sMB</b></font>]]></Data></string>

2. 代码中设置textView内容

textView.setText(Html.fromHtml(String.format(getResources().getString(R.string.tips_all),process,memory+"" )));

效果图 :

我个人的修改记录:

高亮显示内存大小的数字

<string name="memory_summary_expand"><Data><![CDATA[平均内存用量为 <b>%1$s</b>, 共 <b>%2$s</b> <font color="#770000ff"><b>%3$s</b></font>]]></Data></string>
ThreadUtils.postOnMainThread(
                    () -> mPreference.setSummary(Html.fromHtml(String.format(mContext.getString(R.string.memory_summary_expand,
                            usedResult, totalResult,expand_6g)))));

遇到的问题总结,string.xml 里面的格式最开始 不清楚。

整个字符串 要整体 通过 Html.fromHtml 处理,开始我想只处理部分 然后 + 上其他的字符串来实现。但是这样处理 遇到多国语言 需要翻译。后面没有采用 。

最后通过 SpannableStringBuilder SpannableString ForegroundColorSpan 来实现分段设置不同字段的颜色,然后再衔接在一起。

        SpannableStringBuilder builder = new SpannableStringBuilder();
          final int ramexpandDisabled = Settings.Secure.getInt(mContext.getContentResolver(),
                RAMEXPAND_KEY, OFF);
	String expand_6g = " + 6.0GB";

        ThreadUtils.postOnBackgroundThread(() -> {
            mProcStatsData.refreshStats(true);
            final ProcStatsData.MemInfo memInfo = mProcStatsData.getMemInfo();
            final String usedResult = Formatter.formatShortFileSize(mContext,
                    (long) memInfo.realUsedRam);
            final String totalResult = Formatter.formatShortFileSize(mContext,
                    (long) memInfo.realTotalRam);
            SpannableString memory_summarySpannable = new SpannableString(mContext.getString(R.string.memory_summary,
                            usedResult, totalResult));

	    builder.append(memory_summarySpannable); 
            SpannableString expand_6gSpannable = new SpannableString(expand_6g);
	    expand_6gSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, expand_6gSpannable.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
	    builder.append(expand_6gSpannable); 
            if (ramexpandDisabled == ON){
	              ThreadUtils.postOnMainThread(
                    () -> mPreference.setSummary(builder)); 	
             }else{
            ThreadUtils.postOnMainThread(
                    () -> mPreference.setSummary(mContext.getString(R.string.memory_summary,
                            usedResult, totalResult)));
		}
        });

总结 :其实最开始 我就是使用的 这个方法 ,但是不成功 ,因为ThreadUtils.postOnMainThread(
                    () -> mPreference.setSummary(builder));我使用的时builder.toString();

应该 传递 整个 SpannableStringBuilder 的对象

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值