提问者:小点点

为什么我们需要在Android Studio中连接字符串之前添加@SuppressLint(“settexti18n”)注释


我尝试了下面的代码来连接“number”(整数变量)和“$”(字符串),但是我从android Studio得到了一个警告:“不要连接使用settext显示的文本。使用带有占位符的资源字符串。” 并建议我添加“@suppresslint(”settexti18n“)”。 这之后,警告就消失了。

连接字符串的问题是什么。 为什么还要加上

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

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

共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”)来静音警告是有意义的。 否则,请考虑使用字符串资源。