一:XML转义字符
在strings.xml文件中定义字符串时,特殊字符有时需要使用转义字符代替,如:字符之间的空格用 Space 键是能显示出效果的的,但是字符后面如果需要添加空格,直接 Space 键是不管用的,此时 空格应该用  来表示(注意有分号),例如:<string name="top10_item_title">第%1$s名:   %2$s号%3$s</string>
以下为XML标志符的数字和字符串转义符
" (" 或 ")
' (' 或 ')
& (& 或 &)
lt(<) (< 或 <)
gt(>) (> 或 >)@ (@)版权符号 © (©)
下面的字符在 [XML]中被定义为 空白(whitespace)字符:
空格 ( )
Tab (	)
回车 (
)
换行 (
)
strings.xml文件定义%符号,需要用%%来表示;
<string name="hello">大家好,欢迎来到eoeandroid社区。\nwelcome to here!</string> 字体换行的形式输出
如遇到如下错误的时候说明你需要在单引号签名加转义字符(\):
Description Resource Path Location Type error: Apostrophe not preceded by \ (in Search' Titles) strings.xml
只要将定义的字符串中的单引号('), 修改为(\')即可
二:变量文本($s)提示(本地化数据交换的格式标准_xliff)
如:
<string name="top10_item_title_data_vote">得票: %1$s   得票比例: %2$s</string>
%1表示第一个变量的位置,%2表示第二个变量的位置,以此类推,.......%n表示第n个变量的位置;$s代表字符串类型;在代码中使用如下:
String.format(getString(R.string.top10_item_title_data_vote), "字符串1","字符串2");
如遇到如下错误提示:
Multiple annotations found at this line:
- error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false"
attribute?
- error: Unexpected end tag string
这是由于新的SDK(虽然从没用过老的)采用了新版本的aapt(Android项目编译器), 这个版本的aapt编译起来会比老版本更加的严格, 在Android最新的开发文档中描述String的部分,已经说明了如何去设置 %s 等符号, 可以点击去看.
简单解决方法就是:把%s之类的变量格式替换成%1$s, %1表示第一个位置的变量, $s表示为字符串类型
三:Android通过文件名引用资源文件
使用方法:<span style="font-size:12px;">public int getIdentifier (String name, String defType, String defPackage)</span>
说明:name表示:资源文件名字; defType表示资源类型,如"string"、"drawable"等; defPackage表示应用的包名;
使用案例如下:
如需要根据具体条件,使用不同的图片:
int index = 1; imageView.setImageResource(getResources().getIdentifier("image_" + index, "drawable", mActivity.getPackageName()));
注意:如果使用imageView.setBackgroundResource....,则设置无效,路过的高手知道为什么请指教!
附件:部分转移字符串
其他字符
字符 十进制 转义字符 字符 十进制 转义字符 字符 十进制 转义字符 ? ¡ ¡ Á Á Á á á á ¢ ¢ ¢ Â Â ˆ â â â £ £ £ Ã Ã Ã ã ã ã ¤ ¤ ¤ Ä Ä Ä ä ä ä ¥ ¥ ¥ Å Å ˚ å å å | ¦ ¦ Æ Æ Æ æ æ æ § § § Ç Ç Ç ç ç ç ¨ ¨ ¨ È È È è è è © © © É É É é é é a ª ª Ê Ê Ê ê ê ê ? « « Ë Ë Ë ë ë ë ? ¬ ¬ Ì Ì Ì ì ì ì \x7f ­ ­ Í Í Í í í í ® ® ® Î Î Î î î î ˉ ¯ ¯ Ï Ï Ï ï ï ï ° ° ° Ð Ð Ð ð ð &ieth; ± ± ± Ñ Ñ Ñ ñ ñ ñ 2 ² ² Ò Ò Ò ò ò ò 3 ³ ³ Ó Ó Ó ó ó ó ′ ´ ´ Ô Ô Ô ô ô ô μ µ µ Õ Õ Õ õ õ õ ? ¶ ¶ Ö Ö Ö ö ö ö · · · × × × ÷ ÷ ÷ ? ¸ ¸ Ø Ø Ø ø ø ø 1 ¹ ¹ Ù Ù Ù ù ù ù o º º Ú Ú Ú ú ú ú ? » » Û Û Û û û û ? ¼ ¼ Ü Ü Ü ü ü ü ? ½ ½ Ý Ý Ý ý ý ý ? ¾ ¾ Þ Þ Þ þ þ þ ? ¿ ¿ ß ß ß ÿ ÿ ÿ À À À à à à
四:注意事项
Android开发中,使用TextView设置换行时,有如下几种情况:1.如果在strings.xml文件中设置string值为:"aaaa\nbbbb",TextView可以显示为:
aaaabbbb
2.如果在代码中直接设置setText("aaaa\nbbbb"),也可以显示为:
aaaabbbb
3.如果将"aaaa\nbbbb"值传入到一个数据封装类如Person的字符串name属性字段中,在代码中设置setText(persion.getName())时,则显示为:
aaaa\nbbbb
第三点就是问题所在,不能显示换行!问题分析:
出现了“aaaa\nbbbb”这样的显示,说明TextView设置了“aaaa\\nbbbb”,这里多了一个“\”,对象所携带的字符串的转移字符被消除了。
解决办法:
在setText显示的时候,将对象中得到的字符串中的“\\n”转换成“\n”:
如:textview.setText(persion.getName().replace("\\n","\n"));
四:<xliff:g>标签
在处理国际化问题时,有些String中的部分文字不需要翻译,可以用<xliff:g>标签注明。这样做可以保证自己或他人浏览时对不需要翻译的内容能够一目了然,比如:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="buy_kindle">我想买%s台<xliff:g id="Kindle">Kindle</xliff:g></string>