Я устанавливаю текст с помощью setText () следующим образом.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
В этом первом простое использование, а во втором - установка текста с форматированием текста.
Android Studio настолько интересна, что я использовал меню Analyze -> Code Cleanup
и получил предложение в двух строках, например.
Не объединяйте текст, отображаемый с помощью setText. Используйте строку ресурса с заполнителями. меньше ... (Ctrl + F1)
При вызове TextView # setText:
- Никогда не вызывайте Number # toString () для форматирования чисел; он не будет правильно обрабатывать разделители дробей и цифры, зависящие от языка. Вместо этого рассмотрите возможность использования формата String # с соответствующими спецификациями формата (% d или% f).
- Не передавайте строковый литерал (например, «Hello») для отображения текста. Жестко закодированный текст нельзя правильно перевести на другие языки. Вместо этого рассмотрите возможность использования строк ресурсов Android.
- Не создавайте сообщения, объединяя фрагменты текста. Такие сообщения нельзя правильно перевести.
Что я могу для этого сделать? Кто-нибудь может помочь объяснить, что это за штука и что мне делать?
android
concatenation
textview
string-concatenation
Пратик Бутани
источник
источник
String
вsetText()
. Пример:setText(name)
вместоsetText("" + name)
. Потому что, если вы объедините текст, он не будет переведен, как если бы вы использовали жестко закодированный текст в качестве уведомления о сообщении,NPE
еслиname
будетNULL
name
нетNULL
перед использованиемsetText()
функции.<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
А в своем java-коде вы делаете что-то вроде этого:prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(вы можете выполнить форматирование в XML-файле: [ developer.android.com/guide/topics/resources/…Ответы:
Ресурс имеет загружаемую версию getString, которая принимает
varargs
типObject
: getString (int, java.lang.Object ...) . Если вы правильно настроили свою строку в strings.xml с правильными заполнителями, вы можете использовать эту версию для получения отформатированной версии вашей последней строки. Напримерс помощью
getString(R.string.welcome_message, "Test", 0);
android вернет строку с
Около
setText("" + name);
Ваш первый пример
prodNameView.setText("" + name);
не имеет для меня никакого смысла. TextView может обрабатывать нулевые значения. Если имя равно null, текст не будет отображаться.источник
%1$f
в свою строку в strings.xml, а затем вызовитеsetText(getString(R.string.string_product_rate_with_ruppe_sign, new BigDecimal(price).setScale(2, RoundingMode.UP).floatValue() ));
%1$d
. @ reegan29Не запутайтесь с % 1 $ s и % 2 $ d в принятом ответе. Вот несколько дополнительных сведений.
пример
Мы создадим следующую отформатированную строку, в которую серые части вставляются программно.
Ваш
string resource
:Выполните
string substitution
следующие действия:Примечание:
источник
Я столкнулся с тем же сообщением об ошибке lint и решил его таким образом.
Изначально мой код был:
Я получил следующую ошибку
Итак, я добавил это в
strings.xml
Это мой начальный "" + заполнитель для моего числа (количества).
Примечание . Моя
quantity
переменная была определена ранее, и я хотел добавить ее к строке. В результате мой код былПосле этого моя ошибка исчезла. Поведение в приложении не изменилось, и мое количество продолжало отображаться так, как я хотел, теперь без ошибки ворса.
источник
Вы должны проверить эту тему и использовать заполнитель, подобный его (не тестировался)
источник
Не объединяйте текст внутри вашего метода setText () , объединяйте все , что вы хотите, в String и помещайте это значение String в свой метод setText () .
пример: правильный путь
Не объединяйте внутри setText (), например
источник
проблема в том, что вы добавляете
""
в начале каждой строки.lint просканирует передаваемые аргументы
setText
и выдаст предупреждения, в вашем случае актуально следующее предупреждение:поскольку вы объединяете каждую строку с
""
.удалите эту конкатенацию, поскольку передаваемые вами аргументы уже являются текстовыми. Кроме того, вы можете использовать,
.toString()
если это вообще необходимо, в другом месте вместо конкатенации вашей строки с""
источник
Если вам не нужна поддержка i18n, вы можете отключить эту проверку ворса в Android Studio.
Файл -> Настройки -> Редактор -> Инспекции -> Android -> Lint -> Интернационализация TextView (снимите этот флажок)
источник
Вы можете использовать это, это работает для меня
источник
источник
Не сходите с ума, это слишком просто.
источник