0
  • 最佳答案

    使用WindowManager可以实现,WindowManager可以在其他应用最上层,甚至手机桌面最上层显示窗口。


    大致使用如下

    <!-- 显示顶层浮窗 -->

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

    //判断是否授予悬浮窗权限

    //TODO:

    //未授予权限,跳转前去授予

    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));

            startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);


    /**

       * 显示弹出框

       *

       * @param context

       * @param view

       */

      public static void showPopupWindow(final Context context) {

        if (isShown) {

          LogUtil.i(LOG_TAG, "return cause already shown");

          return;

        }

        isShown = true;

        LogUtil.i(LOG_TAG, "showPopupWindow");

        // 获取应用的Context

        mContext = context.getApplicationContext();

        // 获取WindowManager

        mWindowManager = (WindowManager) mContext

            .getSystemService(Context.WINDOW_SERVICE);

        mView = setUpView(context);

        final WindowManager.LayoutParams params = new WindowManager.LayoutParams();

        // 类型

        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

        // WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

        // 设置flag

        int flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;

        // | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

        // 如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,弹出的View收不到Back键的事件

        params.flags = flags;

        // 不设置这个弹出框的透明遮罩显示为黑色

        params.format = PixelFormat.TRANSLUCENT;

        // FLAG_NOT_TOUCH_MODAL不阻塞事件传递到后面的窗口

        // 设置 FLAG_NOT_FOCUSABLE 悬浮窗口较小时,后面的应用图标由不可长按变为可长按

        // 不设置这个flag的话,home页的划屏会有问题

        params.width = LayoutParams.MATCH_PARENT;

        params.height = LayoutParams.MATCH_PARENT;

        params.gravity = Gravity.CENTER;

        mWindowManager.addView(mView, params);

        LogUtil.i(LOG_TAG, "add view");

      }


    //最后附上博客文章

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1204/2103.html

    1262662471676645376  评论     打赏       我不是乘树猿
    • 在按钮的位置,显示一个pop window就行了

      1139423796017500160  评论     打赏       断点-含光君
      • 不会飞的鸟  回复 @断点-含光君
        PopupWindow设置成MATCH_PARENT,显示就覆盖了按钮的大小,根本无法全屏
        不会飞的鸟 2021-05-14 10:01   回复 1280676291607076864
      • 不会飞的鸟  回复 @断点-含光君
        弄了一星期了,还是弄不出来,可以的话,能做个效果给我看看吗
        不会飞的鸟 2021-05-14 10:02   回复 1280676291607076864
      • 断点-含光君  回复 @不会飞的鸟
        你把上面那个列表,也放在悬浮按钮的同一个布局中,这样就一起悬浮了。是不是想复杂了呢
        断点-含光君 2021-05-14 11:30   回复 1139423796017500160
      • 不会飞的鸟  回复 @断点-含光君
        我在试试
        不会飞的鸟 2021-05-18 08:43   回复 1280676291607076864
      • 不会飞的鸟  回复 @断点-含光君
        一语惊醒梦中人
        不会飞的鸟 2021-05-18 08:53   回复 1280676291607076864
    • widowManager直接添加。

      1153952789488054272  评论     打赏       拉大锯
      • 悬浮按钮显示后,activity就finish调,我想要全屏显示pop window,怎么办呢,怎么拿到当前屏幕的正在显示的根view呢

        1280676291607076864  评论     打赏       不会飞的鸟
        • 1280676291607076864  评论     打赏       不会飞的鸟
          相关问题
          2023-11-21 15:11 13 2
          陈钱罐16 · 领券联盟
          2023-11-11 18:09 23 8
          哈哈android · AOSP
          2023-11-10 15:52 13 12
          2023-11-10 00:26 22 10
          zhanghengze · Android
          2023-10-26 21:52 22 8