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

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

列子:

1.在string.xml文件中:

 %1$d
清理内存:%2$sMB]]>

2. 代码中设置textView内容

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

效果图 :

android 字符串 修改部分字符串的字体颜色_第1张图片

我个人的修改记录:

高亮显示内存大小的数字

%1$s, 共 %2$s %3$s]]>
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 的对象

你可能感兴趣的:(android,java,前端)