ListPreference.setSummary将采用" 10%"但崩溃了" 10%"

时间:2014-05-21 22:24:20

标签: android listpreference

我在首选项屏幕上编写了一个带有ListPreference的Android应用程序,允许用户从10%,20%,30%...... 100%中选择一个值。

当我尝试将ListPreference的摘要更改为所选值(OnPreferenceChangeListener.onPreferenceChange())时,用户更改了值(ListPreference.setsummary(<string>))后,我发现该应用在{{{{{}}时崩溃1}}结束于&#34;%&#34;但不是当它结束于&#34;百分比&#34;

有没有人见过这个?你知道为什么会这样吗?有没有一种解决方法可以让我使用&#34;%&#34;?

2 个答案:

答案 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 ListPreferencegetSummary()方法尝试返回格式化字符串,并认为'%'字符是某些格式的前身。

有关信息,引发的例外是java.util.UnknownFormatConversionException

另一种解决方法是使用“%%”,但如果您使用相同的字符串数组项来显示首选项列表(因为列表将显示双倍%!),则这并不令人满意。 p>