为什么我们需要在 Android Studio 中连接字符串之前添加 @SuppressLint("SetTextI18n") 注解
Why do we need to add @SuppressLint("SetTextI18n") annotation before concatenating strings in Android Studio
我尝试了以下代码来连接 'number'(整数变量)和“$”(字符串),但我收到了来自 android studio 的警告:"Do not concatenate text displayed with setText. Use resource string with placeholders." 并建议我添加“@SuppressLint("SetTextI18n")
”。在此之后警告消失了。
连接字符串有什么问题。为什么我们需要添加
@SuppressLint("SetTextI18n")
fun displayPrice(number: Int){
price_text_view.text= "$number$"
}
"I18"代表"Internationalization"。 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")
来消除警告是有意义的。否则,请考虑使用字符串资源。
我尝试了以下代码来连接 'number'(整数变量)和“$”(字符串),但我收到了来自 android studio 的警告:"Do not concatenate text displayed with setText. Use resource string with placeholders." 并建议我添加“@SuppressLint("SetTextI18n")
”。在此之后警告消失了。
连接字符串有什么问题。为什么我们需要添加
@SuppressLint("SetTextI18n")
fun displayPrice(number: Int){
price_text_view.text= "$number$"
}
"I18"代表"Internationalization"。 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")
来消除警告是有意义的。否则,请考虑使用字符串资源。