4

TYPE_SYSTEM_ALERT または同様のオーバーレイ タイプ (他のすべてのウィンドウの上にある) の下のレイヤーにイベントを渡すことができる WindowManager.LayoutParams の組み合わせを取得するのを手伝ってくれませんか。

問題: 私の問題は、ウィンドウ タイプ TYPE_SYSTEM_ALERT がフォーカスを取得すると、その下にある他のアプリケーションにモーション イベントが渡されなくなることです。

サンプルコード

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
        WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
        PixelFormat.TRANSLUCENT);

要件: TYPE_SYSTEM_ALERT または同様のオーバーレイ タイプを取得して、他のすべてのウィンドウの上に配置し、モーション イベントを取得するだけでなく、モーション イベントを最上位レイヤー (おそらく TYPE_SYSTEM_ALERT) の下の任意のオーバーレイに渡す必要があります。

モーションイベントを中断せずにすべてのウィンドウの上に画像を描画する必要があるため、他のすべてのウィンドウの上にとどまる必要があります。

4

1 に答える 1

0

まあ、それは言うドキュメントから:

TYPE_SYSTEM_ALERT - ウィンドウの種類: 低電力アラートなどのシステム ウィンドウ。これらのウィンドウは、常にアプリケーション ウィンドウの上にあります。マルチユーザー システムでは、所有ユーザーのウィンドウにのみ表示されます。

リンクはこちら: https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT

これを少しテストしたところ、ビューがほとんどすべて (Android 6.0 以降の許可ダイアログを含む) の上に表示され、フォーカスが失われることを意味します。Keyguard レイヤーは引き続き最上位に留まります。はい、ビューの属性を失う可能focusable性がありますが、タッチ リスナーですべてを処理できる可能性があります。たとえば、この投稿を見てください: onClick の代わりに View.OnTouchListener を使用する方法

于 2016-10-27T11:41:30.373 に答える