来去电归属地[03]WindowManager创建浮动窗口

摘要

WindowManager我们又要学到的一个重要服务是系统级的服务,这个服务可将一个视图View可以是来自xml布局文件的视图放入一个布局,而且这个布局可以放在其他Activity的上方,可以进行添加,删除,更新视图.这个是一个我们陌生又熟悉的Api

一方面我们刚认识这个api 他的方法如下

windowmg.addView(viewparams);//添加

windowmg.removeView(view);//移除

windowmg.updateViewLayout(viewparams);//更新

另一方面又是我们很熟悉的,因为我们一直用的Activity,Toast,Dialog,PopupWindow的底层是WindowManager。这时候学员们迷惑了。怎么这么强大的类我们怎么不先掌握呢?我们只要掌握一个类多方便而不是要学Activity,Toast,Dialog,PopupWindow这么多个类.你可以思考下底层难还是上层封装难,当然是底层了,android公布简易的封装对象,初级开发者容易上手,见到难的底层谁还会学,是吧?

我们的归属地显示就是用到了

原理

WindowManager是一个系统级服务,负责对顶级布局进行CRUD(这里没有查询)

>权限

 

>获取WindowManager

windowmg = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

>添加视图

// windowr的布局参数
windowmg.addView(view,//视图
 params//布局参数);

注意

第二个为布局参数,这个参数是重点,我们参过他来改变布局的对齐方式gravity,宽度width,高度height,在布局的坐标,能否聚集等等

params = new WindowManager.LayoutParams();
// 对齐   layout_gravity
params.gravity = Gravity.LEFT | Gravity.TOP;
// layout_width layout_height 
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
// 类型值
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE// 不能获取焦点
// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE// 不能touch
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;// 屏幕高亮
// 背景格式
params.format = PixelFormat.TRANSLUCENT;// translucent透明
// 视图类型 调节层次
params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
// --------------------获取保存坐标
int x = sp.getInt(Constant.RAW_X, 0);
int y = sp.getInt(Constant.RAW_Y, 0);
params.x = x;
params.y = y;
// 加入布局
windowmg.addView(view, params);

思考

怎么往LinearLayout上放置一个Button,如果是xml布局的话学员早秒了不是?

 

你可能感兴趣的:(课堂Android基础要点)