首先先申请SYSTEM_ALERT_WINDOW权限
在桌面显示一个悬浮按钮的例子:
final Button button=new Button(this);
button.setText("我是按钮");
final WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
final WindowManager.LayoutParams params = new
WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_TOAST;//TYPE_PHONE需要获取手机的悬浮窗权限,TYPE_TOAST不需要手机的悬浮窗权限便可以显示,但是android7.0有问题了,需要换成TYPE_PHONE才行
params.format = PixelFormat.RGBA_8888;
params.gravity = Gravity.LEFT | Gravity.TOP;
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;// 另外windowManager.getDefaultDisplay().getWidth();获取屏幕的宽度
params.height =ViewGroup.LayoutParams.WRAP_CONTENT;// 另外windowManager.getDefaultDisplay().getHeight();获取屏幕的高度
params.x = 100;
params.y = 300;
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
Log.d("CeShi", "anxiale");
break;
case MotionEvent.ACTION_MOVE:
params.x= (int) event.getRawX()-button.getWidth()/2;
params.y= (int) event.getRawY()-button.getHeight()/2;
windowManager.updateViewLayout(button,params);//可以在app中拖动,出了app就不能拖动了
break;
}
return true;
}
});
windowManager.addView(button, params);
参考文章:
http://www.jianshu.com/p/167fd5f47d5c
https://www.liaohuqiu.net/cn/posts/android-windows-manager/
网友评论