Возможно ли иметь заполнители в строковых значениях, string.xml
которым можно присваивать значения во время выполнения?
Пример:
немного строки PLACEHOLDER1 еще немного строки
android
string
string-formatting
android-resources
SoftReference
источник
источник
Ответы:
Форматирование и стиль
Да, см. Строковые ресурсы: форматирование и стилизация
Основное использование
Обратите внимание, что
getString
есть перегрузка, которая использует строку в качестве строки формата:Множественные
Если вам нужно обрабатывать множественное число, используйте это:
Первый
mailCount
параметр используется, чтобы решить, какой формат использовать (одиночный или множественный), другие параметры - ваши замены:См. Строковые ресурсы: множественное число для более подробной информации.
источник
Дополнительный ответ
Когда я впервые увидел
%1$s
и%2$d
в принятом ответе, это не имело смысла. Вот немного больше объяснений.Они называются спецификаторами формата. В строке XML они находятся в виде
1$
,2$
и3$
. Порядок их размещения в строке ресурса не имеет значения, только порядок, в котором вы указываете параметры.тип формата : существует множество способов форматирования ( см. документацию ). Вот некоторые из них:
s
строкаd
десятичное целоеf
число с плавающей запятойпример
Мы создадим следующую отформатированную строку, где серые части вставляются программно.
string.xml
MyActivity.java
Ноты
getString
потому что я был в деятельности. Ты можешь использоватьcontext.getResources().getString(...)
если он не доступен.String.format()
также отформатирует строку.1$
И2$
условия не должны быть использованы в таком порядке. То есть2$
может прийти раньше1$
. Это полезно при интернационализации приложения для языков, которые используют другой порядок слов.%1$s
несколько раз в xml, если хотите повторить его.%%
чтобы получить реальный%
характер.источник
Если вы хотите использовать параметр из фактического файла strings.xml без использования кода Java:
Это не работает для файлов ресурсов, т. Е. Переменные должны быть скопированы в каждый файл XML, который нуждается в них.
источник
<!DOCTYPE... ]>
деталь в отдельном файле и включить ее в несколько файлов ресурсов? Любой трюк для достижения этого?Искал то же самое и, наконец, нашел следующее очень простое решение. Лучше всего: это работает из коробки.
1. измените ваш ресурс строки:
2. использовать подстановку строк:
c.getString(R.string.welcome_messages,name,count);
где c - это контекст, name - строковая переменная, и подсчитайте вашу переменную int
Вам нужно будет включить
в вашем res / strings.xml. Работает для меня. :)
источник
xliff
тегах вокруг спецификаторов формата? Какую дополнительную ценность они добавляют в отличие от простого использования спецификаторов%s
и%d
?В Kotlin вам просто нужно установить строковое значение следующим образом:
Создайте текстовое представление на вашем макете:
Затем сделайте это в своем коде, если вы используете Anko:
Возможно, вам понадобится получить ресурсы из контекста приложения.
источник
Тем не менее, вам также следует прочитать ответ Элиаса Мартенсона о том, что Android во множественном числе рассматривает «ноль» . Существует проблема с интерпретацией определенных значений, таких как «ноль».
источник
в res / values / string.xml
в коде Java
источник
Вы можете использовать
MessageFormat
:В коде Java:
Уровень API 1:
https://developer.android.com/reference/java/text/MessageFormat.html
источник
Если вы хотите написать процент (%), продублируйте его:
Если вы пишете просто
%1$d%
, вы получите сообщение об ошибке:Format string 'percent' is not a valid format string so it should not be passed to String.format
.источник
Да! Вы можете сделать это без написания кода Java / Kotlin, только XML, используя эту небольшую библиотеку, которую я создал, что делает это во время сборки, поэтому ваше приложение не будет затронуто: https://github.com/LikeTheSalad/android -string ссылка
Применение
Ваши строки:
Сгенерированная строка после сборки:
источник
Прямое решение проблемы Kotlin:
strings.xml
kotlinActivityORFragmentFile.kt:
источник
В вашем строковом файле используйте это
И в вашем коде используйте соответственно
источник
Котлин версия принятого ответа ...
источник
resources.getString(int, ... args)
метода с аргументами вместоString.format
. В этом коде также нет специфики kotlin, кромеval
ключевого слова. Смотрите ответ msbodw001