2017-12-30 30 views
0

単純な文字列では、プレースホルダ値を渡すことができるResources.getQuantityString(int, int, ...)を使用します。したがって、複数のリソースは文字列内で%dを使用でき、実際の数量を挿入できます。format引数でgetQuantityTextを使用する方法stringで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> 

そして、あなたはこのようにJavaでそれを使用する:

textView.setText(getResources().getQuantityString(R.plurals.myplural, 2, 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コードに別のステップを追加する必要があります。 (あなたは、Javaを変更しなかった場合は、 "2 < B>アイテム</B>" を参照してくださいね。)ここで更新されたコードです:

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

今、あなたは成功した "2つの項目" を参照してくださいだろうが。

+0

ありがとうございます!私がオンラインで見つけた最良の説明は、toHtmlとfromHtmlの両方を使用して提供されているので、項目文字列は通常のマークアップになる可能性があります。私はこのアイデアが気に入っています。なぜなら、1つの変換しか必要ないからです。 – user3175580

+0

Googleの独自の開発者向けドキュメントから、このソリューションがどのような価値を持っていますか。 「HTMLマークアップによるスタイル設定」https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStylingを参照してください。 –

関連する問題