12

ウィンドウマネージャーにフローティングビューを表示するサービスがあります(WINDOW_TYPE_ALERT権限を使用)。それを表示してアクションを実行できます。しかし、具体的な質問が 2 つあります。

  1. フローティングビューの実装について
  2. ビューを閉じることができるように、システムの戻るボタン イベントをリッスンする方法。

実装:

マニフェストで、次の権限を追加しました。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

アラーム イベントをリッスンするブロードキャスト レシーバーがあります。イベントを受けて、フローティングビューを表示するサービスを開始しています。以下は、ビューを作成するために使用しているコードです。

LayoutParams layOutParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);

ユーザーがビューに対して何らかのアクションを実行するたびに、ウィンドウ マネージャーからビューを削除し、サービスを停止しています。

私が知りたいのは、これが問題にアプローチする正しい方法であるか、それともより良い方法があるかということです。また、LayoutParams を変更する必要がありますか、それともそのままにしておく必要がありますか?

次に、SYSTEM BACK/HARDWARE BACK ボタンを押すイベントが発生したときに、このフローティング ビューを閉じたいと思います。これを行う方法についての指針は役に立ちます。

理解を深めるために、フローティング ビューのスクリーンショットを添付します。

フローティング ビュー

4

5 に答える 5

11

戻るボタンの検出に関しては、次のように動作するようにしました (すべてサービスの onCreate コードで行われます)。

  1. 目的のビューを ViewGroup (LinearLayout、Relative またはその他) にラップします。
  2. ラッパー ビューで次のように dispatchKeyEvent をオーバーライドします。

mView = new RelativeLayout(this) {
        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
                // < your action >
                return true;
            }
            return super.dispatchKeyEvent(event);
        }
};
  1. ラッパー ビューをウィンドウ マネージャーに追加し、ラッパー レイアウト パラメータに WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE が設定されていないことを確認します。
于 2014-09-15T10:54:17.707 に答える
6

フローティングウィンドウの処理に適したStandout Libraryを見てください。バックプレスイベントも処理していないようです。開発者に連絡すると役立つ場合があります。

もう1つの方法は、半透明の背景/テーマでアクティビティを開いて、Any.doのフローティングウィンドウで使用される同様の効果を得て、バックプレスイベントを処理できることです。

于 2013-09-04T13:29:58.807 に答える
2

[戻る] ボタンについて - ビュー内の "onBackPressed()" をオーバーライドし、必要なことを行う必要があります

@Override
public boolean onBackPressed() {
    // Remove your view from the window...
}

とにかく、私はTooleap という SDKを使用して、フローティング ウィンドウを簡単に表示します。

于 2014-06-23T09:11:06.420 に答える
1

ホーム ボタンでも UI を閉じますか? もしそうなら、アラートウィンドウではなく、透明な背景で開くアクティビティを用意したほうがよさそうです。これを行うには、アクティビティのテーマとして次のスタイルを使用します

<style name="Transparent">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:windowFullscreen">true</item>
</style>
于 2013-09-06T08:35:48.297 に答える