為什么要寫這一篇隨筆呢?最近做項目的過程中,遇到很多頁面在要顯示文本時,有一部分是固定的文本,有一部分是動態獲取的,並且格式各式各樣。一開始采取比較笨的辦法,把他拆分成一個個文本控件,然后對不同的控件采用不同的樣式。這樣做效率
很低,並且文本之間的對齊是個很大的問題,后來到網上尋求幫助,找到一些有關Android字符串和字符串資源格式化的文章,在此做一個總結。
一.字符串格式化
Java的String類給我們提供了兩個重載的格式化字符串的方法,可以通過占位符的方式,向固定字符串中傳入參數。他們分別是:
format(String format, Object... args) 新字符串使用本地語言環境,制定字符串格式和參數生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的語言環境,制定字符串格式和參數生成格式化的字符串。
例如:
字符串占位符%s :System.out.println("Hi,%s", "王力") 輸出 Hi,王力
十進制整形占位符%d :System.out.println("我今年%d歲", 20) 輸出 我今年20歲
浮點型占位符%f:System.out.println("荔枝的價格是 %f 元", 3.5) 輸出 荔枝的價格是3.5元
還有其他字符型,整形,日期格式等等格式化方法,再次就不一一舉例了。
二.帶HTML標簽的字符串格式化
當我們需要對一段文字的部分文字進行字體顏色,字形,字體風格設置時,我們可以使用HTML標簽,然后在輸出的時候,通過Html.from方法解析為html字符串。
例如:
String str = "后面的文字是加粗的紅色文字:" + "<font color='#ff0000'><b>加粗紅色文字</b></font>";
在文本控件輸出的時候,我們需要解析一下
CharseQuence cq=Html.from(str);
textView.setText(cq);
第一種情形和第二種情形可以結合起來使用:
String str = "后面的文字是加粗的紅色文字:" + "<font color='#ff0000'><b>%s</b></font>";
String str2=String.format(str,"紅色加粗文字");
輸出與上面一樣.
三.字符串資源的格式化
我們在字符串資源中同樣可以通過占位符來給字符串傳入參數,不過與第一種方式相比,占位符的格式略有不同
我們使用%[index]$[type]格式進行標記,index標記替換資源中第index個資源對應的位置,type則標示所要替換的資源的類型(s表示資源為字符串格式)
例如:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, my name is %1$s!</string> <string name="app_name">MyString</string> </resources>
TextView mytext = (TextView)findViewById(R.id.mystring); String myname = getString(R.string.hello); myname = String.format(myname, "yinghui"); mytext.setText(myname);
如果需要同時傳入多個參數,則需要改變index,順序一一對應。例如%1$s %2$s等等
四.帶HTML標簽的字符串資源的格式化
由於Android開發中的字符串資源是保存在XML文件中,因為Html中的<, >,&有特殊含義,(前兩個字符用於鏈接簽,&用於轉義),不能直接使用。使用這三個字符時,應使用它們的轉義序列。
例如:
我們需要在XML中保存這個字符串<b>我是加粗文字</b> 需要將<轉義為<或者< ,需要將>轉義為>或者>(這里也可以不轉義)
代碼:
<string name="format2"><b>我是加粗文字</b></string>
需要說明的是:
a. 轉義序列各字符間不能有空格;
b. 轉義序列必須以“;”結束;
c. 單獨的&不被認為是轉義開始。
d. 區分大小寫
常見的轉義字符見下表:
字符 | 實體名字 | 十進制字符編號 |
& | & | & |
< | < | < |
> | > | > |
單引號 | &apos | ' |
" | " | " |
空格 |   |   |
版權符 | © | © |
注冊符 | ® | ® |
使用方法
String str=getString(R.string.format2); CharseQuence cq=Html.from(str); textView.setText(cq);
通過靈活運用以上字符串格式化的技巧,我們可以加快開發的效率,提高界面布局的美觀程度。
參考資料:
http://blog.csdn.net/wsywl/article/details/6555959
http://blog.163.com/djx421%40126/blog/static/4885513620104212950216/