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