2017-01-09 61 views
2

我遇到了在android格式字符串中有%n換行符的問題。是否有可能在具有參數的strings.xml格式字符串中有%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$1.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指南引用將不勝感激。

+0

@Distwo'\ n'有效,但我更喜歡在格式字符串中使用'%n',所以我更新了我的問題,詢問是否有任何方法可以使用'%n',如果不是做新行的最好方法是什麼?也許答案是不可能的,'\ n'是最好的解決方案。 –

+0

那怎麼樣:'%1 $ s%2 $ n%3 $ s,%4 $ s' – Distwo

+0

Nevermind ...不起作用。 – Distwo

回答

1

這可能是一個錯誤。

看看AAPT資源 - 特別是在hasSubstitutionErrors method。它計算字符串中參數的數量,以檢查它們是否應該是位置的。它確保跳過文字百分號(%%),但不會跳過平臺特定的換行符號(%n)。

我在issue tracker中提出了這個問題。

在這一點上,我沒有看到除了使用\n以外的解決方案。

相關問題