Android XML procent Symbol
Mam tablicę łańcuchów, w których używany jest symbol %
. Prawidłowym formatem użycia %
jest %
. Gdy mam łańcuch w tablicy z wielokrotnością %
, pojawia się ten błąd.
Multiple annotations found at this
line:
- error: Multiple substitutions specified in non-positional format;
did you mean to add the formatted="false" attribute?
- error: Found tag </item> where </string-array> is expected
14 answers
Narzędzie Android Asset Packaging (aapt
) stało się bardzo rygorystyczne w swoim najnowszym wydaniu i jest teraz używane dla wszystkich wersji Androida. Błąd aapt, który otrzymujesz, jest generowany, ponieważ nie pozwala już nie-pozycyjnych specyfikacji formatu.
Oto kilka pomysłów, w jaki sposób można włączyć symbol %do ciągów zasobów.
Jeśli nie potrzebujesz żadnych specyfikacji formatu lub podstawień w łańcuchu, możesz po prostu użyć formatted
atrybut i ustaw go na false
:
<string formatted="false">%a + %a == 2%a</string>
W tym przypadku łańcuch nie jest używany jako ciąg formatujący dla Formatter
więc nie musisz uciekać od swoich % - symboli. Wynikowy ciąg znaków to "%a + %a = = 2% a".
Jeśli pominiesz atrybut formatted="false"
, łańcuch jest używany jako łańcuch formatujący i musisz uciec od symboli%. Jest to poprawnie zrobione z double -%:
<string>%%a + %%a == 2%%a</string>
Teraz aapt
nie 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 " if a Formatter
jest wywoływane bez argumentów w formacie :
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 żadnego XML i kodu trudno jest powiedzieć, co dokładnie jest Twój problem, ale mam nadzieję, że to pomoże Ci zrozumieć mechanizmy trochę lepiej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-11 15:06:44
Aby zezwolić aplikacji na używanie sformatowanych ciągów z zasobów, należy poprawić swój xml. Na przykład
<string name="app_name">Your App name, ver.%d</string>
Należy zastąpić
<string name="app_name">Your App name, ver.%1$d</string>
Możesz zobaczyć to Po szczegóły.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-25 06:44:23
Możesz uciec % używając % % dla parsera XML, ale jest to pokazane dwa razy w device.
Aby wyświetlić go raz, spróbuj wykonać następujący format: \%%
Na Przykład
<string name="zone_50">Fat Burning (50\%% to 60\%%)</string>
Jest pokazywany jako
Fat Burning (50% to 60%)
w urządzeniu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-20 13:52:24
Użyj
<string name="win_percentage">%d%% wins</string>
Aby uzyskać
80% wins
jako sformatowany ciąg znaków.
Używam metody String.format()
, aby wstawić numer zamiast %d
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-31 16:22:56
W Twoich strunach.plik xml możesz użyć dowolnego znaku Unicode.
Na przykład, liczba Unicode dla znaku procentowego to 0025:
<string name="percent_sign">%</string>
Możesz zobaczyć obszerną listę znaków Unicode tutaj
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-29 07:24:58
Aby uciec od symbolu procent, wystarczy %%
Na przykład:
String.format("%1$d%%", 10)
Zwraca "10%"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-20 16:41:59
Nie do końca twój problem, ale podobny.
Jeśli masz więcej niż jedno formatowanie w swoim wpisie, nie powinieneś używać "%s" wiele razy.
NIE:
<string name="entry">Planned time %s - %s (%s)</string>
DO:
<string name="entry">Planned time %1$s - %2$s (%3$s)</string>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 08:39:18
Trudna metoda: użycie małego znaku procentowego jak poniżej
<string name="zone_50">Fat Burning (50﹪ to 60﹪)</string>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-29 07:40:53
Możesz uciec % w xml za pomocą%%, ale musisz ustawić tekst w kodzie, a nie w layout xml.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-15 08:54:36
Może to być przypadek, że IDE staje się zbyt surowe.
Pomysł jest dobry, ogólnie należy określić kolejność zmiennych zastępczych, aby w przypadku dodania zasobów do innego języka kod Javy nie musiał być zmieniany. Istnieją jednak dwa problemy z tym:
Po pierwsze, łańcuch taki jak:
You will need %.5G %s
Do użycia jako będziesz potrzebował 2,1200 mg będzie miał taką samą kolejność w każdym języku, ponieważ ta ilość masy jest zawsze reprezentowana w tym zamów naukowo.
Po drugie, jeśli umieścisz kolejność zmiennych w jakim kiedykolwiek języku domyślne zasoby są określone w (np. angielski), to musisz tylko określić pozycje w ciągach zasobów dla języków, w których używasz innej kolejności niż domyślny język.
Dobrą wiadomością jest to, że jest to proste do naprawienia. Nawet jeśli nie ma potrzeby określania pozycji, a IDE jest zbyt rygorystyczne, po prostu je określ. Dla przykładu powyżej użycie:Będziesz potrzebował %1$.5G %2$S
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 22:14:24
Spróbuj tego (po prawej):
<string name="content" formatted="false">Great application %s ☞ %s ☞ %s \\n\\nGo to download this application %s</string>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-04 18:10:09
Według oficjalnej dokumentacji google, użyj %1$s i %2$s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling{[2]
Witaj, %1$s! Masz %2$D Nowe wiadomości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-11 00:58:21
Załóżmy, że chcesz pokazać (50% taniej) i wprowadzić 50 w czasie wykonywania. Oto kod:
<string name="format_discount"> (
<xliff:g id="discount">%1$s</xliff:g>
<xliff:g id="percentage_sign">%2$s</xliff:g>
OFF)</string>
W klasie java użyj tego kodu:
String formattedString=String.format(context.getString(R.string.format_discount),discountString,"%");
holder1.mTextViewDiscount.setText(formattedString);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-07 11:21:16
Spróbuj użyć odwrotnego ukośnika przed nim, jak poniżej:
\%
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-11 00:19:02