【问题标题】:Why do we need to add @SuppressLint("SetTextI18n") annotation before concatenating strings in Android Studio为什么我们需要在Android Studio中连接字符串之前添加@SuppressLint("SetTextI18n")注解
【发布时间】:2020-09-26 10:59:17
【问题描述】:

我尝试使用以下代码连接“数字”(整数变量)和“$”(字符串),但我收到了来自 android studio 的警告:“不要连接使用 setText 显示的文本。使用带有占位符的资源字符串。”并建议我添加“@SuppressLint("SetTextI18n")”。在此之后,警告消失了。

连接字符串有什么问题。以及为什么我们需要添加

@SuppressLint("SetTextI18n")
fun displayPrice(number: Int){
    price_text_view.text= "$number$"
}

【问题讨论】:

    标签: android string kotlin concatenation settext


    【解决方案1】:

    “I18”代表“国际化”。 Android 的本地化资源机制允许您支持各种语言环境,而无需修改您的代码。例如,如果您的应用程序必须支持多种货币,它的外观如下所示:

    res/values-en_US/strings.xml:

    <string name="price">%d$</string>
    

    res/values-en_UK/strings.xml:

    <string name="price">%d£</string>
    

    res/values-de/strings.xml:

    <string name="price">%d€</string>
    

    然后您的代码将根据设备的语言环境自动选择正确的版本:

    fun displayPrice(number: Int) {
        price_text_view.text = resources.getString(R.string.price, number)
    }
    

    如果您的应用程序只支持带有$ 符号的货币,那么硬编码它并使用@SuppressLint("SetTextI18n") 来消除警告是有意义的。否则,请考虑使用字符串资源。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多