一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

android String 資源 你所不知道的

 _私_房_菜_ 2012-02-22

轉載自:

http://www.cnblogs.com/over140/archive/2011/10/20/2218560.html#Formating_and_Styling

前言

  本章內 容為Android開發(fā)者指南的Framework Topics/Application Resources/Resource Types/String章節(jié),譯為"字符串資源",版本為Android 4.0 r1,翻譯來自:"呆呆大蝦",歡迎訪問他的微博:"http://weibo.com/popapa",再次感謝"呆呆大蝦" !期待你一起參與翻譯Android的相關資料,聯(lián)系我over140@gmail.com。

 

聲明

  歡迎轉載,但請保留文章原始出處:) 

    博客園:http://www.cnblogs.com/

    Android中文翻譯組:http:///6vJQl

 

 

 

Resources Types - String

譯者署名: 呆呆大蝦

譯者微博:http://weibo.com/popapa

版本:Android 4.0 r1

 

原文

http://developer./guide/topics/resources/style-resource.html

 

字符串資源

string資源為應用程序提供字符串文本,并可附帶文本樣式和格式。有以下三種類型的string資源可供應用程序使用:

String

提供單個字符串的XML資源。

String Array

提供字符串數(shù)組的XML資源。

Quantity Strings 復數(shù)

保存單詞或詞組各種數(shù)量形式(單數(shù)/復數(shù))下的字符串XML資源。

所有字符串都能應用各種樣式標記及格式參數(shù)。樣式化和格式化串的信息請參閱章節(jié)和樣式

 

 

String

能被應用程序或者其他資源文件(比如layout XML)引用的單個字符串。

注意字符串是簡單類型資源,是用名稱(name)(而非XML文件名)來直接引用的。因此,在一個XML文件里,可以把字符串資源和其他簡單類型資源一起放在一個<resources>元素下。

 

文件位置

res/values/filename.xml

文件名可隨意指定。<string>元素的name將被用作資源ID。

 

編譯后資源的數(shù)據(jù)類型

指向String的資源指針。

 

資源引用

Java代碼:R.string.string_name

XML代碼@string/string_name

 

語法

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="string_name">text_string</string>

</resources>

 

元素

<resources>

必填項。必須是根元素。

無屬性。

 

<string>

可以包含樣式標記的字符串。注意須對單引號或雙引號進行轉義。更多信息請參閱下文格式化和樣式

 

屬性:

name

String類型。字符串的名稱。此名稱將作為資源ID用于引用此字符串。

 

示例

保存在res/values/strings.xml XML文件:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">Hello!</string>

</resources>

 

