你是否有发现android:text=""跟android:text="@string/abc"()或者getText(R.string.abc);的显示效果不一样?

1、其实这跟字符Unicode编码有关系。前者运行时系统会当做是普通的字符串处理;而后者是定义在xml文件中的,也就是符合w3c协议的,即的前三个字符&#x是转义字符,标识这是一个Unicode码值,相当于"\ue60c";所以系统在读取的时候就会按照w3c的协议进行读取,读取出来一个Unicode码值,然后在去自定义的字体文件里面查找对应的字符。

2、当然前者普通字符串也有对应的Unicode码值,但它的码值不是我们看到的e60c,它的码值储存在内存里面,我们是看不见的;而后者这些字符串通过前者的&#x这三个字符的转义是的后面的e60c表达的就是Unicode码值,而它真正要显示在屏幕上的字符在没有运行的情况下我们是不知道的。

3、在实际项目中会遇到一种情况:需要使用图标字体,但是显示哪个图标字体由后台返回的数据控制,后台返回的数据会包括:Unicode码值的字符串形式的数据,比如:\ue60c;。这个时候我们怎么处理呢?我这里附上一份代码,如果看懂了上面的原理,这个应该不难,如果有问题,欢迎留言或者评论,哈哈都没人评论。。。

public class MyStringUtils {
public static String unicode2String(String s) {
StringBuilder sb = new StringBuilder(s.length());
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '\\' && chars[i + 1] == 'u') {
char cc = 0;
for (int j = 0; j < 4; j++) {
char ch = Character.toLowerCase(chars[i + 2 + j]);
if ('0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f') {
cc |= (Character.digit(ch, 16) << (3 - j) * 4);
} else {
cc = 0;
break;
}
}
if (cc > 0) {
i += 5;
sb.append(cc);
continue;
}
}
sb.append(c);
}
return sb.toString();
}


public static String string2Unicode(String s) {
StringBuilder sb = new StringBuilder(s.length() * 3);
for (char c : s.toCharArray()) {
if (c < 256) {
sb.append(c);
} else {
sb.append("\\u");
sb.append(Character.forDigit((c >>> 12) & 0xf, 16));
sb.append(Character.forDigit((c >>> 8) & 0xf, 16));
sb.append(Character.forDigit((c >>> 4) & 0xf, 16));
sb.append(Character.forDigit((c) & 0xf, 16));
}
}
return sb.toString();
}


}

更多相关文章

  1. android TextView自定义字体样式
  2. Android TextView使用HTML处理字体样式、显示图片等
  3. android字符串资源字符format
  4. Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。
  5. 〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻
  6. Android Sqlite数据库转义字符模糊查询
  7. Android之替换APP字体——Typeface

随机推荐

  1. 关于android滑屏菜单和tab菜单实现
  2. Android(安卓)OpenCV(三十三):霍夫圆检测
  3. Android:微信授权登录与微信分享全解析
  4. Android(安卓)Q分区存储权限变更及适配
  5. Android蓝牙开发中电话音频(HSP,HFP)和媒体
  6. Android(安卓)PCM音频的采集和编码成AAC
  7. Android笔记之开发中处理异常并写入本地l
  8. 利用BLCR加速android的启动(zygote加入che
  9. android5.06.0新控件
  10. Android、iOS录音时音量大小计算