#android #kotlin
#Android #kotlin
Вопрос:
Я создал простую программу для изучения конкатенации в Android Studio с помощью Kotlin. Итак, я попытался получить строковое значение из ресурсов в 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()<p>
resultView.text = getString(R.string.txt_show, finalResult)<p>
И замените %1$s
на %1$d
в ресурсах strings.xml
Предупреждение исчезло, но у меня возникли проблемы, сначала результат — целое число, что не то, что я ожидал. Оно должно быть двойным. Во-вторых, добавление формата функции в getString остановит программу с сообщением «Непредвиденная ошибка …» на экране.
Как я могу решить эту проблему?
Ответ №1:
Если у вас есть строка с некоторыми заполнителями, такими как:
<string name="price_string">Your price: %d</string>
Сначала вы должны прочитать это значение, а затем заполнить его
JAVA
String text = getString(R.string.price_string, 2.5);
KOTLIN
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);
KOTLIN
// 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
Комментарии:
1. как я должен это написать? Я получаю это из веб-службы (это число), и после этого мне нужен символ процента. it.data?.settlementPercentage. toString() «%»
2. Попробуйте использовать:
%%
, чтобы в тексте был обычный%
символ. Например.String.format("%s%%, discount)
Ответ №2:
сначала результат является целым числом, чего я не ожидал. Оно должно быть двойным.
Тогда почему вы позвонили toInt
? Просто используйте
resultView.text = getString(R.string.txt_show, result)
и %1$.2f
(или просто %.2f
) в строке вместо %1$d
для форматирования до двухзначного дробного числа. Вы можете видеть, что она указана так же, как в format
функции в вашем коде. Документация по строкам формата (что все это %d
означает и т.д.) находится по адресу https://developer.android.com/reference/java/util/Formatter.html.
Комментарии:
1. resultView.text = getString(R.string.txt_show, результат) не работает, когда я использую %1 $ d. Итак, я должен изменить его на %.2f, и мне больше не нужна функция format для форматирования в двухзначное дробное число. Спасибо.