爲何要寫這一篇隨筆呢?最近作項目的過程當中,遇到不少頁面在要顯示文本時,有一部分是固定的文本,有一部分是動態獲取的,而且格式各式各樣。一開始採起比較笨的辦法,把他拆分紅一個個文本控件,而後對不一樣的控件採用不一樣的樣式。這樣作效率html
很低,而且文本之間的對齊是個很大的問題,後來到網上尋求幫助,找到一些有關Android字符串和字符串資源格式化的文章,在此作一個總結。app
一.字符串格式化佈局
Java的String類給咱們提供了兩個重載的格式化字符串的方法,能夠經過佔位符的方式,向固定字符串中傳入參數。他們分別是:字體
format(String format, Object... args) 新字符串使用本地語言環境,制定字符串格式和參數生成格式化的新字符串。ui
format(Locale locale, String format, Object... args) 使用指定的語言環境,制定字符串格式和參數生成格式化的字符串。spa
例如:.net
字符串佔位符%s :System.out.println("Hi,%s", "王力") 輸出 Hi,王力code
十進制整形佔位符%d :System.out.println("我今年%d歲", 20) 輸出 我今年20歲orm
浮點型佔位符%f:System.out.println("荔枝的價格是 %f 元", 3.5) 輸出 荔枝的價格是3.5元xml
還有其餘字符型,整形,日期格式等等格式化方法,再次就不一一舉例了。
二.帶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/