Amdroid之系统桌面悬浮框(WindowManager)
来源:互联网 发布:宋太祖宋真宗去世知乎 编辑:程序博客网 时间:2024/05/17 23:30
如今大部分应用为了让用户时刻注意到自己应用的特殊功能,或者告诉用户一些提示性的信息时,这时候假如用户退出了我们的应用,那么我们可以显示出一个系统级别的悬浮框,达到用户快捷操作和进入我们应用的效果,那么我们则利用android自带的WindowManager控件实现:
public class WindowUtils { private static final String LOG_TAG = "WindowUtils"; private static View mView = null; private static WindowManager mWindowManager = null; public static Boolean isShown = false; /** * 显示弹出框 * * @param context */ public static void showPopupWindow(final Context context) { if (isShown) { Log.i(LOG_TAG, "return cause already shown"); return; } isShown = true; Log.i(LOG_TAG, "showPopupWindow"); // 获取应用的Context,注意这里的上下文环境必须是ApplicationContext级别的,否则显示不出来;接着得到WindowManager对象 mWindowManager = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); mView = LayoutInflater.from(context).inflate(R.layout.layout_back, null); ; final WindowManager.LayoutParams params = new WindowManager.LayoutParams(); // 类型 params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; // WindowManager.LayoutParams.TYPE_SYSTEM_ALERT // 设置flag int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,弹出的View收不到Back键的事件 params.flags = flags; // 不设置这个弹出框的透明遮罩显示为黑色 params.format = PixelFormat.TRANSLUCENT; // FLAG_NOT_TOUCH_MODAL不阻塞事件传递到后面的窗口 // 设置 FLAG_NOT_FOCUSABLE 悬浮窗口较小时,后面的应用图标由不可长按变为可长按 // 不设置这个flag的话,home页的划屏会有问题 params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.height = WindowManager.LayoutParams.WRAP_CONTENT; //位置 params.gravity = Gravity.TOP | Gravity.LEFT; mWindowManager.addView(mView, params); Log.i(LOG_TAG, "add view"); } /** * 隐藏弹出框 */ public static void hidePopupWindow() { Log.i(LOG_TAG, "hide " + isShown + ", " + mView); if (isShown && null != mView) { Log.i(LOG_TAG, "hidePopupWindow"); mWindowManager.removeView(mView); isShown = false; } }}
最后注意在manifest.xml中增加权限:
<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW" />
0 0
- Amdroid之系统桌面悬浮框(WindowManager)
- android之桌面悬浮框
- WindowManager悬浮框1
- WindowManager 系统悬浮窗弹出
- 借助windowmanager自定义悬浮框
- 使用WindowManager添加可拖动悬浮窗口到桌面
- Android之悬浮窗口实现(WindowManager)
- Android之悬浮窗口实现(WindowManager)
- Android之悬浮窗和WindowManager
- Android之WindowManager实现悬浮按钮
- Android之悬浮窗口实现(WindowManager)
- amdroid源码学习系列之--建立android系统开发环境
- Android 桌面悬浮框
- Android 桌面悬浮框
- Android桌面悬浮框
- 桌面悬浮框
- 通过WindowManager实现拖动悬浮框
- WindowManager之实现类似360桌面悬浮物
- 基于Blod的ajax进度条下载实现
- vs visual studio 2015中如何在当前的项目管理器中打开文件?如何打开指定的方法名称,如何显示到指定的方法的那个位置
- Report_oracle_inspection.sh
- eclipse启动tomcat无法访问
- react native封装原生view, 讲解其中的方案设计和通信机制,不错的分享
- Amdroid之系统桌面悬浮框(WindowManager)
- build一个没有签名的APP
- Linux系统配置sudo
- 自定义的RecyclerView, 下拉刷新,加载更多.
- Struts2学习整理总结
- leetCode练习(520)
- 基于bootstrap的中国地区(行政区)选择器
- 机器学习为什么需要训练,训练出来的模型具体又是什么?
- caffe︱Pascal VOC 2012 Multilabel Classification Model