Android的悬浮窗 发表于 2018-03-09 | 评论数: 本文字数: 1.9k | 阅读时长 ≈ 2 分钟 适配8.012345678910111213 //LayoutParams.type设为 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY//非8.0LayoutParams.TYPE_SYSTEM_ERROR //增加运行时权限 if (!Settings.canDrawOverlays(this)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent, 1); } else { //TODO do something you need } ; 用法 123456789101112131415161718192021222324252627282930313233343536373839 private Button mFloatingButton; private WindowManager.LayoutParams mLayoutParams; private WindowManager mWindowManager; .... .... mCreateWindowButton = (Button) findViewById(R.id.button1); mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); mFloatingButton = new Button(this); mLayoutParams = new WindowManager.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0, 0, PixelFormat.TRANSPARENT); mLayoutParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_SHOW_WHEN_LOCKED; mLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR; mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; mLayoutParams.x = 100; mLayoutParams.y = 300; mFloatingButton.setOnTouchListener(this); mWindowManager.addView(mFloatingButton, mLayoutParams); ...... ...... mWindowManager..updateViewLayout(mlayout, wmParams);............. @Override protected void onDestroy() { try { mWindowManager.removeView(mFloatingButton); } catch (IllegalArgumentException e) { e.printStackTrace(); } super.onDestroy(); }