Проигрыватель Android XML

У меня есть массив строк, в которых используется символ %. Правильный формат использования % - %. Когда у меня есть строка в этом массиве с несколькими %, она дает мне эту ошибку.

 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

Ответ 1

Инструмент упаковки Android Asset (aapt) стал очень строгим в своем последнем выпуске и теперь используется для всех версий Android. Полученная вами ошибка aapt генерируется, потому что она больше не позволяет спецификаторам без позиционного формата.

Вот несколько идей о том, как вы можете включить% -символ в свои строки ресурсов.

Если вам не нужны какие-либо спецификаторы или замены в вашей строке, вы можете просто использовать атрибут formatted и установить его на false:

<string formatted="false">%a + %a == 2%a</string>

В этом случае строка не используется в качестве строки формата для Formatter, поэтому вам не нужно скрывать свой% символы. Итоговая строка: "% a +% a == 2% a".

Если вы опускаете атрибут formatted="false", строка используется как строка формата, и вам нужно избежать% -символов. Правильно это делается с помощью double -%:

<string>%%a + %%a == 2%%a</string>

Теперь aapt не дает вам никаких ошибок, но в зависимости от того, как вы его используете, результирующая строка может быть "%% a + %% a == 2 %% a", если Formatter вызывается без аргументов формата:

Resources res = context.getResources();

String s1 = res.getString(R.string.str);
// s1 == "%%a + %%a == 2%%a"

String s2 = res.getString(R.string.str, null);
// s2 == "%a + %a == 2%a"

Без каких-либо xml и кода трудно сказать, что именно ваша проблема, но, надеюсь, это поможет вам понять механизмы немного лучше.

Ответ 2

Чтобы приложение использовало форматированные строки из ресурсов, вы должны исправить свой xml. Итак, например

<string name="app_name">Your App name, ver.%d</string>

следует заменить на

<string name="app_name">Your App name, ver.%1$d</string>

Подробнее см. этот.

Ответ 3

Вы можете избежать%, используя %% для анализатора XML, но он отображается дважды на устройстве.

Чтобы показать его один раз, попробуйте следующий формат: \%%

Например,

<string name="zone_50">Fat Burning (50\%% to 60\%%)</string> 

отображается как Fat Burning (50% to 60%) в устройстве

Ответ 4

Используйте

<string name="win_percentage">%d%% wins</string>

чтобы получить

80% wins как форматированная строка.

Я использую метод String.format() для ввода числа вместо %d.

Ответ 5

В файле strings.xml вы можете использовать любой знак Unicode, который вы хотите.

Например, число Unicode для знака процента равно 0025:

<string name="percent_sign">&#x0025;</string>

Вы можете увидеть полный список знаков Unicode здесь

Ответ 6

чтобы избежать символа процента, вам просто нужно %%

например:

String.format("%1$d%%", 10)

возвращает "10%"

Ответ 7

Не совсем ваша проблема, но похожая.

Если в вашей записи строки имеется несколько форматирования, вы не должны использовать "% s" несколько раз.

НЕ НЕ:

<string name="entry">Planned time %s - %s (%s)</string>

DO:

<string name="entry">Planned time %1$s - %2$s (%3$s)</string>

Ответ 8

Вы можете избежать% in xml с %%, но вам нужно установить текст в коде, а не в макет xml.

Ответ 9

Это может быть случай, когда среда IDE становится слишком строгой.

Идея звуковая, в общем, вы должны указать порядок подстановочных переменных, чтобы при добавлении ресурсов для другого языка ваш код Java не нуждался в изменении. Однако есть две проблемы:

Во-первых, строка, такая как:

You will need %.5G %s

который будет использоваться как Вам понадобится 2.1200 мг, будет иметь порядок одинаково на любом языке, поскольку это количество массы всегда представляется в этом порядке с научной точки зрения.

Во-вторых, если вы указали порядок переменных на том языке, на котором указаны ваши ресурсы по умолчанию (например, на английском языке), вам нужно указать только позиции в строках ресурсов для языков, которые используют другой порядок по умолчанию язык.

Хорошей новостью является то, что это легко исправить. Несмотря на то, что нет необходимости указывать позиции, а среда IDE слишком строгая, просто укажите их в любом случае. В приведенном выше примере используйте:

Вам понадобится% 1 $.5G% 2 $s

Ответ 10

Попробуйте это (справа):

<string name="content" formatted="false">Great application %s  ☞  %s  ☞  %s \\n\\nGo to download this application %s</string>

Ответ 11

Сложный метод: используя знак малого процента, как показано ниже

 <string name="zone_50">Fat Burning (50&#65130; to 60&#65130;)</string> 

Процент входа в Википедии

Ответ 13

Предположим, вы хотите показать (50% OFF) и ввести 50 во время выполнения. Вот код:

<string name="format_discount"> (
<xliff:g id="discount">%1$s</xliff:g>
<xliff:g id="percentage_sign">%2$s</xliff:g>
 OFF)</string>

В классе java используйте этот код:

String formattedString=String.format(context.getString(R.string.format_discount),discountString,"%");
holder1.mTextViewDiscount.setText(formattedString);

Ответ 14

Попробуйте использовать обратную косую черту перед ним, как показано ниже:

\%