Kotlin Android Studio警告“请勿串联显示为setText的文本。将资源字符串与占位符一起使用。”

时间:2019-03-12 06:36:13

标签: android kotlin

我编写了一个简单的程序来了解Kotlin在android studio中的级联。因此,我尝试从strings.xml中的资源中获取一个字符串值,如下所示,并与一个值连接

<string name="txt_show">Your lucky number is %1$s</string>

我从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)} 

通过替换

resultView.text = getString(R.string.txt.show,“”)+ result.format(2)

val finalResult = result.toInt()

resultView.text = getString(R.string.txt_show,finalResult)

并在strings.xml资源中将%1 $ s 替换为%1 $ d

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

<string name="price_string">Your price: %d</string>

首先,您必须读取此值,然后填充它

JAVA

String text = getString(R.string.price_string, 2.5);

科特琳

val text = getString(R.string.price_string, 2.5)

或“较长”方式:

JAVA

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

// Fill it
String output = String.format(priceString, 2.5);

科特琳

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

如果您有%s,则必须用String填写。在这里,您可以获得更多信息:https://developer.android.com/guide/topics/resources/string-resource#formatting-strings