个性化TextView内容

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资源。这样的原因是可以自动将两个“%”转换为一个“%”。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值