我有一个在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);
}
这将pref摘要设置为“10%的低电量警报”。现在,有了ICS,它崩溃了。不是当它执行setSummary时,而不是当页面显示时,但是当你甚至稍微滚动首选项时,显然会触发渲染(这个项目大约是8个左右的项目,所以它在列表中“低于” )。修复ICS非常简单,只需忽略百分号:
summary.append("%%");
然而,姜饼上的代码显示“低电量警报10 %%”
我可以根据版本编写它来进行更改,但这只是愚蠢的。他们是否真的打破了他们的偏好渲染的向后兼容性,或者这只是一个三星的东西(不幸的是,这是我目前唯一的ICS测试平台)?
答案 0 :(得分:0)
您可以尝试使用等效百分号的Unicode,例如:
summary.append("\u0025");
这应该有效。
答案 1 :(得分: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上运行的。