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 formatted
atrybutu 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, Formatter
wię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 aapt
daje ż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 Formatter
jest 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.