• 使用WindowManager添加您自己的自定义视图


    在写手机卫士的时候,用户拨打|接听电话须要显示号码归属地,然后出现了一些异常,在此留下记号。希望对麻友们有帮助:

    BUG教程

    在使用 view = View.inflate(this, R.layout.ui_toast, null);获得View对象后wm.addView出现错误:

    10-12 14:29:06.166: E/AndroidRuntime(1268): Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@41087ed8 -- permission denied for this window type
    

    解决的方法:

    使用另外的方法获取:

    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     mDesktopLayout = inflater.inflate(R.layout.volume_panel, null);
    

    完整代码:

    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);
    

     

    问题总结

    这两种方式显示出来的窗体都不会激发当前Activity的onPause()事件。据说还能够先一个窗体风格的Activity。只是显示时会激发当前窗体的onPause()事件。详细咋样没试过。

    推荐风格

     

    <?xml version="1.0" encoding="utf-8"?

    >  <resources>       <style           name="selectorDialog"           parent="@Android:style/Theme.Dialog">           <item name="android:windowFrame">@null</item><!--边框-->           <item name="android:windowIsFloating">true</item><!--是否浮如今activity之上-->           <item name="android:windowIsTranslucent">false</item><!--半透明-->           <item name="android:windowNoTitle">true</item><!--无标题-->           <!--<item name="android:windowBackground">@drawable/selector_dialog_bg</item>背景透明-->           <item name="android:backgroundDimEnabled">false</item><!--模糊-->           <item name="android:backgroundDimAmount">0.6</item>       </style>  </resources>

     

    OK,谢谢关注破晓博客


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    sparse-PCA(稀疏主成分分析)是什么?
    Ubuntu16.04系统下汉字显示为方框解决办法(图文详解)
    大数据竞赛平台——Kaggle 入门
    机器学习和深度学习资源汇总(陆续更新)
    机器学习常用算法总结(笔记)
    机器学习领域相关的大牛推荐(陆续更新)
    [转]asp.net mvc 从数据库中读取图片
    [转]C#将image中的显示的图片转换成二进制
    [转]MVC4项目中验证用户登录一个特性就搞定
    [转].net cookie版购物车
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4734812.html
Copyright © 2020-2023  润新知