这两天,通过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。不过都是猜测,如果有大侠能够解释或证据,不胜感激。