Android Asset Packaging Tool ( aapt) stał się bardzo rygorystyczny w najnowszej wersji i jest teraz używany we wszystkich wersjach Androida. Generowany błąd aapt jest generowany, ponieważ nie pozwala już na specyfikatory formatu pozycyjnego .
Oto kilka pomysłów, jak włączyć% -symbol do ciągów zasobów.
Jeśli nie potrzebujesz żadnych specyfikatorów formatu ani podstawień w swoim ciągu, możesz po prostu skorzystać z formattedatrybutu i ustawić go na false:
<string formatted="false">%a + %a == 2%a</string>
W takim przypadku ciąg nie jest używany jako ciąg formatujący, Formatterwięc nie musisz uciekać od% -symbols. Wynikowy ciąg to „% a +% a == 2% a”.
Jeśli pominiesz formatted="false"atrybut, ciąg zostanie użyty jako ciąg formatujący i musisz uciec od symboli% -symbol. Robi się to poprawnie z podwójnym%:
<string>%%a + %%a == 2%%a</string>
Teraz nie aaptdaje żadnych błędów, ale w zależności od tego, jak go używasz, wynikowy ciąg może być „%% a + %% a == 2 %% a”, jeśli a Formatterjest wywoływany bez żadnych argumentów formatu :
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"
Bez kodu XML i kodu trudno jest powiedzieć, na czym dokładnie polega problem, ale mam nadzieję, że pomoże to nieco lepiej zrozumieć mechanizmy.