最終更新:2016-06-20 (月) 15:00:33 (2866d)
Android/レイヤー
Androidの画面(View)は複数のレイヤーで構成されており、これらのレイヤーは情報の重要度・優先度によって使い分けられている
type
WindowManager.LayoutParamsのtypeでレイヤーを指定
処理
- AOSP/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.javaのwindowTypeToLayerLwでwindowTypeからLayerの値に変換
定義
- AOSP/frameworks/base/core/java/android/view/WindowManager.java
- AOSP/frameworks/base/services/input/InputWindow.h - 一部だけ
バージョン別
2.xの場合
- 上
- WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY - フォーカスできない
- ===ロック画面===
- WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
- WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
- WindowManager.LayoutParams.TYPE_PRIORITY_PHONE? - フォーカスできない
- ===ステータスバー===
- WindowManager.LayoutParams.TYPE_TOAST?
- WindowManager.LayoutParams.TYPE_PHONE?
- 下
4.0の場合
- 上
- WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
- WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY - フォーカスできない
- ===ロック画面===
- ===ステータスバー===
- WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
- WindowManager.LayoutParams.TYPE_PRIORITY_PHONE? - フォーカスできない
- WindowManager.LayoutParams.TYPE_TOAST?
- WindowManager.LayoutParams.TYPE_PHONE?
- 下
Android 4.1
メモ
- タッチイベントが拾えるのはWindowManager.LayoutParams.TYPE_SYSTEM_ALERTのみ
パーミッション
- android.permission.SYSTEM_ALERT_WINDOWが必要
- WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
- WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
- WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
- WindowManager.LayoutParams.TYPE_PRIORITY_PHONE?
- WindowManager.LayoutParams.TYPE_PHONE?
WindowManager.LayoutParams
システムウィンドウ
- 下
定数名 値 ドキュメント WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW? 2000 Start of system-specific window types. ○ WindowManager.LayoutParams.TYPE_STATUS_BAR? FIRST_SYSTEM_WINDOW the status bar. ○ WindowManager.LayoutParams.TYPE_SEARCH_BAR? FIRST_SYSTEM_WINDOW+1 the search bar. ○ WindowManager.LayoutParams.TYPE_PHONE? FIRST_SYSTEM_WINDOW+2 phone. These are non-application windows providing user interaction with the phone (in particular incoming calls). These windows are normally placedabove all applications, but behind the status bar. ○,SYSTEM_ALERT_WINDOWの権限が必要 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT FIRST_SYSTEM_WINDOW+3 system window, such as low power alert. These windows are always on top of application windows. ○,SYSTEM_ALERT_WINDOWの権限が必要 WindowManager.LayoutParams.TYPE_KEYGUARD? FIRST_SYSTEM_WINDOW+4 keyguard window. ○ WindowManager.LayoutParams.TYPE_TOAST? FIRST_SYSTEM_WINDOW+5 transient notifications. ○ WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY FIRST_SYSTEM_WINDOW+6 system overlay windows, which need to be displayed on top of everything else. These windows must not take input focus, or they will interfere with the keyguard. ○,SYSTEM_ALERT_WINDOWの権限が必要 WindowManager.LayoutParams.TYPE_PRIORITY_PHONE? FIRST_SYSTEM_WINDOW+7 priority phone UI, which needs to be displayed even if the keyguard is active. These windows must not take input focus, or they will interfere with the keyguard. ○,SYSTEM_ALERT_WINDOWの権限が必要 WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG? FIRST_SYSTEM_WINDOW+8 panel that slides out from the status bar ○ WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG? FIRST_SYSTEM_WINDOW+9 dialogs that the keyguard shows ○ WindowManager.LayoutParams.TYPE_SYSTEM_ERROR FIRST_SYSTEM_WINDOW+10 internal system error windows, appear on top of everything they can. ○,SYSTEM_ALERT_WINDOWの権限が必要 WindowManager.LayoutParams.TYPE_INPUT_METHOD? FIRST_SYSTEM_WINDOW+11 ○ WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG? FIRST_SYSTEM_WINDOW+12 ○ WindowManager.LayoutParams.TYPE_WALLPAPER? FIRST_SYSTEM_WINDOW+13 wallpaper window, placed behind any window that wants to sit on top of the wallpaper. ○ WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL? FIRST_SYSTEM_WINDOW+14 ○ WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY? FIRST_SYSTEM_WINDOW+15 secure system overlay windows, which need to be displayed on top of everything else. These windows must not take input focus, or they will interfere with the keyguard. - WindowManager.LayoutParams.TYPE_DRAG? FIRST_SYSTEM_WINDOW+16 the drag-and-drop pseudowindow. - WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL? FIRST_SYSTEM_WINDOW+17 - WindowManager.LayoutParams.TYPE_POINTER FIRST_SYSTEM_WINDOW+18 (mouse) pointer - WindowManager.LayoutParams.TYPE_NAVIGATION_BAR FIRST_SYSTEM_WINDOW+19 - WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY? FIRST_SYSTEM_WINDOW+20 - WindowManager.LayoutParams.TYPE_BOOT_PROGRESS? FIRST_SYSTEM_WINDOW+21 The boot progress dialog, goes on top of everything in the world. - WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER? FIRST_SYSTEM_WINDOW+22 Fake window to consume touch events when the navigation bar is hidden. - WindowManager.LayoutParams.TYPE_DREAM? FIRST_SYSTEM_WINDOW+23 Dreams (screen saver) window, just above keyguard. - WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL? FIRST_SYSTEM_WINDOW+24 Navigation bar panel (when navigation bar is distinct from status bar) - WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND? FIRST_SYSTEM_WINDOW+25 Behind the universe of the real windows. - WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY? FIRST_SYSTEM_WINDOW+26 Display overlay window. Used to simulate secondary display devices. - WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY? FIRST_SYSTEM_WINDOW+27 Magnification overlay window. - WindowManager.LayoutParams.TYPE_RECENTS_OVERLAY? FIRST_SYSTEM_WINDOW+28 Recents. Same layer as TYPE_SYSTEM_DIALOG? but only appears on one user's screen. - WindowManager.LayoutParams.TYPE_KEYGUARD_SCRIM? FIRST_SYSTEM_WINDOW+29 keyguard scrim window. Shows if keyguard needs to be restarted. - WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION? FIRST_SYSTEM_WINDOW+30 ○ Android 4.4~ WindowManager.LayoutParams.LAST_SYSTEM_WINDOW? 2999 ○ - 上
参考
- http://techbooster.org/android/ui/13182/
- http://d.hatena.ne.jp/baroqueworksdev/20110724/1311512889 - Android 2.3
- http://d.hatena.ne.jp/baroqueworksdev/20111124/1322114804 - Android 4.0
- http://d.hatena.ne.jp/baroqueworksdev/20120630/1341084903 - Android 4.1
- http://d.hatena.ne.jp/baroqueworksdev/20120630/1341088267