方法一: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 的对象