public void funcFloat(View v) { wm = (WindowManager) getApplicationContext().getSystemService( WINDOW_SERVICE); // 注意:这里必须是全局的context // 判断UI控件是否存在,存在则移除,确保开启任意次应用都只有一个悬浮窗 if (scriptView != null) { wm.removeView(scriptView); } params = new WindowManager.LayoutParams(); // 系统级别的窗口 params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; // 居中显示 params.gravity = Gravity.CENTER; // 设置背景透明 params.format = PixelFormat.TRANSPARENT; params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.width = 200; params.height = 300; params.x = 800; params.y = 400; scriptView = new View(getApplicationContext()); // 不依赖activity的生命周期 scriptView = View.inflate(getApplicationContext(), R.layout.activity_main, null); wm.addView(scriptView, params); System.out.println( "Windows Float!" ); btnFloat = (Button) scriptView.findViewById(R.id.btnFloat); btnFloat.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //浮出后点击不会崩溃 System.out.println( "btnFloat click!" ); } }); }