WindowManager添加的Floating窗口对startActivity的影响问题解决(Android)

来源:互联网 发布:docker源码分析 pdf 编辑:程序博客网 时间:2024/05/29 14:04

这两天,通过WindowManager在Activity中添加了一个悬浮button,通过点击button可以启动一个新的Activity.一切都很顺利,悬浮窗口按如下方式就可以添加成功:

      wmParams = new WindowManager.LayoutParams(); 
      //获取的是WindowManagerImpl.CompatModeWrapper 
      mWindowManager = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE); 
      Log.i(TAG, "mWindowManager--->" + mWindowManager); 
      //设置window type 
      wmParams.type = LayoutParams.TYPE_PHONE;  
      //设置图片格式,效果为背景透明 
      wmParams.format = PixelFormat.RGBA_8888;  
      //设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作) 
      wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;       
      //调整悬浮窗显示的停靠位置为左侧置顶 
      wmParams.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;        
      // 以屏幕左上角为原点,设置x、y初始值,相对于gravity 
      wmParams.x = -100; 
      wmParams.y = 0; 

      //设置悬浮窗口长宽数据   
      wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT; 
      wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT; 

       /*// 设置悬浮窗口长宽数据
      wmParams.width = 200;
      wmParams.height = 80;*/ 
  
      LayoutInflater inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      //获取浮动窗口视图所在布局 
      mFloatLayout = inflater.inflate(R.layout.float_button, null); 
     
      ball = (ImageView)mFloatLayout.findViewById(R.id.ball);
      //添加mFloatLayout 
      mWindowManager.addView(mFloatLayout, wmParams);    
     
      mFloatLayout.measure(View.MeasureSpec.makeMeasureSpec(0, 
              View.MeasureSpec.UNSPECIFIED), View.MeasureSpec 
              .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 

 

但是,现在需要新打开的activity不占满整个屏幕,这样,用户可以看到透明的背景,用户点击透明区域,activity就消失。

设置Activity背景为透明的方法在网上介绍很多,官网也说明,必须通过设置Activity theme来设置。

<activity android:name="com.motorolasolutions.radio.dtapitest.ChannelListActivity"
            android:theme="@android:style/Theme.Dialog" >

按照如上方法设置后,点击浮动button,将不再有任何相应,Activity也打不开。

后来,通过在onClick事件中,删除该浮动button,问题解决。

猜测原因可能是浮动button也是背景透明的窗口,Activity也是背景透明的窗口,而浮动button是TYPE_PHONE类型,所有有更高的显示优先级,所以Acvitiy就显示不出来了。android系统拒绝显示该Acvitiy。不过都是猜测,如果有大侠能够解释或证据,不胜感激。

0 0
原创粉丝点击