来去电归属地[03]WindowManager创建浮动窗口
来源:互联网 发布:什么是软件集成测试 编辑:程序博客网 时间:2024/04/27 22:44
摘要
WindowManager我们又要学到的一个重要服务是系统级的服务,这个服务可将一个视图View可以是来自xml布局文件的视图放入一个布局,而且这个布局可以放在其他Activity的上方,可以进行添加,删除,更新视图.这个是一个我们陌生又熟悉的Api
一方面我们刚认识这个api 他的方法如下
windowmg.addView(view, params);//添加
windowmg.removeView(view);//移除
windowmg.updateViewLayout(view, params);//更新
另一方面又是我们很熟悉的,因为我们一直用的Activity,Toast,Dialog,PopupWindow的底层是WindowManager。这时候学员们迷惑了。怎么这么强大的类我们怎么不先掌握呢?我们只要掌握一个类多方便而不是要学Activity,Toast,Dialog,PopupWindow这么多个类.你可以思考下底层难还是上层封装难,当然是底层了,android公布简易的封装对象,初级开发者容易上手,见到难的底层谁还会学,是吧?
我们的归属地显示就是用到了
原理
WindowManager是一个系统级服务,负责对顶级布局进行CRUD(这里没有查询)
>权限
<!-- 浮动视图的添加权限 --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
>获取WindowManager
windowmg = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
>添加视图
// windowr的布局参数windowmg.addView(view,//视图
params//布局参数);
注意
第二个为布局参数,这个参数是重点,我们参过他来改变布局的对齐方式gravity,宽度width,高度height,在布局的坐标,能否聚集等等
params = new WindowManager.LayoutParams();// 对齐 layout_gravityparams.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布局的话学员早秒了不是?
<LinearLayout ...
<Button id="@+id/btn"
..wrap_content
...match_content />
/LinearLayout>
那要是代码输出这个界面呢?
是不是很麻烦?一方面说明了xml配置的高效,另一方面说明了如果是代码创建界面的话,重要属性都要通过LayoutParams来配置。
// 创建按钮Button btn = new Button(this);// 创建布局参数LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(//LinearLayout.LayoutParams.MATCH_PARENT,// 宽度LinearLayout.LayoutParams.WRAP_CONTENT// 高度);// 设置布局参数btn.setLayoutParams(params);// 创建线布局LinearLayout line = new LinearLayout(this);line.addView(btn);
>移除视图
注意
view.getParent()!=null的getParent() 是判断一个view是否已经添加到布局里了,如果有返回值不为null,没有就为null,我们当然是把一个添加到布局里面的控件进行移除!!!
if (view != null) {if (view.getParent() != null) {// 被放到布局文件里面windowmg.removeView(view);view = null;}}
>更新视图
windowmg.updateViewLayout(view, params);
作业
- 来去电归属地[03]WindowManager创建浮动窗口
- 来去电归属地入门学习
- Android显示来去电归属地
- 4.1 来去电时更改归属地显示的位置
- 来去电归属地[01]基本思路与开发要点
- 来去电归属地[02]拦截外拨电话与来电的号码
- 安卓在服务里实现来去电归属地----在服务里比在广播接收者里好
- 通过WindowManager创建窗口
- 去电归属地的显示
- 101.去电的归属地显示
- 浮动窗口的创建。
- 来去电监听
- 来去电监听
- 监视来去电情况
- MFC浮动窗口的创建
- 来去电悬浮窗口提示事件记录(根据号码找到相关事情)
- 是大概多少归属地归属地
- 创建Photoshop式浮动窗口应用程序
- LRU算法&&LeetCode解题报告
- iTween EaseType 效果
- linux文件结构
- C# web api返回类型设置为json的两种方法
- eventfd
- 来去电归属地[03]WindowManager创建浮动窗口
- 狗屎不如的4小时
- POJ1286 Necklace of Beads
- 常用的css命名规则
- 安装和配置kettle
- 性能优化(案例一)-横向分表
- AT&T汇编语言——工具及程序组成
- 【iOS】如何学好Objective-C
- ffplay for mfc 代码备忘