android plurals用法(單複數)

2021-10-07 10:18:04 字數 2383 閱讀 8879

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檔案裡寫入多個...