Android: Service中创建窗口显示
WindowManager.LayoutParams:
int TYPE_SYSTEM_ALERT  Window type: system window, such as low power alert.(系统窗体,例如低电量警告提示框)
int TYPE_SYSTEM_OVERLAY  Window type: system overlay windows, which need to be displayed on top of everything else.(系统覆盖窗体,哪个需要显示在最前的)
TYPE_SYSTEM_ALERT跟TYPE_SYSTEM_OVERLAY的区别
system_alert窗口可以获得焦点,响应操作
system_overlay窗口显示的时候焦点在后面的Activity上,仍旧可以操作后面的Activity
清单文件manifest中需要相应的permission
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
以下两种方式显示出来的窗口都不会激发当前Activity的onPause()事件。
1. Seivece 创建窗体
 private void showSystemDialog() {
     /* create ui dialog */
     View v = View.inflate(mContext, R.layout.serveice_dialog, null);
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
     alertDialog.setView(v);
     dialog = alertDialog.create();
     dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
     //dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
     dialog.show();
     **** 注意dialog 在执行show方法之后,才能调整dialog的大小以及更新数据 ****
     /* set size & pos */
     WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
     WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
     Display display = wm.getDefaultDisplay();
     if (display.getHeight() > display.getWidth()) {
         //lp.height = (int) (display.getHeight() * 0.5);
         lp.width = (int) (display.getWidth() * 1.0);
     } else {
         //lp.height = (int) (display.getHeight() * 0.75);
         lp.width = (int) (display.getWidth() * 0.5);
     }
     d.getWindow().setAttributes(lp);  
     /* update ui data */
     lv = (ListView) d.getWindow().findViewById(R.id.listview);
     SimpleAdapter adapter = new SimpleAdapter(mContext, getListData(), R.layout.list_item,
                             new String[]{"item_text", "item_img"},
                             new int[]{R.id.item_text, R.id.item_img});
     lv.setAdapter(adapter);           
     /* set listener */
     lv.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View view, int pos,
                 long id) {
             d.dismiss();
         }
     });       
 }  
2. 直接使用WindowManager.addView()在后台直接显示窗口
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDesktopLayout = inflater.inflate(R.layout.volume_panel, null);
// 取得系统窗体
mWindowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
// 窗体的布局样式
mLayoutParams = new WindowManager.LayoutParams();
// 设置窗体显示类型――TYPE_SYSTEM_ALERT(系统提示)
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
// 设置窗体焦点及触摸:
// FLAG_NOT_FOCUSABLE(不能获得按键输入焦点)
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
// 设置显示的模式
mLayoutParams.format = PixelFormat.RGBA_8888;
// 设置对齐的方法
mLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
// 设置窗体宽度和高度
mLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
// 设置窗体显示的位置,否则在屏幕中心显示
mLayoutParams.x = 50;
mLayoutParams.y = 50;
mWindowManager.addView(mDesktopLayout, mLayoutParams);
Android: Service中创建窗口显示的更多相关文章
- 在Android Studio中创建项目和模拟器
		
北京电子科技学院 实 验 报 告 课程:移动平台应用开发实践 班级:201592 姓名:杨凤 学号:20159213 成绩:___________ 指导老师:娄嘉 ...
 - Android Studio中创建Kotlin For Android项目
		
Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...
 - Android实验一(在Android Studio中创建项目和模拟器)
		
北京电子科技学院(BESTI) 实 验 报 告 课程:移动平台开发 班级:1592 姓名:苏泽楠 学号:20159207 成绩: 指导教师 ...
 - Android studio 中创建AIDL Service
		
1.概述 AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...
 - Android应用中创建绑定服务使得用户可以与服务交互
		
原文:http://android.eoe.cn/topic/android_sdk 一个绑定的服务是客户服务器接口上的一个服务器.一个绑定的服务允许组件(如:活动)来绑定一个服务,传送请求,接收响应 ...
 - 隐藏windows任务栏中的窗口显示
		
在实际应用中遇到类似下列需要: 隐藏windows窗口,在windows任务栏中窗口不可见,但应用程序在后台运行. windows应用程序的窗口默认会在任务栏中添加一个可见的窗口项,方便用户操作和在不 ...
 - 在DLL中创建窗口时一个值得注意的地方 — UnregisterClass
		
背景描述: 今天要测试一份注入代码,拿以前写的创建窗口的DLL来做测试. 第一次注入时一切正常,窗口被成功创建并显示,但在第二次加载时窗口没有显示出来. 经过研究发现在第二次加载DLL时Registe ...
 - android Service中多线程交互
		
android 的service和activity是执行在UI主线程的. 在android线程中,仅仅有主线程即UI线程有自己的默认的消息队列.子线程须要创建自己的消息队列.并把消息发给队列,并循环起 ...
 - emwin之在中断服务程序中创建窗口的结果
		
@2019-04-28 [小记] 使用emwin设计器生成的程序,将该窗口创建放在中断服务程序中出现奇怪现象,非死机但功能间歇性异常,将创建窗口程序放于普通程序中则工作正常
 
随机推荐
- 转:不再以讹传讹,GET和POST的真正区别
			
如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继 ...
 - jquery学习笔记----ajax使用
			
一.load() 加载页面数据 load(url,[data],[callback]) url:加载的页面地址,[data]传送的数据,[callback]加载完成时回调函数. 设计一个load.ht ...
 - ARPPING
			
http://www.tuicool.com/articles/M7B3umj http://lixcto.blog.51cto.com/4834175/1571838/
 - WPA: 4-Way Handshake failed - pre-shared key may be incorrect
			
生成psk网址: https://www.wireshark.org/tools/wpa-psk.html 相关 bug: 重点 关注 : https://en.community.sonos.com ...
 - OCJP(1Z0-851) 模拟题分析(八)over
			
Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有 ...
 - [LeetCode] Ugly Number
			
Ugly Number Total Accepted: 20760 Total Submissions: 63208 Difficulty: Easy Write a program to check ...
 - C与C++之间相互调用
			
1.导出C函数以用于C或C++的项目 如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言.如果是从C++语言模块使用,则 ...
 - PHPCMS-V9 获取一级栏目、二级栏目、三级栏目
			
<!-- 获取一级栏目 -->{pc:content action=" siteid="$siteid" order="listorder ASC& ...
 - 信号量进程同步,王明学learn
			
信号量进程同步 一组并发进程进行互相合作.互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 信号量在进程同步时初始值为:0 信号量在进程互斥时初始值为:大于0的 本章节主要使用信号量,使的 ...
 - I/O复用模型之epoll学习
			
简介: epoll是linux下多路复用I/O接口select/poll的增强版,它能够显著提高程序在大量并发连接中只有少量活跃的情况下的系统cpu利用率,原因是它会复用文件描述符集合来传递结果而不用 ...