我编写了一个简单的程序来了解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中添加函数格式将使程序在屏幕上显示“意外错误...”消息。
我该如何解决这个问题?
答案 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