6

我有一个在 ICS 上崩溃的应用程序。到那时为止工作得很好(虽然我不确定我是否真的有一个蜂窝平台可以测试,我们所有的测试手机都是姜饼或更低,现在我有几部 ICS 手机可以玩)。

我的首选项页面中的以下代码(从 onResume 和 OnPreferenceChangeListener 调用)运行良好:

protected void setBatteryAlarmSummary(String newValue){
    Preference batteryAlarm = (Preference) findPreference( getString(R.string.battery_low_alarm) );
    StringBuilder summary = new StringBuilder();
    summary.append(getString(R.string.battery_alarm_summary_label));
    summary.append(" ");
    summary.append(newValue);
    summary.append("%");
    batteryAlarm.setSummary(summary);
}

这会将首选项摘要设置为“10% 的低电量警报”。现在,使用 ICS,它崩溃了。不是在执行 setSummary 时,也不是在页面显示时,而是当您滚动首选项时,甚至一点点,显然会触发渲染(该项目大约有 8 个左右的项目,所以它在列表中“低于折叠” )。修复 ICS 很容易,只需避开百分号:

summary.append("%%");

但是,姜饼上的代码显示“10%% 的低电量警报”

我可以编写它以根据版本进行更改,但这很愚蠢。他们真的打破了他们偏好渲染的向后兼容性,还是这只是三星的事情(不幸的是,这是我目前唯一的 ICS 测试平台)?

4

2 回答 2

0

您可以尝试使用百分号的 Unicode 等价物,例如:

summary.append("\u0025");

这应该有效。

于 2012-07-27T05:06:46.250 回答
0

通常,您在以下方式处理此问题strings.xml

<string name="battery_low_alarm_summary" formatted="false">Low Battery Alarm at 10%</string>

formatted="false"将使其适用于所有版本的 Android。

但是一旦你本地化了这个字符串,你真的想要一个占位符。我想你必须写:

<string name="battery_low_alarm_summary">Low Battery Alarm at %d%%</string>

我没有对此进行测试,但是,我强烈希望使用任何现代版本的 SDK 进行构建都能在这里做正确的事情,即使结果是在旧版本的 Android 上运行。

于 2012-07-27T07:34:45.020 回答