Інструмент упаковки Android Asset ( aapt
) став дуже суворим в останньому випуску і зараз використовується для всіх версій Android. Помилка aapt, яку ви отримуєте, генерується, оскільки вона більше не дозволяє специфікатори формату не позиції .
Ось кілька ідей, як можна включити% -символ до рядків ресурсів.
Якщо вам не потрібні специфікатори формату або підстановки у рядку, ви можете просто скористатися formatted
атрибутом і встановити його на false
:
<string formatted="false">%a + %a == 2%a</string>
У цьому випадку рядок не використовується як рядок формату для Formatter
тому вам не доведеться уникати своїх% -символів. Отриманий рядок "% a +% a == 2% a".
Якщо ви опустите formatted="false"
атрибут, рядок використовується як рядок формату, і вам доведеться уникати символів% -symbols. Це правильно зроблено з подвійним%:
<string>%%a + %%a == 2%%a</string>
Тепер не aapt
дає помилок, але залежно від того, яким чином ви його використовуєте, результуюча рядок може бути "%% a + %% a == 2 %% a", якщо виклик 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 та коду важко сказати, у чому саме полягає ваша проблема, але, сподіваємось, це допоможе вам зрозуміти механізми трохи краще.