android plurals用法
android中的string資源佔位符及plurals string
對乙個給定的語言和數字來說,決定使用哪乙個case的規則是很複雜的,所以android提供了方法getquantitystring(),它可以用來為你選擇合適的資源。
乙個複數或者單數字串。它的值可以是對其他字串資源的乙個引用。必須是 的子節點。必須知道不要撇號和引號。可以參考下面的例子。
屬性:quantity:
關鍵字.這個值反應了什麼時候這個字元該被使用。正確的值,在括號裡面有不詳盡的例子:
value
zero 當語言需要特別對待0時(就想阿拉伯)
one 當語言需要特別對待1(就像英語裡和其他語言裡的1;在russian,任何以1結尾但是不是以11結尾的也使用這種情況)
two 當語言需要特別對待1(例如welsh的2,或者slovenian的102)
few 當語言需要特別對待small(例如czech的2,3,4;或者以2,3,4結尾但是不是12,13,14的polisth)
many 當語言需要特別對待large(例如maltese的11-99)
other 當語言沒有要求對特定資
例項:
%d book
%d books
**:
string booknum = getresources().getquantitystring(r.plurals.book_number, 1, 2);
tv4.settext(booknum);
string booknum2 = getresources().getquantitystring(r.plurals.book_number, 2, 4);
tv5.settext(booknum2);
注意:一定要在english語言環境下才起作用,語言為中文不起效。
當第二個引數為1時,會呼叫 book,為其他數值時,會呼叫books。
為什麼只在英文語言環境下才起作用呢?
@nonnull
public string getquantitystring(@pluralsres int id, int quantity, object... formatargs)
throws notfoundexception
@nonnull
public charsequence getquantitytext(@pluralsres int id, int quantity)
throws notfoundexception
跟進resourceimpl中的getquantitytext函式:
charsequence getquantitytext(@pluralsres int id, int quantity) throws notfoundexception
//rule沒能找到對應的quanitiycode時,就用"other"欄位的定義
res = massets.getresourcebagtext(id, id_other);
if (res != null)
//上面尋找資源檔案出問題,就丟擲異常
throw new notfoundexception("plural resource id #0x" + integer.tohexstring(id)
+ " quantity=" + quantity
+ " item=" + rule.select(quantity));
}
這裡我們首先看一下getpluralrule函式:
private pluralrules getpluralrule()
return mpluralrule;
}}
pluralrules的select函式對應的底層實現,在此不作深研究,不同的locales應該有不同的實現。
在此看看attrforquantitycode:
private static int attrforquantitycode(string quantitycode)
}
從上面的**可以看出,pluralrules的select函式的作用,就是將quantity對映成pluralrules定義的keyword。
然後attrforquantitycode將keyword轉化成資源檔案能識別的標誌。
現在回到我們之前的問題,為什麼終端語言為中文時,plurals string失效?
原因是attrforquantitycode的結果一直是id_other,即中文對應pluralrules無法有效將quantity轉化為正確的keyword。
用Margin還是用Padding
用margin還是用padding 何時應當使用margin 需要在border外側新增空白時。空白處不需要背景 色 時。上下相連的兩個盒子之間的空白,需要相互抵消時。如15px 20px的margin,將得到20px的空白。何時應當時用padding 需要在border內測新增空白時。空白處需要背...
用Margin還是用Padding
用margin還是用padding這個問題是每個學習css高階時的必經之路。css邊距屬性定義元素周圍的空間。通過使用單獨的屬性,可以對上 右 下 左的外邊距進行設定。也可以使用簡寫的外邊距屬性同時改變所有的外邊距。w3school 邊界 margin 元素周圍生成額外的空白區。空白區 通常是指其他...
用yaml寫用例
第一步 安裝yaml,在執行裡輸入 pip install pyyaml 檢驗是否安裝成功,在pycharm裡輸入 import yaml 第二步 建立乙個file,字尾寫yaml或yml 在yml檔案裡寫入單個使用者名稱和密碼 開啟yml檔案並以字典的形式列印出來 執行結果 在yml檔案裡寫入多個...