Android strings.xml使用方法及技巧_Android

來源:互聯網
上載者:User

相信 strings.xml 已經是大家在 Android 開發中最熟悉的檔案之一了,但其實它也有很多需要注意的地方和一些小技巧,知道了這些可以讓你的 Android 應用更加規範易用,大家來看看吧。:   )

不要複用

這一條可能很多人會有不同的意見,因為廣為流行的編程理念就在教導我們要複用代碼,當然代碼複用是很好的理念,可以讓程式更加簡潔。但也容易形成什麼都想複用的思維慣性,而這在某些情境下就可能會造成麻煩。

比如,想象下你在應用中的登入和註冊介面中都是用了相同的字串 – R.string.loading.

<string name="loading">Loading...</string>

之後如果產品需求變更,要分別使用不同的提示,那就不得不新建立兩個 string 並在代碼中配置它們。所以如果從一開始就為不同頁面分別配置,那需要做的就僅僅是修改下 strings.xml 檔案。

<string name="sign_in_loading">正在登入...</string>
<string name="sign_up_loading">正在註冊...</string>

更容易忽略的一個原因是,如果你們的應用不想只是面對國內使用者,還要面對其他語系的使用者的話,有些語言可能會造成意想不到的問題。

因為一些語言同樣一個意思在不同的語境下,會用到不同的單詞,箇中滋味經曆過的自然會懂。

良好的檔案結構

<!-- register start --><string name="register_username">使用者名稱</string><string name="register_password">密碼</string><!-- register end --><!-- login start --><string name="login_username">使用者名稱</string><string name="login_password">密碼</string><!-- login end -->

千萬不要對此覺得麻煩,使用這樣的方式來組織 strings.xml 檔案,在應用變得複雜後,還能夠很簡單的通過搜尋甚至觀察的方式來找出你想要修改的字串。

格式化

千萬不要使用字串拼接的方法,因為不同語言的句子順序是多樣的,字串拼接會讓你的邏輯非常複雜。

這個時候就可以考慮使用字串格式化了:

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

%1$s 代表了會格式化的字串,%2$d 代表了會格式化的數值並在第二的位置,大家可以以此類推。

// Java 代碼:Resources res = getResources();String text = String.format(res.getString(R.string.welcome_messages), username, mailCount); // 注意參數的順序。

複數名詞

不要像下面這樣在你的 Java 代碼中處理單詞複數問題,因為不同的語言針對複數會有不同的文法規則。

<!-- strings.xml start --><string name="book">book</string><string name="books">books</string><!-- strings.xml end -->if (bookCount == 0) {  text = getString(R.string.book);} else {  text = getString(R.string.books);}

正確的做法應該是使用 getQuantityString(int id, int quantity) 方法。

<plurals name="book">  <item name="one">book</item>  <item name="others">books</item></plurals>int bookCount = 4;Resources res = getResources();String bookCount = res.getQuantityString(R.plurals.book, bookCount);// result: books.

當然 Quantity String 不僅支援 one,還支援 zero, two, few, many 和 other。
可以自由決定各自情況下,使用什麼詞語(當然,在中文環境下可能用處並不大)。

並且 Quantity String 也能和上面提到的格式化搭配使用:

<plurals name="book">  <item name="one">%d book found.</item>  <item name="others">%d books found.</item></plurals>int count = 4;Resources res = getResources();String bookCount = res.getQuantityString(R.plurals.book, count, count);// result: 4 books found.

Google官方建議,作為一個開發人員至少應該給名詞提供 ‘one' 和 ‘other' 屬性。

文本高亮

大家可能知道用 ForegroundColorSpan 或 SpannableStringBuilder 能夠高亮一段文本中的某些內容,但這對於多語言應用來說可能並不是最好的方式,因為這兩個方法都要依靠待高亮文字的具體位置作為參數。如果應用需要支援的語言多了之後,這就會寫大量的 Java 代碼,和頻繁計算待高亮內容位置。

這個時候就可以試試用 HTML:

<string name="html_text" formatted="false"><![CDATA[    <font color=\'#28b5f5\'>Hello</font> world.]]></string>TextView tv = (TextView) findViewById(R.id.tv_txt);tv.setText(Html.fromHtml(getString(R.string.html_text)));

這其實也是格式化的一種,我們不僅能定義顏色,還可以使用 < b >、< i >、< u > 來分別使字串具有加粗、斜體和底線。

其實 strings.xml 的用法遠沒有很多人想的那麼簡單,這裡也算是拋磚迎玉一下,如果大家想要瞭解更詳細的用法,可以參考官方文檔。:   )

以上就是對Android strings.xml 檔案的使用方法和技巧做的總結,後續繼續整理,謝謝大家對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.