2017-12-30 4 views
0

간단한 문자열의 경우 자리 표시 자 값을 전달할 수있는 Resources.getQuantityString(int, int, ...)을 사용합니다. 따라서 복수 리소스는 문자열에서 % d을 (를) 사용할 수 있으며 실제 수량을 삽입 할 수 있습니다.getQuantityText를 형식 인수와 함께 사용하면 quantity에 문자열을 사용할 수 있습니까?

글꼴 표식 <b> 등을 복수형으로 사용하고 싶습니다. 그래서 나는 Resources.getQuantityText(int, int)를보고있다. 불행히도 자리 표시 자 값을 전달할 수는 없습니다. 우리는 소스 코드에서 getQuantityString에서 자리 표시자를 사용하여 String.format을 사용한다는 것을 알 수 있습니다.

복수형에서 글꼴 서식을 사용하는 것이 좋습니다.

답변

0

먼저 "정상적인"사례 (작동하지 않는 사례)를 살펴 보겠습니다. 당신은 다음과 같이 몇 가지 복수의 자원을 가지고

<plurals name="myplural"> 
    <item quantity="one">only 1 <b>item</b></item> 
    <item quantity="other">%1$d <b>items</b></item> 
</plurals> 

그리고 당신은 이런 식으로 자바에서 사용 :

textView.setText(getResources().getQuantityString(R.plurals.myplural, 2, 2)); 

당신이 발견, 이것은 당신이 더 굵은 글자로 "이 항목"을 참조됩니다.

해결책은 리소스의 <b> 태그를 HTML 엔터티 대신 사용하는 것입니다. 예 :

<plurals name="myplural"> 
    <item quantity="one">only 1 &lt;b>item&lt;/b></item> 
    <item quantity="other">%1$d &lt;b>items&lt;/b></item> 
</plurals> 

이제 이러한 html 엔티티를 처리하기 위해 Java 코드에 다른 단계를 추가해야합니다. (당신이 자바를 변경하지 않은 경우, 당신은 "2 < B> 항목을 </b>을"볼 것.) 여기에 업데이트 된 코드 : 당신이 성공적으로 "2 개 항목"가 표시됩니다 이제

String withMarkup = getResources().getQuantityString(R.plurals.myplural, 2, 2); 
text.setText(Html.fromHtml(withMarkup)); 

.

+0

감사! 내가 찾은 가장 좋은 설명은 toHtml과 fromHtml을 모두 사용하여 제공되었으므로 항목 문자열은 정상적인 마크 업이 될 수 있습니다. 이 아이디어는 한 번만 변환하면되므로 더 좋아집니다. – user3175580

+0

가치가있는이 솔루션은 Google 자체 개발자 문서에서 채택되었습니다. 자세한 내용은 "HTML 마크 업으로 스타일 지정"https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling을 참조하십시오. –

관련 문제