質問

文字列の配列があります。 % という記号が使われています。を使用するための適切な形式 %%. 。その配列に複数の文字列がある場合 % このエラーが発生します。

 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) になった 最新リリースでは非常に厳格です 現在使用されています すべて Androidバージョン。あなたが得ているaapt-errorは、もはや許せないので生成されます 非陽性形式の仕様.

リソース文字列に%シンボルを含める方法をいくつか紹介します。

文字列にフォーマットの仕様や置換が必要ない場合は、単に formatted 属性と設定 false:

<string formatted="false">%a + %a == 2%a</string>

この場合、文字列はのフォーマット文字列として使用されません Formatter したがって、%シンボルを逃れる必要はありません。結果の文字列は「%a +%a == 2%a」です。

省略した場合 formatted="false" 属性、文字列はフォーマット文字列として使用され、%シンボルから逃げる必要があります。これは、2倍の%で正しく行われます。

<string>%%a + %%a == 2%%a</string>

aapt エラーはありませんが、使用方法によっては、結果の文字列は「%% a + %% a == 2 %% a」になります。 Formatter フォーマットなしで呼び出されます 議論:

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パーサーに%%を使用して%を逃れることができますが、デバイスで2回表示されます。

一度表示するには、次の形式を試してください。 \%%

例えば

<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ファイルでは、任意のUnicodeサインを使用できます。

たとえば、パーセントサインのUnicode番号は0025です。

<string name="percent_sign">&#x0025;</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>

%%でXMLの%を逃れることができますが、レイアウトXMLではなく、テキストをコードで設定する必要があります。

これは、IDEがあまりにも厳格になるケースである可能性があります。

アイデアは健全です。一般に、代替変数の順序を指定して、別の言語にリソースを追加すると、Javaコードを変更する必要がないようにする必要があります。ただし、これには2つの問題があります。

まず、次のような文字列を次のようにします。

You will need %.5G %s

として使用される 2.1200 mgが必要です その量の質量は常にその順序で科学的に表されるため、任意の言語で順序を同じようにします。

2つ目は、デフォルトのリソースが指定されている言語(英語など)に変数の順序を置く場合、言語のリソース文字列の位置を指定するだけで、デフォルト言語に別の順序を使用する必要があることです。

良いニュースは、これが簡単に修正できることです。位置を指定する必要はありませんが、IDEは過度に厳格ですが、とにかく指定するだけです。上記の例では、使用してください。

%1 $ .5g%2 $ sが必要です

これを試してみてください(右):

<string name="content" formatted="false">Great application %s  ☞  %s  ☞  %s \\n\\nGo to download this application %s</string>

トリッキーな方法:以下のように小さなパーセントサインを使用する

 <string name="zone_50">Fat Burning (50&#65130; to 60&#65130;)</string> 

ウィキペディアのパーセントサイン

Googleの公式ドキュメントごとに、%1 $ sと%2 $ sを使用してください http://developer.android.com/guide/topics/resources/string-resource.html#formattingandstyling

こんにちは、%1 $ s! %2 $ d新しいメッセージがあります。

(50%オフ)を表示し、実行時に50を入力するとします。これがコードです:

<string name="format_discount"> (
<xliff:g id="discount">%1$s</xliff:g>
<xliff:g id="percentage_sign">%2$s</xliff:g>
 OFF)</string>

Javaクラスでは、このコードを使用してください。

String formattedString=String.format(context.getString(R.string.format_discount),discountString,"%");
holder1.mTextViewDiscount.setText(formattedString);

以下のように、その前でバックスラッシュを使用してみてください。

\%
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top