Android 3.0 (API11) 以降に存在する微妙な仕様変更というか不具合

ここ数日 Ice Cream Sandwich 機でいくつか微妙な仕様変更というか不具合を見つけて、よくよく調べたところ Honeycomb あたりから入ってるっぽいのでメモ。ちなみに Android 3.1 の実機しかなくてかつエミュレータで調べるの面倒だったので本当に Android 3.0 からなのか 3.1 からなのかはわかりませんすみません。時間がとれたら調べます。

NumberPickerのテキストフィールドの名前が変わってる

Android 3.0 で普通に使用できるようになった NumberPicker だけど、Android 2.3 までは非公開だったからリフレクションでうまいこと使ったりしてる人も多いはず。その人たちは、Android 3.0 あたりからテキストフィールド名だけ変わっているので注意。

回避するとしたらこんな感じ。

[java highlight=”6,9″]
{
// ICSではフィールド名変わってた
String fieldName;
if (sdkVersion < Build.VERSION_CODES.HONEYCOMB) {
// 3.0まで
fieldName = "mText";
} else {
// 3.0以降
fieldName = "mInputText";
}
final Field field = c.getDeclaredField(fieldName);
if (!field.isAccessible()) {
field.setAccessible(true);
}
final EditText internalText = (EditText) field.get(obj);
mText.setBackgroundDrawable(internalText.getBackground());
mText.setTextColor(internalText.getTextColors());
}
[/java]

TimePickerで24時間表示するときはsetIs24HourViewを先に呼び出さないとおかしくなる

↓これだとOK(普通こうすると思うけど)
[java highlight=”2″]
mTimePicker = (TimePicker) view.findViewById(R.id.alarm_time_picker);
mTimePicker.setIs24HourView(true);
mTimePicker.setCurrentHour(12);
mTimePicker.setCurrentMinute(30);
[/java]

↓これだと設定済みの値を変更するときに変な動きする。Android 2.3 までは普通に動いてくれる
[java highlight=”4″]
mTimePicker = (TimePicker) view.findViewById(R.id.alarm_time_picker);
mTimePicker.setCurrentHour(12);
mTimePicker.setCurrentMinute(30);
mTimePicker.setIs24HourView(true);
[/java]

Share on Facebook0Share on Google+0Tweet about this on TwitterBuffer this pageEmail this to someone