是否可以在带参数的 strings.xml 格式字符串中包含 %n 换行符?

Is it possible to have %n newlines in strings.xml format strings with parameters?

我在 android 格式字符串中使用 %n 换行符时遇到问题。

这是预期的输出:

Address Line 1
City, State

所以我创建了一个这样的格式字符串:

%s%n%s, %s

但是我得到了这个错误:

Error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?

我的字符串是格式化的,所以第二个解决方案似乎没有意义,所以我将 %s 的位置设为:

%1$s%n%2$s, %3$s

但是我还是遇到了同样的错误。

所以我也尝试使 %n 位置化,看看是否能解决问题:

%1$s%4$n%2$s, %3$s

然后 java.util.Formatter:

我得到一个运行时错误 (!!!)
E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.app, PID: 27843
        java.util.IllegalFormatFlagsException: %n doesn't take an argument
            at java.util.Formatter$FormatToken.checkFlags(Formatter.java:1373)
            at java.util.Formatter.transform(Formatter.java:1442)
            at java.util.Formatter.doFormat(Formatter.java:1081)
            at java.util.Formatter.format(Formatter.java:1042)
            at java.util.Formatter.format(Formatter.java:1011)
            at java.lang.String.format(String.java:1554)
            at android.content.res.Resources.getString(Resources.java:431)
            ... // omitting project specific files
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
            at android.support.v4.app.FragmentManagerImpl.run(FragmentManager.java:536)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:152)
            at android.app.ActivityThread.main(ActivityThread.java:5497)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

如何在带有其他格式参数的 strings.xml 格式字符串中包含 %n 换行符?可能吗?如果不是,显示换行符的最佳方式是什么?

Android 文档或 api 指南参考将不胜感激。

这可能是一个错误。

查看 AAPT 来源——特别是 hasSubstitutionErrors method。它计算字符串中参数的数量以检查它们是否应该是位置的。它确保跳过文字百分号 (%%) 但不会跳过特定于平台的换行符 (%n).

我已经在 issue tracker.

中提出了这个问题

此时除了使用 \n.

我没有看到其他解决方案

编辑:问题已在跟踪器中标记为已修复。