1. 程式人生 > >開發手記--android佈局用佔位符%1$s

開發手記--android佈局用佔位符%1$s

在開發中,如果遇到如下listview的item佈局

以前總是把“物料名稱:”作為一個TextView,後面具體值作為一個TextView。這樣做使得佈局變得很繁瑣。後來發現可以使用佔位符%1$s使其變成一個TextView,使得佈局變得簡單。

1.在strings.xml中定義<string name="material_name">物料名稱:%1$s</string>

2.在佈局TextView中引入  

<TextView
            android:id="@+id/tv_material_name" 
            style="@style/text_delivery_order"
            android:text="@string/material_name"/>

3.在Java程式碼中進行賦值

.setText(String.format(getResources().getString(R.string.material_name),"食用油"));

下面是封裝的String.format()方法:

private String stringFromt(int sId,String str) {
if(sId == 0 || str == null) 
return null;
return String.format(getResources().getString(sId),str);
}
tv_material_name.setText(stringFromat(R.string.material_name,"食用油"));

擴充套件:還可以新增多個佔位符<string name="my">我叫:%1$s,我來自%2$s,我做%3$s工作</string>

.setText(String.format(getResources().getString(R.string.my),"小明","北京","程式設計師");

常用的有:

%n$ms:代表輸出的是字串,n代表是第幾個引數,設定m的值可以在輸出之前放置空格 
%n$md:代表輸出的是整數,n代表是第幾個引數,設定m的值可以在輸出之前放置空格
%n$mf:代表輸出的是浮點數,n代表是第幾個引數,設定m的值可以控制小數位數,如m=2.2時,輸出格式為00.00 


(注:m放置空格,並不代表m是幾,就是幾個空格,具體看實際效果)

補充:

在string.xml中可以加入 HTML元素:<b>表示粗文字 <i>表示斜體文字 <u>表示下劃線文字 ,但是如果使用佔位符format的時候,會出現失效的情況。需要使用 htmlEncode(String) 對用於帶格式文字的字串中任何可能的 HTML 字元進行轉義。如果您向 String.format() 傳遞的字串引數可能包含“<”或“&”之類的字元,則必須在設定格式前進行轉義,這樣在通過 fromHtml(String) 傳遞帶格式字串時,字元就能以原始形式顯示出來。 


 <string name="audit_title_str"><u>  %1$s  </u>量化稽核工作指南</string>
 String escapedUsername = TextUtil.htmlEncode(username);
 Resources res = getResources();
 String text = String.format(res.getString(R.string.audit_title_str), escapedUsername);
 .setText(Html.fromHtml(text));
空格:&#160;   <: &lt;     >:&gt;