在ICS首选项中转义% - 我是否真的必须编写特定于版本的字符串处理?

gbr*_*ant 6 string android escaping preferences

我有一个在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);
}
Run Code Online (Sandbox Code Playgroud)

这会将pref摘要设置为"10%的低电量警报".现在,有了ICS,它崩溃了.不是当它执行setSummary时,而不是当页面显示时,但是当你甚至稍微滚动首选项时,显然会触发渲染(这个项目大约有8个左右的项目,所以它在列表中"低于" ).修复ICS很简单,只需要忽略百分号:

summary.append("%%");
Run Code Online (Sandbox Code Playgroud)

然而,姜饼上的代码显示"低电池警报10 %%"

我可以根据版本编写它来改变,但那只是愚蠢的.他们是否真的打破了他们的首选项渲染的向后兼容性,或者这只是一个三星的东西(不幸的是,它是我现在唯一的ICS测试平台)?

Chu*_*ham 0

您可以尝试百分号的 Unicode 等效形式,例如:

summary.append("\u0025");

这应该有效。