Ich habe eine Reihe von Zeichenfolgen, in denen das %
Symbol verwendet wird. Richtiges Format für die Verwendung des %
is %
. Wenn ich in diesem Array eine Zeichenfolge mit mehreren %
habe, wird mir dieser Fehler angezeigt.
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
Antworten:
Das Android Asset Packaging Tool (
aapt
) ist in seiner neuesten Version sehr streng geworden und wird jetzt für alle Android-Versionen verwendet. Der aapt-Fehler, den Sie erhalten, wird generiert, weil keine nicht positionellen Formatspezifizierer mehr zulässig sind .Hier sind einige Ideen, wie Sie das% -Symbol in Ihre Ressourcenzeichenfolgen aufnehmen können.
Wenn Sie keine Formatspezifizierer oder Ersetzungen in Ihrer Zeichenfolge benötigen, können Sie das
formatted
Attribut einfach verwenden und auf Folgendes festlegenfalse
:In diesem Fall wird die Zeichenfolge nicht als
Formatter
Formatzeichenfolge für verwendet, sodass Sie Ihre% -Symbole nicht maskieren müssen. Die resultierende Zeichenfolge lautet "% a +% a == 2% a".Wenn Sie das
formatted="false"
Attribut weglassen , wird die Zeichenfolge als Formatzeichenfolge verwendet und Sie müssen die% -Symbole maskieren. Dies geschieht korrekt mit double-%:Jetzt
aapt
haben Sie keine Fehler , aber je nachdem , wie Sie es verwenden, kann die resultierende Zeichenfolge sein „%% a + %% a == 2 %% a“ , wenn einFormatter
ohne Format aufgerufen Argumente :Ohne XML und Code ist es schwierig zu sagen, was genau Ihr Problem ist, aber hoffentlich hilft dies Ihnen, die Mechanismen ein wenig besser zu verstehen.
quelle
Um die App mit formatierten Zeichenfolgen aus Ressourcen zuzulassen, sollten Sie Ihre XML-Datei korrigieren. So zum Beispiel
sollte durch ersetzt werden
Sie können dies für Details sehen.
quelle
%1$s
,%2$s
usw.Sie können% mit %% für XML-Parser umgehen, dies wird jedoch im Gerät zweimal angezeigt.
Versuchen Sie folgendes Format, um es einmal anzuzeigen:
\%%
Beispielsweise
wird wie
Fat Burning (50% to 60%)
im Gerät angezeigtquelle
Verwenden
<string name="win_percentage">%d%% wins</string>
bekommen
80% wins
als formatierte Zeichenfolge.Ich verwende die
String.format()
Methode, um die Nummer anstelle von einzufügen%d
.quelle
In Ihrer Datei strings.xml können Sie ein beliebiges Unicode-Zeichen verwenden.
Die Unicode-Nummer für das Prozentzeichen lautet beispielsweise 0025:
Eine umfassende Liste der Unicode-Zeichen finden Sie hier
quelle
%
Zeichen zurückgegeben. Ich fürchte, das löst das Problem nicht.Um dem Prozentzeichen zu entkommen, benötigen Sie nur %%
zum Beispiel :
gibt "10%" zurück
quelle
10%
nicht zurück%10
. FIY: Wenn Sie verwendenString.format
, sollten Sie jedes Mal das Gebietsschema angeben. Sie können wirklich überrascht sein, wenn Sie das Gebietsschema nicht eingeben und das arabische Gebietsschema fürNicht gerade Ihr Problem, aber ein ähnliches.
Wenn Ihr Zeichenfolgeneintrag mehr als eine Formatierung enthält, sollten Sie "% s" nicht mehrmals verwenden.
NICHT:
MACHEN :
quelle
Sie können% in XML mit %% maskieren, aber Sie müssen den Text in Code und nicht in Layout-XML festlegen.
quelle
Dies könnte dazu führen, dass die IDE zu streng wird.
Die Idee ist vernünftig. Im Allgemeinen sollten Sie die Reihenfolge der Substitutionsvariablen angeben, damit Ihr Java-Code nicht geändert werden muss, wenn Sie Ressourcen für eine andere Sprache hinzufügen. Hierbei gibt es jedoch zwei Probleme:
Erstens eine Zeichenfolge wie:
Um verwendet zu werden, wie Sie benötigen 2.1200 mg haben die Reihenfolge in jeder Sprache die gleiche, da diese Menge an Masse immer in dieser Reihenfolge wissenschaftlich dargestellt wird.
Das zweite ist, dass Sie, wenn Sie die Reihenfolge der Variablen in die Sprache setzen, in der Ihre Standardressourcen angegeben sind (z. B. Englisch), nur die Positionen in den Ressourcenzeichenfolgen für Sprachen angeben müssen, die eine andere Reihenfolge als Ihre Standardsprache verwenden.
Die gute Nachricht ist, dass dies einfach zu beheben ist. Auch wenn die Positionen nicht angegeben werden müssen und die IDE zu streng ist, geben Sie sie trotzdem an. Verwenden Sie für das obige Beispiel:
quelle
Eine knifflige Methode: Verwenden Sie ein kleines Prozentzeichen wie unten
Prozentzeichen auf Wikipedia
quelle
Versuchen Sie dieses (rechts):
quelle
Verwenden Sie gemäß der offiziellen Google-Dokumentation% 1 $ s und% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Hallo,% 1 $ s! Sie haben% 2 $ d neue Nachrichten.
quelle
Angenommen, Sie möchten anzeigen (50% RABATT) und zur Laufzeit 50 eingeben. Hier ist der Code:
Verwenden Sie in der Java-Klasse diesen Code:
quelle
Versuchen Sie es mit einem Backslash davor, wie unten:
quelle