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

Android字符串XML提示和技巧

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

0

101

0

Android 字符串 XML 開發(fā)

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

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

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

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

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

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

秘密成分

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

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

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

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

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

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

讓我們考慮一下同樣的復(fù)數(shù)資源,它包含鏈接的官方文檔中的歌曲數(shù)量,但是波蘭語用作默認翻譯(位于values目錄中),并且根本沒有英語。請注意,當前版本的lint會抱怨缺少many數(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="other">Znaleziono %d piosenek.</item>    
   </plurals>    
</resources>

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

例如,如果語言設(shè)置為立陶宛語,我們將得到Znaleziono 5 piosenki.,這在波蘭語中是不正確的。但是,如果設(shè)備運行的是Android 7或更高版本(API 24+),并且您指定了resConfigs 'pl'(有關(guān)更多信息,請參閱DSL文檔)。如果應(yīng)用程序不支持區(qū)域設(shè)置,則將使用other數(shù)量。這是一個修改過的樣品,包括這個數(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è)您必須在幾個地方重復(fù)一些文本,例如,某個屏幕名稱在列表上用作標簽,在該屏幕上用作標題。當然,你可以直接復(fù)制粘貼它們,但這很不方便。在文本更改的情況下,您必須記住在幾個地方更新它。然而,有一個更好的解決辦法。您可以引用已有的字符串,如下所示:

<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>    

救援實體

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

<!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>    

翻譯還是不翻譯?

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

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

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

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