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





更多相关文章

  1. 安全性帮苹果在IT领域打败Android
  2. Android: 打败system,自己监听Home键
  3. android 两个apk之间恭喜数据SharedPreferences
  4. Android靠哪些东西能打败iphone
  5. Android能用Linux打败Linux手机吗?
  6. 11 月编程排行榜:Python “打败”Java 成第二

随机推荐

  1. android中Menu的使用
  2. Android 获取电池基本信息代码
  3. Android-线性布局的经典案例1-计算器
  4. eclipse Android(安卓)工程在Libs导入第
  5. Android窗口浮在屏幕上效果
  6. Android与Javascript交互示例(一)
  7. android 主题元素映射方式
  8. Android自学笔记(番外篇):全面搭建Linux环境
  9. Android之Bean属性通知类
  10. Android任务栏的图标显示