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中创建窗口显示的更多相关文章

  1. 在Android Studio中创建项目和模拟器

    北京电子科技学院 实      验      报      告 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________  指导老师:娄嘉 ...

  2. Android Studio中创建Kotlin For Android项目

    Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...

  3. Android实验一(在Android Studio中创建项目和模拟器)

    北京电子科技学院(BESTI) 实     验    报     告 课程:移动平台开发         班级:1592 姓名:苏泽楠 学号:20159207 成绩:             指导教师 ...

  4. Android studio 中创建AIDL Service

      1.概述  AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...

  5. Android应用中创建绑定服务使得用户可以与服务交互

    原文:http://android.eoe.cn/topic/android_sdk 一个绑定的服务是客户服务器接口上的一个服务器.一个绑定的服务允许组件(如:活动)来绑定一个服务,传送请求,接收响应 ...

  6. 隐藏windows任务栏中的窗口显示

    在实际应用中遇到类似下列需要: 隐藏windows窗口,在windows任务栏中窗口不可见,但应用程序在后台运行. windows应用程序的窗口默认会在任务栏中添加一个可见的窗口项,方便用户操作和在不 ...

  7. emwin之在中断服务程序中创建窗口的结果

    @2019-04-28 [小记] 使用emwin设计器生成的程序,将该窗口创建放在中断服务程序中出现奇怪现象,非死机但功能间歇性异常,将创建窗口程序放于普通程序中则工作正常

  8. Windows:子线程中创建窗口

    一般来讲,UI的所有操作都必须在主线程,否则会出现未知错误.但有时候我们会需要一个功能比较单一的窗口,同时希望他在一个单独的线程运行.并不影响主线程的效率. 下面说明一下新建子线程创建的新窗口的方法, ...

  9. 从微信推送看Android Service的创建和销毁

    启动服务是有两组参数影响服务的状态. 1.在onStartCommand(Intent intent, int flags, int startId) 接口中返回值,例如 START_STICKY;  ...

随机推荐

  1. SQL Server 在缺少文件组的情况下如何还原数据库

    SQL Server 在缺少文件组的情况下如何还原数据库 一.背景 我有一个A库,由于a,b两张表的数据量比较大,所以对表进行分区:在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为 ...

  2. 我常用的find命令

    查找某种类型文件中包含特定字符的文件 find /* -type f -name "*.php" |xargs grep "rename(" find ./|x ...

  3. quartus ii13.0~16.0 调用uedit (转载http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html)

    转自 http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html Quartus II 中的文本编辑软件不好用,比较习惯与UE(Uedit32/ultra ...

  4. 使用 Java 开发并生成 .jar 文件

    1. 编写文件 D:\test\Hello.java: package test; public class Hello { public static void main(String argv[] ...

  5. python 学习(三)

    按照上次python 学习(二)的思路,第一步要实现从一个网站的页面上自动获取指定列表中的信息.折腾数日,得到一段可以正常运行的代码,如下: #web2.py import re import url ...

  6. CopyOnWriteArrayList源代码阅读器

    java.util.concurrent在相应的并发集合的包中定义的通用集合类,为了有效地处理并发场景.间CopyOnWriteArrayList它是合适ArrayList.顾名思义CopyOnWri ...

  7. php中字符串长度和截取的函数

    在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理. 在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函 ...

  8. 在jupyter notebook中同时安装python2和python3

    之前讨论过在anaconda下安装多个python版本,本期来讨论下,jupyter notebook中怎样同时安装python2.7 和python3.x. 由于我之前使用的jupyter note ...

  9. Mac下安装FFmpeg教程

    一.安装ffmpeg 分为两种安装方式: 1. 命令行安装 brew install ffmpeg 2. 下载压缩包安装 去 http://evermeet.cx/ffmpeg/ 下载7z压缩包,解压 ...

  10. Unity3D编辑器扩展(四)——扩展自己的组件

    前面已经写了三篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 今天写第四篇,扩展自己 ...