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中创建Kotlin For Android项目

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

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

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

  3. &lt;转载&gt;Win32控制台工程中创建窗口

    有的时候,用控制台同步输出调试信息.程序状态量,比出Log.弹出报错对话框等方法来得有效.那么如何做到呢?如下: 简而言之,用GetModuleHandle()函数获得当前程序实例句柄,其它地方与常见 ...

  4. Android应用中-更新提示显示红点的方案

    什么是红点更新提示? 红点更新提示类似微信朋友圈有新的朋友消息 时会在“发现”tab上显示红点,表示有新的消息. 目前三种显示方式: 1.显示具体数字 2.只显示红点 3.显示省略,表示数量很多 方案 ...

  5. ionic ng-src 在网页显示,但是导出apk在android手机中运行不显示图片

    解决方法参照: http://stackoverflow.com/questions/29896158/load-image-using-ng-src-in-android-ionic-aplicat ...

  6. Android在Service中显示Dialog

    在Service中弹出一个Dialog对话框 第1步:在应用的AndroidManifest.xml中需要添加权限.没有无法显示. <uses-permission android:name=& ...

  7. [Android] Service和IntentService中显示Toast的区别

    1. 表象     Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失. 2. ...

  8. Android 应用程序窗口显示状态操作(requestWindowFeature()的应用)

     我们在开发程序是常常会须要软件全屏显示.自己定义标题(使用button等控件)和其它的需求,今天这一讲就是怎样控制Android应用程序的窗口显示. 首先介绍一个重要方法那就是requestWi ...

  9. QT中关于窗口全屏显示与退出全屏的实现

    近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...

随机推荐

  1. C语言 &#183; Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  2. Exchange环境搭建心得

    不知道是思维模式的问题,还是智商不够用,从3月1日开始准备自学Exchange,到今天还是有好多东西稀里糊涂的.不说别的,就搭建环境,前期的报错折腾了好一阵.现在回顾一下,用Server08R2,一台 ...

  3. HttpClient_自定义cookie策略

    实际使用client的过程中,会遇到一种情况,如cookie的Key为空的,此时默认的cookie的策略处理cookie是会报错. 这时咱可以通过重写cookiestore策略来解决如: /** * ...

  4. js 文本框只能输入数字

    <input type="text" value="" style="ime-mode:Disabled"  onkeyup=&quo ...

  5. IQD文件模板以及cs7g.ini信息

    COGNOS QUERY STRUCTURE,1,1 DATABASE, cognos TITLE,test BEGIN SQL { select time, city_id, city_name, ...

  6. Solr集群常用的操作总结

    之前搭建过SolrCloud和Solr单机版本,另外还有很多对Solr配置文件以及核心的操作,以下主要总结Solr集群中的常用操作,即在配置文件中正确设置ZK_HOST参数并且Zookeeper正确启 ...

  7. $.getJSON JSONP的新坑

    神坑1:返回的内容必须是正规的json数据.如 { "firstName": "Bill", "lastName": "Gates ...

  8. Java 第13章 带参数的方法

    带参数的方法 无参方法有那几个组成部分? 调用无参方法的两种形式是什么? 第一种:同一个类中的方法调用 直接用方法名 show(): 第二种:不同类中的方法调用 -->对象实例化 -->对 ...

  9. (转)SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)

    五.锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误.设置事务隔离级别将影响整条连接. ...

  10. groovy

    1.加载和卸载(每次都新建一个GroovyClassLoader 实例,然后使用新建的classloader去加载) try { GroovyClassLoader groovyClassLoader ...