Android XML 백분율 기호
제가 여러 줄의 끈을 가지고 있는데, 그 끈들은%
기호가 사용됩니다.사용하기에 적합한 형식%
가%
. 해당 배열에 여러 개의 문자열이 있을 때%
그것은 나에게 이 오류를 줍니다.
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 자산 패키징 툴(aapt
)는 최신 버전에서 매우 엄격해졌고 현재 모든 안드로이드 버전에 사용되고 있습니다.사용자가 받는 appt-error는 더 이상 위치가 아닌 형식 지정자를 허용하지 않기 때문에 생성됩니다.
다음은 %-심볼을 리소스 문자열에 포함하는 방법에 대한 몇 가지 아이디어입니다.
문자열에 형식 지정자나 대체 기능이 필요하지 않다면 간단히 사용할 수 있습니다.formatted
속성을 지정하고 설정합니다.false
:
<string formatted="false">%a + %a == 2%a</string>
이 경우 문자열이 의 형식 문자열로 사용되지 않으므로 %-기호를 벗어날 필요가 없습니다.결과 문자열은 "%a + %a == 2%a"입니다.
생략할 경우formatted="false"
문자열이 형식 문자열로 사용되므로 %-subject를 탈출해야 합니다.이 작업은 두 배%로 올바르게 수행됩니다.
<string>%%a + %%a == 2%%a</string>
지금이다aapt
오류는 없지만 사용 방법에 따라 형식 인수 없이 가 호출될 경우 결과 문자열은 "%%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
.
% 기호에서 벗어나려면 %%만 있으면 됩니다.
예를 들어 다음과 같습니다.
String.format("%1$d%%", 10)
"10%"를 반환합니다.
strings.xml 파일에서는 원하는 유니코드 기호를 사용할 수 있습니다.
예를 들어 퍼센트 기호의 유니코드 번호는 0025입니다.
<string name="percent_sign">%</string>
유니코드 기호의 포괄적인 목록은 여기에서 볼 수 있습니다.
정확히 당신의 문제가 아니라 비슷한 문제입니다.
문자열 항목에 두 개 이상의 형식이 있는 경우 "%s"를 여러 번 사용해서는 안 됩니다.
하지 않음:
<string name="entry">Planned time %s - %s (%s)</string>
DO:
<string name="entry">Planned time %1$s - %2$s (%3$s)</string>
%%의 %를(를) xml로 탈출할 수 있지만 레이아웃 xml이 아닌 코드로 텍스트를 설정해야 합니다.
까다로운 방법: 아래와 같이 작은 백분율 부호를 사용합니다.
<string name="zone_50">Fat Burning (50﹪ to 60﹪)</string>
이것은 IDE가 지나치게 엄격해지는 경우일 수 있습니다.
일반적으로 대체 변수의 순서를 지정하여 다른 언어에 대한 리소스를 추가할 경우 자바 코드를 변경할 필요가 없도록 해야 합니다.그러나 이와 관련하여 두 가지 문제가 있습니다.
먼저 다음과 같은 문자열이 있습니다.
You will need %.5G %s
2.1200 mg이 필요한 만큼의 양은 항상 과학적으로 그 순서에 따라 표현되는 것과 같은 순서를 언어로 가질 것입니다.
두 번째는 기본 리소스가 지정된 언어(예: 영어)에 변수의 순서를 지정하면 기본 언어와 다른 순서를 사용할 수 있는 언어에 대한 리소스 문자열의 위치만 지정하면 됩니다.
좋은 소식은 이것이 고치기 쉽다는 것입니다.입장을 명시할 필요도 없고, IDE가 지나치게 엄격해도 어쨌든 명시만 하면 됩니다.위의 예에서는 다음을 사용합니다.
%1$이(가) 필요합니다.5G %2$s
이것(오른쪽)을 사용해 보십시오.
<string name="content" formatted="false">Great application %s ☞ %s ☞ %s \\n\\nGo to download this application %s</string>
Google 공식 문서에 따라 %1$s 및 %2$s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling 을 사용합니다.
안녕하세요 %1$s!%2$d개의 새 메시지가 있습니다.
저는 좀 다른 사건이 있었습니다.현지화 웹사이트에서 자체 XML 파일을 생성하고 있었는데 장치에 두 배 %% 사인을 표시하지 않으면 보풀 체크가 작동하지 않습니다.String을 사용하지 않고 percent sign을 사용하여 lint 오류를 받았습니다.체재를 갖추다
않는 % 하지 를 % 으로 으로 를 로 교체했습니다.\u0025
백슬래시를 아래와 같이 앞에 사용해 보십시오.
\%
언급URL : https://stackoverflow.com/questions/4414389/android-xml-percent-symbol
'programing' 카테고리의 다른 글
성공과 .done의 방법 $.done의 차이점은 무엇입니까? (0) | 2023.09.18 |
---|---|
Golang SQL 쿼리 변수 치환 (0) | 2023.09.18 |
Angular ui-router로 기본 상태를 설정하는 방법 (0) | 2023.09.18 |
ReferenceError: 설명이 NodeJs로 정의되지 않았습니다. (0) | 2023.09.13 |
Git: 상태, diff 등에서 '수정된 내용'/dirty 서브모듈 항목의 나열을 억제할 수 있습니까? (0) | 2023.09.13 |