%
シンボルが使用されている文字列の配列があります。 %
を使用するための適切な形式は%
です。その配列に複数の%
を持つ文字列がある場合、このエラーが発生します。
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 Asset Packaging Tool(aapt
)は 最新リリースでは非常に厳しい になり、allAndroidバージョン。 非定位置書式指定子 が許可されなくなったため、取得しているaaptエラーが生成されます。
以下に、リソース文字列に%記号を含める方法をいくつか示します。
文字列に書式指定子や置換が必要ない場合は、formatted
属性を使用して、false
に設定するだけです。
<string formatted="false">%a + %a == 2%a</string>
この場合、文字列は Formatter
のフォーマット文字列として使用されないため、%記号をエスケープする必要はありません。結果の文字列は「%a +%a == 2%a」です。
formatted="false"
属性を省略すると、文字列はフォーマット文字列として使用され、%記号をエスケープする必要があります。これは、double-%で正しく行われます。
<string>%%a + %%a == 2%%a</string>
これでaapt
はエラーを表示しませんが、使用方法によっては、フォーマットなしで Formatter
が呼び出された場合、結果の文字列は「%% 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>
詳細については this をご覧ください。
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
。
%d
の代わりにString.format()
メソッドを使用して番号を挿入しています。
Strings.xmlファイルでは、必要なUnicode記号を使用できます。
たとえば、パーセント記号のUnicode番号は0025です。
<string name="percent_sign">%</string>
Unicode記号の包括的なリストを見ることができます ここ
パーセント記号をエスケープするには、%%が必要です
例えば :
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>
これは、IDEが厳しすぎる場合です。
考え方は適切です。一般に、置換変数の順序を指定して、別の言語のリソースを追加する場合にJavaコードを変更する必要がないようにする必要があります。ただし、これには2つの問題があります。
まず、次のような文字列:
You will need %.5G %s
として使用するには、2.1200 mgが必要です質量は科学的に常にその順序で表されるため、どの言語でも同じ順序になります。
2番目は、デフォルトのリソースが指定されている言語(英語など)で変数の順序を指定する場合、デフォルトの言語とは異なる順序を使用する言語のリソース文字列内の位置を指定するだけです。
幸いなことに、これは簡単に修正できます。位置を指定する必要はなく、IDEが過度に厳密であっても、とにかく指定するだけです。上記の例の場合:
%1 $ .5G%2 $ sが必要です
%%を使用してxmlの%をエスケープできますが、レイアウトxmlではなくコードでテキストを設定する必要があります。
これを試してください(右):
<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﹪ to 60﹪)</string>
Google公式ドキュメントごとに、%1 $ sおよび%2 $ sを使用してください http://developer.Android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
こんにちは、%1 $ s! %2 $ d個の新しいメッセージがあります。