关闭

android system alter window实现系统提示框

标签: system alter window界面提示框android
726人阅读 评论(1) 收藏 举报
分类:

android 实现系统提示框

实际工作中,特别是定制设备和系统,经常会需要弹出些系统级别的提示框,如程序的后台升级下载,完成进度等等,在不影响其他程序的正常使用的同时进行有效的提示,提示级别为系统级别,也就是无论你退不退出程序都会在屏幕最外层界面显示提示框。

因此提示框的显示和逻辑最好写在service里面,使用system alter window需要添加权限:

<!--系统对话框权限-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

添加提示框:

windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

mView = LayoutInflater.from(context).inflate(R.layout.window_manager_popwin, null);
titleView = (TextView)mView.findViewById(R.id.title);
progressView = (TextView)mView.findViewById(R.id.progress);

params = new WindowManager.LayoutParams();

// 类型
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

// WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

// 设置flag

int flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM| 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.width = mView.getWidth();
params.height = mView.getHeight();*/

params.gravity = Gravity.BOTTOM|Gravity.RIGHT;
params.x = 20;  //相当于margin设置
params.y = 20;
windowManager.addView(mView, params);

取消提示框只需:

if(mView!=null){
    windowManager.removeView(mView);
}

实际运行效果如下:



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39735次
    • 积分:1170
    • 等级:
    • 排名:千里之外
    • 原创:70篇
    • 转载:22篇
    • 译文:0篇
    • 评论:20条
    文章分类