LoginSignup
48
52

More than 5 years have passed since last update.

Androidでロック画面より手前にViewを表示する

Posted at

はじめに

他アプリの起動中に、一枚薄いレイヤーを最前面に重ねて、
ニコニコ動画のコメントのようなものを延々とたれ流す...
という実装を試したかったので、WindowManagerについて調査してみました。

Andoridの表示レイヤーについて

Androidでは、ロック画面やステータスバーを挟んで
情報の優先度として、表示レイヤーとして制御されています。

優先度[高]
↑ TYPE_SYSTEM_ERROR
↑ TYPE_SYSTEM_OVERLAY
↑ -----ロック画面------
↑ -----ステータスバー-----
↑ TYPE_SYSTEM_ALERT
↑ TYPE_PRIORITY_PHONE
↑ TYPE_TOAST
↑ TYPE_PHONE
↑ -----通常のアプリ-----
優先度[低]

上にある方が優先度が高いため、
例えばTYPE_SYSTEM_ERRORレイヤーに表示すると、
ロック画面よりも上に表示されることになります。

表示レイヤーの指定

WindowManager.LayoutParamsクラスを使用すると
Viewの表示レイヤーを指定する事が可能です。

今回使用したのは下記のオプション。
TYPE_TOASTで表示位置は電話の上のレイヤーを指定。
FLAG_NOT_TOUCHABLEでタッチ操作は取得しない設定。

    final WindowManager.LayoutParams params =
            new WindowManager.LayoutParams(
                    width, height,
                    TYPE_TOAST,
                    FLAG_NOT_FOCUSABLE
                            | FLAG_NOT_TOUCHABLE
                            | FLAG_LAYOUT_NO_LIMITS //ステータスバーをActivityにかぶせるように表示
                            | FLAG_LAYOUT_INSET_DECOR //FLAG_LAYOUT_IN_SCREENで必要なoption
                            | FLAG_LAYOUT_IN_SCREEN //FLAG_FULLSCREEN(OverlapするViewを全画面表示)
                            | FLAG_HARDWARE_ACCELERATED, //GPUを使用して画面描画(ハードウェアアクセラレーションの使用)
                    TRANSLUCENT // viewを透明にする
            );

オプションの細かい詳細についてはマニュアルに記載されています。
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

結果

ホームスクリーン上に表示
cat2.png

ロック画面より上に表示してみた(TYPE_SYSTEM_ERRORを指定)
cat1.png

TYPE_TOASTに表示中に TOASTを送信(TOASTが上にくる)
cat3.png

おしまい

TYPE_SYSTEM_ERROR(最前面)に表示したレイヤーに対して、FLAG_NOT_TOUCHABLE(タッチ操作を無効化)を設定し忘れるとロック解除など一切の操作が効かなくなってしまうので注意が必要です。
(推奨された使用方法ではない可能性がありますのであくまで実験サンプルとして記録しておきます。)

(sample)
Github:
https://github.com/oggata/AndroidOverviewDemo

(使用した素材)
ネコの無料イラスト
http://shigenori-terazawa.seesaa.net/article/407247100.html

48
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
52