Android getText(@string/a)和直接使用字符的区别
来源:互联网 发布:单例模式 java 要求 编辑:程序博客网 时间:2024/06/05 10:49
你是否有发现android:text=""跟android:text="@string/abc"(<string name="abc"></string>)或者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();
}
}
- Android getText(@string/a)和直接使用字符的区别
- Java中String直接赋值和使用new的区别
- Java中String直接赋值和使用new的区别
- CharSequence的getText()与String的getString()区别和为什么加""
- JTextField.getText() 和 JPassword.getPassword() 的区别
- 关于android的getText()方法和字符串比较
- CharSequence的getText()与String的getString()区别
- java中String 的==和equals;String直接赋值和使用new String()
- String直接赋字符串和new String的区别
- String直接赋字符串和new String的区别
- String直接赋字符串和new String的区别
- Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
- ActionSupport.GetText()的使用!
- Dom4j中getText()和getStringValue()的作用和区别。
- TextView和EditText的gettext()方法
- Phoenix Framework中getText和getTagText的区别
- XML文件中element.getText()和element.getTextNormalize()的区别
- java中String new和直接赋值的区别
- android 图片旋转动画
- Retrofit2+RxJava2 使用POST方式提交JSON数据,服务器无法解析的问题
- 阿里视频云最强转码技术揭秘:窄带高清原理解析+用户接入指南
- 设置title的样式
- Python的一些进阶学习-2017.08.28
- Android getText(@string/a)和直接使用字符的区别
- Strust常用配置
- hive 配置参数说明
- wcsrchr
- 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端&客户端
- js基础精华 讲解、、、()
- 自定义View之总结
- OOD
- win10使用技巧