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

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

  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 ( aapt ) стало очень строгим в своей последней версии и теперь используется для всех версий Android. Полученная вами ошибка aapt генерируется, потому что она больше не позволяет спецификаторы непозиционного формата .

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

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

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

В этом случае строка не используется в качестве строки формата для Formatter поэтому вам не нужно избегать ваших% -символов. Итоговая строка: «% a +% a == 2% a».

Если вы опускаете атрибут formatted 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 и кода трудно сказать, что именно ваша проблема, но, надеюсь, это поможет вам понять механизмы немного лучше.

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

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

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

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

Вы можете увидеть это для деталей.

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

Чтобы показать это, попробуйте использовать этот формат \ %%, например

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

Показан как сжигание жира (от 50% до 60%) в устройстве

использование

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

получить

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

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

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

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

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

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

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

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

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

 You will need %.5G %s 

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

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

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

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

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

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

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

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

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

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

НЕ ДЕЛАЙТЕ:

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

ДЕЛАТЬ :

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

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

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

За официальную документацию Google используйте% 1 $ s и% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

Привет,% 1 $ s! У вас есть% 2 $ d новых сообщений.

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

например :

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

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

Предположим, вы хотите показать (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); 

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

 \%