%
기호가 사용되는 문자열 배열이 있습니다 . %
is 를 사용하기에 적합한 형식 입니다 %
. 해당 배열에 여러 문자열 %
이 있으면이 오류가 발생합니다.
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
답변
Android Asset Packaging Tool ( aapt
)은 최신 릴리스에서 매우 엄격 해졌 으며 이제 모든 Android 버전에 사용 됩니다. 더 이상 위치가 아닌 형식 지정자를 허용 하지 않기 때문에 발생하는 aapt-error가 생성 됩니다 .
다음은 리소스 문자열에 % 기호를 포함시키는 방법에 대한 몇 가지 아이디어입니다.
문자열에 형식 지정자 또는 대체가 필요하지 않은 경우 단순히 formatted
속성 을 사용하여 다음 과 같이 설정할 수 있습니다 false
.
<string formatted="false">%a + %a == 2%a</string>
이 경우 문자열은 형식 문자열로 사용 Formatter
되지 않으므로 % 기호를 이스케이프하지 않아도됩니다. 결과 문자열은 “% a + % a == 2 % a”입니다.
formatted="false"
속성 을 생략하면 문자열이 형식 문자열로 사용되므로 % 기호를 이스케이프해야합니다. 이것은 이중 %로 올바르게 수행됩니다.
<string>%%a + %%a == 2%%a</string>
이제 aapt
오류는 없지만 사용 방법에 따라 Formatter
형식 인수 없이 a 를 호출 하면 결과 문자열은 “%% a + %% a == 2 %% a”일 수 있습니다 .
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과 코드가 없으면 정확히 문제가 무엇인지 말하기 어렵지만 바라는 것은 메커니즘을 조금 더 잘 이해하는 데 도움이되기를 바랍니다.
답변
앱에서 리소스의 형식화 된 문자열을 사용하도록하려면 xml을 수정해야합니다. 예를 들어
<string name="app_name">Your App name, ver.%d</string>
로 교체해야합니다
<string name="app_name">Your App name, ver.%1$d</string>
자세한 내용 은 이것을 볼 수 있습니다 .
답변
XML 파서에 %%를 사용하여 %를 이스케이프 할 수 있지만 장치에 두 번 표시됩니다.
한 번 표시하려면 다음 형식을 시도하십시오. \%%
예를 들어
<string name="zone_50">Fat Burning (50\%% to 60\%%)</string>
Fat Burning (50% to 60%)
장치 와 같이 표시됩니다
답변
사용하다
<string name="win_percentage">%d%% wins</string>
얻을
80% wins
형식화 된 문자열로.
String.format()
방법을 사용하여 대신 숫자를 삽입했습니다 %d
.
답변
strings.xml 파일에서 원하는 유니 코드 부호를 사용할 수 있습니다.
예를 들어 퍼센트 부호의 유니 코드 숫자는 0025입니다.
<string name="percent_sign">%</string>
여기 에서 유니 코드 기호의 전체 목록을 볼 수 있습니다
답변
백분율 기호를 벗어나려면 %% 만 있으면됩니다.
예를 들면 다음과 같습니다.
String.format("%1$d%%", 10)
“10 %”를 반환
답변
정확히 당신의 문제는 아니지만 비슷한 문제입니다.
문자열 항목에 둘 이상의 서식이있는 경우 “% s”를 여러 번 사용해서는 안됩니다.
하지 말아야 할 것 :
<string name="entry">Planned time %s - %s (%s)</string>
하다 :
<string name="entry">Planned time %1$s - %2$s (%3$s)</string>