開發手記--android佈局用佔位符%1$s
阿新 • • 發佈:2019-02-15
在開發中,如果遇到如下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));
空格:  <: < >:>