Android Asset Packaging Tool (aapt
) стал очень строгим в своем последнем выпуске и теперь используется для всех версий Android.Получаемая вами aapt-ошибка генерируется потому, что она больше не допускает непозиционных спецификаторов формата .
Вот несколько идей о том, как включить% -symbol в строки ресурсов.
Если вам не нужны никакие спецификаторы формата или подстановки в вашей строке, вы можете просто использовать атрибут formatted
и установить его на false
:
<string formatted="false">%a + %a == 2%a</string>
Inв этом случае строка не используется в качестве строки формата для Formatter
, поэтому вам не нужно экранировать ваши% -символы.В результате получается строка «% a +% a == 2% a».
Если вы пропустите атрибут formatted="false"
, строка будет использоваться в качестве строки формата, и вы должны экранировать% -symbols.Это правильно сделано с двойным -%:
<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 и кода трудно сказать, что именно вашПроблема в том, что, надеюсь, это поможет вам лучше понять механизмы.