以下布局(layoutXML將字符串資源用于View

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello" />

 

以下應用程序代碼讀取一個字符串資源:

String string = getString(R.string.hello);

可以用getString(int)getText(int)來讀取字符串資源,getText(int)會一并讀取應用于字符串的rich text樣式。

 

 

String Array

可被應用程序引用的字符串數(shù)組。

注意字符串數(shù)組是簡單類型資源,是用名稱(而非XML文件名)來直接引用的。因此,在一個XML文件里,可以把字符串數(shù)組資源和其他簡單類型資源一起放入一個<resources>元素下。

 

文件位置

res/values/filename.xml

文件名可隨意指定。<string-array>元素的名字name將被用作資源ID。

 

編譯后資源的數(shù)據(jù)類型

指向String數(shù)組的資源指針。

 

資源引用

Java代碼R.array.string_array_name

 

語法

<?xml version="1.0" encoding="utf-8"?> 

<resources>

<string-array

name="string_array_name">

<item

>text_string</item>

</string-array>

</resources>

 

元素

<resources>

必填項。必須是根元素。

無屬性。

 

<string-array>

定義一個字符串數(shù)組。包含了一個或多個<item>元素。

 

屬性:

Name

String類型。字符串數(shù)組的名稱。此名稱將作為資源ID用于引用此數(shù)組。

                                        

<item>

一個字符串,可以包含樣式標識??梢允菍ζ渌址Y源的引用。必須作為<string-array>元素的子元素存在。注意對單引號和雙引號須進行轉義。有關如何正確地樣式化及格式化字符串,請參閱下文格式化和樣式。

無屬性。

 

示例

保存在res/values/strings.xml XML文件:

<?xml version="1.0" encoding="utf-8"?> 

<resources>

<string-array name="planets_array">

<item>Mercury</item></string-array>

<item>Venus</item>

<item>Earth</item>

<item>Mars</item>

</string-array>

</resources>

 

以下程序代碼返回字符串數(shù)組:

Resources res = getResources(); 

String[] planets = res.getStringArray(R.array.planets_array);

 

Quantity Strings(復數(shù))

不同的語言對數(shù)量進行描述的語法規(guī)則也不同。比如在英語里,數(shù)量1是個特殊情況,我們寫成“1 book”,但其他任何數(shù)量都要寫成n books”。這種單復數(shù)之間的區(qū)別是很普遍的,不過其他語言會有更好的區(qū)分方式。Android支持的全集包括zero、one two、few、manyother

決定選擇和使用某種語言和復數(shù)的規(guī)則是非常復雜的,所以Android提供了諸如getQuantityString()的方法來選擇合適的資源。

注意,要按照語法規(guī)則來建立可選項。在英語里,即使數(shù)量為0,字符串零(zero)也不需要建立。因為0在英語語法表達上和2沒有區(qū)別,和其他除1以外的任何數(shù)字都沒有差別("zero books", "one book", "two books",等等)。 不要被two聽起來似乎只能用于數(shù)量2” 樣的事誤導。某語言可能需要2、12、102(等等)和1一樣形式表示,而又與其他數(shù)的形式都不同。請依靠翻譯人員來了解一下實際語言中的差別。

如果和應用程序的風格一致,常可以用諸如“Books: 1”的模糊數(shù)量形式來避免使用數(shù)量字符串。這會讓你和翻譯人員都輕松些。

注意:復數(shù)字符串是簡單類型資源,是用名稱(name)(而不是XML文件名)來直接引用的。因此,在一個XML文件里,可以把復數(shù)字符串資源和其他簡單類型資源一起放在一個<resources>元素下。

 

文件位置

res/values/filename.xml

文件名可隨意指定。<plurals>元素的名字name將被用作資源ID

 

資源引用

Java代碼:R.plurals.plural_name

 

語法

<?xml version="1.0" encoding="utf-8"?> 

<resources>

<plurals

name="plural_name">

<item_plurals

quantity=["zero" | "one" | "two" | "few" | "many" | "other"

>text_string</item>

</plurals>

</resources>

 

元素

<resources>

必填項。必須是根元素。

無屬性。

 

<plurals>

一個字符串集,每個數(shù)量表示提供一個字符串。包含一個或多個<item>元素。

 

屬性:

name

String類型。字符串對的名稱。此名稱將作為資源ID

<item>

一個單數(shù)或復數(shù)形式的字符串。可以是對其他字符串資源的引用。必須作為<plurals>元素的子元素存在。注意須對單引號和雙引號進行轉義。有關如何正確地樣式化及格式化字符串,請參閱下文格式化和樣式。

 

屬性:

quantity

關鍵字 表示要使用此字符串的數(shù)量值。以下是合法的值(括號內列出部分語言要求):

描述

zero

語言需要對數(shù)字0進行特殊處理。(比如阿拉伯語)

one

語言需要對類似1的數(shù)字進行特殊處理。(比如英語和其它大多數(shù)語言里的1;在俄語里,任何以1結尾但不以11結尾的數(shù)也屬于此類型。)

two

語言需要對類似2的數(shù)字進行特殊處理。(比如威爾士語)

few

語言需要對較小數(shù)字進行特殊處理(比如捷克語里的2、3、4;或者波蘭語里以2、3、4結尾但不是12、13、14的數(shù)。)

many

語言需要對較大數(shù)字進行特殊處理(比如馬耳他語里以11-99結尾的數(shù))

other

語言不需要對數(shù)字進行特殊處理。

示例

存放在res/values/strings.xml XML文件:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<plurals name="numberOfSongsAvailable">

<item quantity="one">One song found.</item>

<item quantity="other">%d songs found.</item>

</plurals>

</resources>

 

存放在res/values-pl/strings.xml XML文件:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<plurals name="numberOfSongsAvailable">

<item quantity="one">Znaleziono jedn? piosenk?.</item>

<item quantity="few">Znaleziono %d piosenki.</item>

<item quantity="other">Znaleziono %d piosenek.</item>

</plurals>

</resources>

 

Java代碼:

int count = getNumberOfsongsAvailable(); 

Resources res = getResources(); 

String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count,count);

 

在使用getQuantityString()方法時,如果字符串包含數(shù)字格式化串,則需要傳遞2count參數(shù)。例如:對于字符串%d songs found”,第一個count參數(shù)選擇合適的復數(shù)字符串,第二個count參數(shù)插入占位符%d中。如果復數(shù)字符串資源不包含格式化信息,就不需要給getQuantityString()傳遞第三個參數(shù)。

 

 

格式化和樣式化

關于如何格式化和樣式化字符串資源,下面這些比較重要的地方應該了解。

 

單引號和雙引號的轉義

如果字符串里包含單引號或雙引號,必須進行轉義,或者把整個串封閉在與當前引號不同的成對的引號內。下面是一些有效或無效的字符串示例:

<string name="good_example">"This'll work"</string>

<string name="good_example_2">This\'ll also work</string>

<string name="good_example_2">This\'ll also work</string>

<string name="bad_example">This doesn't work</string>

<string name="bad_example_2">XML encodings don’t work</string>

 

字符串的格式化

如果需要使用String.format(String, Object...)格式化字符串,可以把格式化參數(shù)放在字符串(string)資源里。比如存在以下資源:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

此例中存在兩個參數(shù):%1$s是個字符串,%2$d 是個數(shù)字。則在應用程序中可以用如下方式用參數(shù)來格式化字符串:

Resources res = getResources();

String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

 

HTML標記來樣式化

可以用HTML 標記來為字符串加入樣式。例如:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="welcome">Welcome to <b>Android</b>!</string>

</resources>

 

支持以下HTML元素:

·   <b>文本加粗bold。

·   <i>文本變斜體italic

·   <u>文本加下劃線underline。

有時可能要創(chuàng)建一個樣式化的文本資源,并可作為格式化串使用。通常這不能生效,因為String.format(String, Object...)方法會去除字符串內的所有的樣式信息。解決方法是寫入一段轉義后的HTML標記,然后在格式化后再用fromHtml(String)恢復出這些樣式。例如:

1.  將樣式化的文本資源存儲為轉義后的HTML字符串:

<resources>

    <string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>

</resources>

在這個格式化字符串里,加入了一個<b>元素。注意左尖括號是用標記&lt轉義過的HTML。

2.       然后,按照通常方式格式化字符串,并調用fromHtml(String) HTML文本轉換成帶樣式的文本。

Resources res = getResources(); 

String text = String.format(res.getString(R.string.welcome_messages), username,mailCount); 

CharSequence styledText = Html.fromHtml(text);

因為fromHtml(String)方法會格式化所有的HTML內容,所以要確保用htmlEncode(String)對帶格式化文本的字符串內所有可能的HTML字符進行轉義。比如,如果要把可能包含諸如“<”“&”等字符的串作為參數(shù)傳給String.format(),那么必須在格式化之前對這些字符進行轉義。格式化后,再把字符串傳入fromHtml(String),這些特殊字符就能還原成本來意義了。例如:

String escapedUsername = TextUtil.htmlEncode(username)

Resources res = getResources();

String text = String.format(res.getString(R.string.welcome_messages), escapedUsername,mailCount);

CharSequence styledText = Html.fromHtml(text);

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产级别精品一区二区视频| 黄色片国产一区二区三区| 日本淫片一区二区三区| 亚洲国产性感美女视频| 麻豆果冻传媒一二三区| 欧美日本亚欧在线观看| 国产欧美日本在线播放| 免费在线播放一区二区| 欧美日韩国内一区二区| 麻豆一区二区三区在线免费| 91麻豆精品欧美视频| 91麻豆精品欧美一区| 久久热九九这里只有精品| 免费在线成人午夜视频| 午夜精品麻豆视频91| 精品香蕉国产一区二区三区| 日本一本不卡免费视频| 日本丰满大奶熟女一区二区| 日本久久精品在线观看| 日韩精品免费一区三区| 亚洲做性视频在线播放| 亚洲中文字幕有码在线观看| 中日韩美一级特黄大片| 日韩精品免费一区三区| 欧美黑人暴力猛交精品| 高清欧美大片免费在线观看| 欧美偷拍一区二区三区四区| 91欧美日韩中在线视频| 国产在线一区二区三区不卡| 少妇成人精品一区二区| 在线一区二区免费的视频| 日韩成人h视频在线观看| 国产精品一区二区不卡中文| 久久精品亚洲精品一区| 欧美日韩欧美国产另类| 亚洲av一区二区三区精品| 冬爱琴音一区二区中文字幕| 亚洲视频一级二级三级| 日韩精品视频香蕉视频| 好骚国产99在线中文| 国产又猛又黄又粗又爽无遮挡|