现在的位置: 首页 > 综合 > 正文

个性化TextView内容

2018年04月27日 ⁄ 综合 ⁄ 共 1435字 ⁄ 字号 评论关闭

Android上写界面的时候往往会遇到一些设计很奇怪,导致有些没法直接用原生的界面API来实现。这里主要记录一些TextView上的特殊效果的实现方式。

1、给TextView部分内容加粗,或者设置指定颜色。

String content = "恭喜玩家<b>王大锤</b>打败BOSS,获得<font color=\"#fbd860\"><b>金宝箱</b></font>";
Spanned tipSpanned = Html.fromHtml(content);
sampleView.setText(tipSpanned);

2、要灵活的组合文本内容:

下面这个可以灵活的指定规则,并根据具体内容来填充。学过C语言的话应该能想到跟printf函数的用法很类似。

String content = String.format("恭喜玩家<b>%1</b>打败BOSS,获得<font color=\"#fbd860\"><b>%2</b></font>",
        "王大锤", "金宝箱");

有人肯定想将这个规则定义在res/values文件中,这样管理起来更方便。像这样:

res/values/strings.xml:

<resources>
    <string name="notice_text_format"><![CDATA[恭喜玩家<b>%1s</b>打败最终BOSS,获得<font color=\"#fbd860\"><b>%2s</b></font>]]></string>
</resources>

java code:

String formatStr = getString(R.string.notice_text_format);
String content = String.format(formatStr,
        "王大锤", "金宝箱");
Spanned tipSpanned = Html.fromHtml(content);
sampleView.setText(tipSpanned);

可惜这样会导致资源文件编译出错。错误信息会是:

error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" 

 attribute?

我在 StackOverflow找到了解决方案

正确方法如下:

res/values/strings.xml:

<resources>
    <string name="notice_text_format"><![CDATA[恭喜玩家<b>%%1s</b>打败最终BOSS,获得<font color=\"#fbd860\"><b>%%2s</b></font>]]></string>
</resources>

java code:

String formatStr = getString(R.string.notice_text_format, null);
String content = String.format(formatStr,
        "王大锤", "金宝箱");
Spanned tipSpanned = Html.fromHtml(content);
sampleView.setText(tipSpanned);

看出区别来了么?

1、在xml中要用两个“%”来代替一个"%"。

2、我在java代码中是通过带有两个参数的getString来获取String资源。这样的原因是可以自动将两个“%”转换为一个“%”。

抱歉!评论已关闭.