AndroidManifest.xml の <activity> タグに
android:configChanges
を設定すると、configuration が変わったときに、
public void onConfigurationChanged(Configuration newConfig)
が呼ばれます。(Android 画面の縦横切り替え時に元の画面を保存)
例えば、
android:configChanges="orientation"
とすると、画面が回転したときに onConfigurationChanged
が呼ばれます。
getResources().getConfiguration()
で取得しておいた Configuration と 引数の newConfig の diff
をとることで、変化した configuration parameter の bit field
が取得できます。
しかし、この configChanges 設定をすると、Activity が再生成
されなくなるため(= onDestroy(), onCreate() は呼ばれなくなるため)、
画面のレイアウトが変わらない場合にはいいのですが、
縦横で画面のレイアウトを変えたい場合には使えません。
この設定をしない (= onConfigurationChanged が呼ばれない)
場合は、
onDestroy() の中で、getChangingConfigurations()
を呼ぶことで、どの Configuration の変化によって
Activity が終了しようとしているかを検知することができます。
このメソッドの戻り値が変化した configuration parameter の
bit field になります。この bit field は ActivityInfo class
の Constants で定義されています。
ちなみに、orientation change の場合の戻り値は 128 =(0x00000080) です。
bit mask | value |
---|---|
CONFIG_MCC | 1 (0x00000001) |
CONFIG_MNC | 2 (0x00000002) |
CONFIG_LOCALE | 4 (0x00000004) |
CONFIG_TOUCHSCREEN | 8 (0x00000008) |
CONFIG_KEYBOARD | 16 (0x00000010) |
CONFIG_KEYBOARD_HIDDEN | 32 (0x00000020) |
CONFIG_NAVIGATION | 64 (0x00000040) |
CONFIG_ORIENTATION | 128 (0x00000080) |
CONFIG_SCREEN_LAYOUT | 256 (0x00000100) |
CONFIG_UI_MODE | 512 (0x00000200) |
CONFIG_FONT_SCALE | 1073741824 (0x40000000) |
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy()");
Log.d(TAG, "isFinishing : " + isFinishing());
int change = getChangingConfigurations();
Log.d(TAG, "getChangingConfigurations() :" + change + " (" + String.format("0x%08x", change) + ")");
}
0 件のコメント:
コメントを投稿