我在首选项屏幕上编写了一个带有ListPreference的Android应用程序,允许用户从10%,20%,30%...... 100%中选择一个值。
当我尝试将ListPreference的摘要更改为所选值(OnPreferenceChangeListener.onPreferenceChange()
)时,用户更改了值(ListPreference.setsummary(<string>)
)后,我发现该应用在{{{{{}}时崩溃1}}结束于&#34;%&#34;但不是当它结束于&#34;百分比&#34;
有没有人见过这个?你知道为什么会这样吗?有没有一种解决方法可以让我使用&#34;%&#34;?
答案 0 :(得分:12)
在Android 4.0.4上遇到同样的问题。似乎是它的android bug。
我的解决方案是使用Unicode符号全宽百分号(U + FF05)而不是百分号。 ListPreference的示例数据:
<string-array name="widget_transparency_title">
<item>0\uff05 - не прозрачный</item>
<item>25\uff05 прозрачности</item>
<item>50\uff05 прозрачности</item>
<item>75\uff05 прозрачности</item>
<item>100\uff05 - прозрачный</item>
</string-array>
答案 1 :(得分:1)
我可以回答有关“你知道它为什么会发生吗?”的问题部分,但是@ Sash0k已经提供了明确的解决方法。
这是因为android ListPreference
类getSummary()
方法尝试返回格式化字符串,并认为'%'字符是某些格式的前身。
有关信息,引发的例外是java.util.UnknownFormatConversionException
。
另一种解决方法是使用“%%”,但如果您使用相同的字符串数组项来显示首选项列表(因为列表将显示双倍%!),则这并不令人满意。 p>