Kotlin Android Studio 警告“不要连接用 setText 显示的文本。使用带有占位符的资源字符串。”

Xel*_*via 4 android kotlin

我制作了一个简单的程序来学习使用 Kotlin 在 android studio 中的连接。所以,我尝试从 strings.xml 中的资源中获取一个字符串值,如下所示,并与一个值连接

<string name="txt_show">Your lucky number is %1$s</string>
Run Code Online (Sandbox Code Playgroud)

我从 getString 收到警告“不要连接文本...”

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val firstNumber = numEditText.text

    processButton.setOnClickListener {
        val result = concatText(firstNumber.toString().toDouble())
        resultView.text = getString(R.string.txt_show, " ") + result.format(2)

    }
}

private fun concatText(myNumber: Double): Double {
    val luckyNumber = 1.79
    return luckyNumber * myNumber
}
private fun Double.format(digits: Int) = java.lang.String.format("%.${digits}f", this)} 
Run Code Online (Sandbox Code Playgroud)

通过替换

resultView.text = getString(R.string.txt.show, " ") + result.format(2)
Run Code Online (Sandbox Code Playgroud)

val finalResult =  result.toInt()<p>
resultView.text = getString(R.string.txt_show, finalResult)<p>
Run Code Online (Sandbox Code Playgroud)

并替换%1$s%1$dstrings.xml的资源中

警告消失了,但我遇到了问题,首先结果是整数,这不是我所期望的。它应该是双重的。其次,在 getString 中添加函数格式将停止程序并在屏幕上显示“意外错误...”消息。

我怎么解决这个问题?

Bok*_*ken 13

如果您的字符串带有一些占位符,例如:

<string name="price_string">Your price: %d</string>
Run Code Online (Sandbox Code Playgroud)

首先你必须读取这个值然后填充它

爪哇

String text = getString(R.string.price_string, 2.5);
Run Code Online (Sandbox Code Playgroud)

科特林

val text = getString(R.string.price_string, 2.5)
Run Code Online (Sandbox Code Playgroud)

.

或以“更长”的方式:

爪哇

// Read text
String priceString = getString(R.string.price_string);

// Fill it
String output = String.format(priceString, 2.5);
Run Code Online (Sandbox Code Playgroud)

科特林

// Read text
val priceString = getString(R.string.price_string)

// Fill it
val output = String.format(priceString, 2.5)
// or
val output = priceString.format(2.5)
Run Code Online (Sandbox Code Playgroud)

如果你有,%s你必须用String. 在这里您有更多信息:https : //developer.android.com/guide/topics/resources/string-resource#formatting-strings