У меня есть массив строк, в которых используется %
символ. Правильный формат для использования %
ИС %
. Когда у меня есть строка в этом массиве с несколькими, %
это дает мне эту ошибку.
Multiple annotations found at this
line:
- error: Multiple substitutions specified in non-positional format;
did you mean to add the formatted="false" attribute?
- error: Found tag </item> where </string-array> is expected
Ответы:
Android Asset Packaging Tool (
aapt
) стал очень строгим в своем последнем выпуске и теперь используется для всех версий Android. Получаемая вами aapt-ошибка генерируется, потому что она больше не допускает непозиционных спецификаторов формата .Вот несколько идей, как вы можете включить% -символ в ваши строки ресурсов.
Если вам не нужны никакие спецификаторы формата или замены в вашей строке, вы можете просто использовать
formatted
атрибут и установить его вfalse
:В этом случае строка не используется в качестве строки форматирования,
Formatter
поэтому вам не нужно экранировать ваши% -символы. В результате получается строка «% a +% a == 2% a».Если вы пропустите
formatted="false"
атрибут, строка будет использоваться в качестве строки формата, и вы должны экранировать% -символы. Это правильно сделано с двойным%:Теперь не
aapt
дает ошибок, но в зависимости от того, как вы его используете, результирующая строка может быть "%% a + %% a == 2 %% a", еслиFormatter
вызывается без аргументов формата :Без какого-либо xml и кода трудно сказать, в чем именно заключается ваша проблема, но, надеюсь, это поможет вам немного лучше понять механизмы.
источник
Чтобы приложение могло использовать отформатированные строки из ресурсов, вы должны исправить свой XML. Так, например
следует заменить на
Вы можете увидеть это для деталей.
источник
%1$s
и%2$s
т. Д.Вы можете избежать%, используя %% для XML-парсера, но он отображается дважды на устройстве.
Чтобы показать его один раз, попробуйте следующий формат:
\%%
Например
отображается как
Fat Burning (50% to 60%)
на устройствеисточник
использование
<string name="win_percentage">%d%% wins</string>
получить
80% wins
как отформатированная строка.Я использую
String.format()
метод, чтобы получить номер вместо%d
.источник
В вашем файле strings.xml вы можете использовать любой желаемый знак Unicode.
Например, номер Unicode для знака процента - 0025:
Вы можете увидеть полный список знаков Unicode здесь
источник
%
символ возвращается. Боюсь, это не решит проблему.чтобы выйти из символа процента, вам просто нужно %%
например :
возвращает "10%"
источник
10%
не возвращается%10
. FIY: Когда вы используете,String.format
вы должны всегда указывать Locale. Вы можете быть действительно удивлены, когда вы не используете Locale и не используете арабский язык для форматирования чисел ...Не совсем ваша проблема, но похожая.
Если у вас есть более одного форматирования в вашей строковой записи, вы не должны использовать «% s» несколько раз.
НЕ
ДЕЛАТЬ :
источник
Вы можете избежать% в xml с помощью %%, но вам нужно установить текст в коде, а не в макете xml.
источник
Это может быть в случае, если IDE станет слишком строгим.
Идея здравая, в общем, вы должны указать порядок переменных подстановки, чтобы при добавлении ресурсов для другого языка ваш код Java не нуждался в изменении. Однако есть две проблемы с этим:
Во-первых, строка, такая как:
для использования в качестве Вам потребуется 2.1200 мг будет иметь такой же порядок на любом языке, поскольку это количество массы всегда представлено в этом порядке с научной точки зрения.
Во-вторых, если вы установите порядок переменных на каком бы языке ни указывались ваши ресурсы по умолчанию (например, на английском языке), вам нужно только указать позиции в строках ресурсов для языков, которые используют порядок, отличный от языка по умолчанию.
Хорошей новостью является то, что это легко исправить. Даже если нет необходимости указывать позиции, а IDE слишком строг, просто все равно укажите их. Для примера выше используйте:
источник
Хитрый метод: использование маленького знака процента, как показано ниже
Знак процента в Википедии
источник
Попробуйте это (справа):
источник
Согласно официальной документации Google, используйте% 1 $ s и% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Здравствуйте,% 1 $ s! У вас% 2 $ d новых сообщений.
источник
Предположим, вы хотите показать (скидка 50%) и ввести 50 во время выполнения. Вот код:
В классе Java используйте этот код:
источник
Попробуйте использовать обратную косую черту перед ним, как показано ниже:
источник