2017-01-31 9 views
2

내가 안드로이드 개발자 가이드 라인 Quantity String (Plurals)에 따라 수량 문자열 (복수형)를 검색 할 자료에 getQuantityString 방법을 사용하려고Android 수량 문자열 (복수형)을 사용하는 방법은 무엇입니까?

내가 점점 오전 오류가 나는

다음과 같이 복수형을 설정할 때

Error:(604) Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute? 
Error:(604) Found tag </item> where </plurals> is expected 

입니다

<plurals name="productCount"> 
    <item quantity="one" formatted="true">%1$d of %2$d product</item> 
    <item quantity="other" formatted="true">%1$d of %2$d products</item> 
</plurals> 

아래로 읽으려고

한 가지 해결 방법은 문자열의 마지막 부분에 대해서만 복수를 사용하고 두 부분을 연결하도록 문자열을 위로 나눕니다. 그러나 가능한 경우 그렇게하지 않으려 고 노력하고 있습니다.

답변

13

해당 항목에 대해 "형식화 된"속성을 설정할 필요가 없습니다. 수량 문자열을 사용하는 경우에만 세 가지 가능성이 있습니다 :

  1. 리소스 문자열이 일반 텍스트 및 리소스 문자열이 하나의 매개 변수 (가능성이 가장 높은 수량)를 포함
  2. 매개 변수를 포함하지 않는; %d 또는 원하는 형식을 사용하십시오.
  3. 리소스 문자열에 여러 매개 변수가 포함되어 있습니다. 추가 Object... formatArgs 파라미터 만 ressource ID 및 수량, 다른 하나 모든 파라미터가 명시 일례 getQuantityString 방법으로서 %1$d

위해, 자신의 위치에 액세스 할 수있는, 두 과부하가있다.

케이스 1의 경우 getQuantityString(@PluralsRes int id, int quantity) 메서드를 사용할 수 있습니다.

다른 모든 경우에는, i. 이자형. 매개 변수가있는 경우 getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs) 과부하가 필요합니다. 참고 : 모두 매개 변수가 매개 변수 배열에 있어야합니다. 즉, 리소스 문자열에 수량이 표시되면 수량 변수는 두 번으로 전달됩니다.

이러한 자원은 그래서 경우

<resources> 
    <plurals name="test0"> 
     <item quantity="one">Test ok</item> 
     <item quantity="other">Tests ok</item> 
    </plurals> 
    <plurals name="test1"> 
     <item quantity="one">%d test ok</item> 
     <item quantity="other">%d tests ok</item> 
    </plurals> 
    <plurals name="test2"> 
     <item quantity="one">%2$s: %1$d test ok</item> 
     <item quantity="other">%2$s: %1$d tests ok</item> 
    </plurals> 
    <plurals name="test3"> 
     <item quantity="one">%3$s: %1$d test out of %2$d ok</item> 
     <item quantity="other">%3$s: %1$d tests out of %2$d ok</item> 
    </plurals> 
</resources> 

getQuantityString에 appropiate 호출은 다음과 같습니다

int success = 1; 
int total = 10; 
String group = "Group name"; 

getResources().getQuantityString(R.plurals.test0, success) 
// Test ok 
getResources().getQuantityString(R.plurals.test1, success, success) 
// 1 test ok 
getResources().getQuantityString(R.plurals.test2, success, success, group) 
// Group name: 1 test ok 
getResources().getQuantityString(R.plurals.test3, success, success, total, group) 
// Group name: 1 test out of 10 ok 

success = 5; 
getResources().getQuantityString(R.plurals.test0, success) 
// Tests ok 
getResources().getQuantityString(R.plurals.test1, success, success) 
// 5 tests ok 
getResources().getQuantityString(R.plurals.test2, success, success, group) 
// Group name: 5 tests ok 
getResources().getQuantityString(R.plurals.test3, success, success, total, group) 
// Group name: 5 tests out of 10 ok