中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

Android字符串XML提示和技巧

發(fā)布于:2021-01-30 11:55:20

0

104

0

Android 字符串 XML 開發(fā)

本文介紹了一些技巧,這些技巧可在為Android應(yīng)用程序開發(fā)字符串資源時(shí)為您提供幫助。

百分比如何使代碼生???

默認(rèn)情況下,字符串資源是所謂的格式化的。這意味著它們可能用于格式化。下面是一個(gè)簡(jiǎn)單的示例:

val text = resources.getString(R.string.welcome_message, 4)
//"You have 4 new messages."

<string name="welcome_messages">You have %d new messages.</string>

Lint對(duì)格式化字符串執(zhí)行檢查,如果遇到像這樣的字符串:%d of %d left。這種情況下的錯(cuò)誤消息是用非位置格式指定的多個(gè)替換;您是想添加格式化的= " false "屬性嗎?

人們可能認(rèn)為添加formatted="false"屬性是正確的解決方案(事實(shí)上,沒有其他關(guān)于如何修復(fù)此問(wèn)題的直接建議)。如果添加建議的屬性,lint錯(cuò)誤將消失。但是,在這種情況下,正確的解決方法是使格式具有位置性。在本例中,它將是%1$d of %2$d left

另一方面,formatted="false"用于百分比符號(hào)不是任何格式說(shuō)明符的一部分的字符串,例如Equation: a=50%b+20%c。

秘密成分

假設(shè)你只為本地市場(chǎng)開發(fā)一個(gè)應(yīng)用程序,不需要英文文本。默認(rèn)翻譯(位于values目錄中)將使用給定區(qū)域中最常用的語(yǔ)言,例如波蘭的波蘭語(yǔ)或瑞士的德語(yǔ)。由于目錄名中沒有區(qū)域設(shè)置限定符,因此假定為英語(yǔ)。這導(dǎo)致了幾個(gè)問(wèn)題。首先,Android Studio spellchecker會(huì)抱怨大部分單詞。

此外,lint可能會(huì)將一些單詞檢測(cè)為常見的拼寫錯(cuò)誤,并因此產(chǎn)生警告。例如,單詞adres在波蘭語(yǔ)中是正確的,但在英語(yǔ)address中是一個(gè)常見的拼寫錯(cuò)誤。以下是Android Studio建議的快速修復(fù)方法:

不幸的是,最好的不在名單上。請(qǐng)注意,為每個(gè)標(biāo)記添加tools:ignore="Typos"屬性是可行的,但這相當(dāng)麻煩,因此不是最佳解決方案。

屬性才是真正有用的。它告訴工具文件中使用的語(yǔ)言。您可以將其添加到resources標(biāo)記中,如下所示:

<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="pl">

請(qǐng)記住,只有Android Studio spellchecker和lint才使用它。它不會(huì)影響運(yùn)行時(shí)的任何行為!在某些領(lǐng)域尤其如此,例如,它不會(huì)改變復(fù)數(shù)規(guī)則。這在實(shí)踐中意味著什么?

讓我們考慮一下同樣的復(fù)數(shù)資源,它包含鏈接的官方文檔中的歌曲數(shù)量,但是波蘭語(yǔ)用作默認(rèn)翻譯(位于values目錄中),并且根本沒有英語(yǔ)。請(qǐng)注意,當(dāng)前版本的lint會(huì)抱怨缺少many數(shù)量,但我們將在下一章中回到這一點(diǎn)。以下是片段:

<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="pl">    
   <plurals name="numberOfSongsAvailable">    
        <item quantity="one">Znaleziono %d piosenk?.</item>    
        <item quantity="few">Znaleziono %d piosenki.</item>    
        <item quantity="other">Znaleziono %d piosenek.</item>    
   </plurals>    
</resources>

例如,如果設(shè)備的語(yǔ)言設(shè)置為波蘭語(yǔ)并且實(shí)際歌曲數(shù)為5,則結(jié)果文本為Znaleziono 5 piosenek.,因?yàn)椴ㄌm語(yǔ)中的5屬于many數(shù)量。但是,在其他語(yǔ)言中,相同的數(shù)字可以映射到不同的量。請(qǐng)看下表:

例如,如果語(yǔ)言設(shè)置為立陶宛語(yǔ),我們將得到Znaleziono 5 piosenki.,這在波蘭語(yǔ)中是不正確的。但是,如果設(shè)備運(yùn)行的是Android 7或更高版本(API 24+),并且您指定了resConfigs 'pl'(有關(guān)更多信息,請(qǐng)參閱DSL文檔)。如果應(yīng)用程序不支持區(qū)域設(shè)置,則將使用other數(shù)量。這是一個(gè)修改過(guò)的樣品,包括這個(gè)數(shù)量:

<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="pl">    
     <plurals name="numberOfSongsAvailable">    
          <item quantity="one">Znaleziono %d piosenk?.</item>    
          <item quantity="few">Znaleziono %d piosenki.</item>    
          <item quantity="many">Znaleziono %d piosenek.</item>    
          <item quantity="other">Liczba znalezionych piosenek: %d.</item>    
     </plurals>    
</resources>    

假設(shè)您必須在幾個(gè)地方重復(fù)一些文本,例如,某個(gè)屏幕名稱在列表上用作標(biāo)簽,在該屏幕上用作標(biāo)題。當(dāng)然,你可以直接復(fù)制粘貼它們,但這很不方便。在文本更改的情況下,您必須記住在幾個(gè)地方更新它。然而,有一個(gè)更好的解決辦法。您可以引用已有的字符串,如下所示:

<string name="tab_foo">Foo</string>    
<string name="tab_baz">Baz</string>
   
<string-array name="tab_labels">    
     <item>@string/tab_foo</item>    
     <item>@string/tab_baz</item>    
</string-array>    

救援實(shí)體

如果只重復(fù)了部分課文呢?例如,應(yīng)用程序名稱在多個(gè)文本中使用。我們可以為此創(chuàng)建一個(gè)自定義的內(nèi)部XML實(shí)體。然后,它可以像標(biāo)準(zhǔn)字符實(shí)體一樣使用(&等)。請(qǐng)看以下示例:

<!DOCTYPE resources [    
    <!ENTITY foo "Foo">    
    ]>    
<resources>    
    <string name="app_name">&foo;</string>    
    <string name="busy_warning">Sorry, &foo; is working hard, please try again in a moment.</string>    
    <string name="trademark">&foo; is a registerd trademark, all rights reserved.</string>    
</resources>    

翻譯還是不翻譯?

有些文本不是用來(lái)翻譯的。例如,作者或應(yīng)用程序名和其他專有名稱。如果只為某些字符串提供默認(rèn)翻譯,而在特定語(yǔ)言的文件中忽略了它們,lint會(huì)抱怨缺少翻譯。當(dāng)然,您可以抑制這個(gè)錯(cuò)誤,但幸運(yùn)的是,有一個(gè)更干凈的解決方案。

translatable="false"屬性將給定的字符串標(biāo)記為不可翻譯。這樣的資源不僅不需要翻譯,而且不能有任何翻譯。不可翻譯文本的翻譯將導(dǎo)致相應(yīng)的lint錯(cuò)誤。Android Studio的翻譯編輯器也支持此功能。下面是一個(gè)不可翻譯字符串的示例:

<string name="author" translatable="false">Droids On Roids</string>

可翻譯屬性只能在單個(gè)字符串級(jí)別上工作。如果有很多,可以將它們分組到一個(gè)名為donottranslate.xml的文件中。Lint將把它們都視為不可翻譯的。