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%% でのバッテリー低下アラーム」が表示されます。

バージョンに基づいて変更するように書くことはできますが、それはばかげています。彼らは本当に設定レンダリングの下位互換性を壊したのでしょうか、それともこれは Samsung だけのものなのでしょうか (残念ながら、現在 ICS 用に私が持っている唯一のテスト プラットフォームです)。

4

2 に答える 2

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>

私はこれをテストしていませんが、結果が古いバージョンのAndroidで実行されている場合でも、SDKの最新バージョンを使用してビルドすることがここで正しいことを行うことを強く望んでいます。

于 2012-07-27T07:34:45.020 に答える
0

You can try the Unicode equivalent of the percent sign, like:

summary.append("\u0025");

this should work.

于 2012-07-27T05:06:46.250 に答える