Android字符串及字符串資源的格式化


為什么要寫這一篇隨筆呢?最近做項目的過程中,遇到很多頁面在要顯示文本時,有一部分是固定的文本,有一部分是動態獲取的,並且格式各式各樣。一開始采取比較笨的辦法,把他拆分成一個個文本控件,然后對不同的控件采用不同的樣式。這樣做效率

很低,並且文本之間的對齊是個很大的問題,后來到網上尋求幫助,找到一些有關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> 需要將<轉義為&lt;或者&#60; ,需要將>轉義為&gt;或者&#62(這里也可以不轉義)

代碼:

<string name="format2">&lt;b&gt;我是加粗文字&lt;/b&gt;</string>

需要說明的是:
    a. 轉義序列各字符間不能有空格;
    b. 轉義序列必須以“;”結束;
    c. 單獨的&不被認為是轉義開始。
    d. 區分大小寫 

常見的轉義字符見下表:

字符 實體名字 十進制字符編號
& &amp; &#38;
< &lt; &#60;
> &gt; &#62;
單引號 &apos &#39;
" &quot; &#34;
空格 &nbsp &#160;
版權符 &copy &#169;
注冊符 &reg &#174;

 

 

 

 

 

 

 

 

 

 

使用方法

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/

http://www.cnblogs.com/hyd309/p/3549076.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM