使应用程序运行在其他应用程序上方
我想进行一项可在任何应用程序上方打开的活动。使应用程序运行在其他应用程序上方
通常情况下,即使在活动设置为对话框,当您切换到我的应用程序,你看我的应用程序,并在后台看到启动:
,但我想要的应用程序将上面去任何像这样的应用程序:(在Photoshop制作):
我没有看到这个问题Creating a system overlay window (always on top),但在ICS没有functionallity布局。 此外,我想给我的应用程序的对话框,而不会最小化其他应用程序...
有很多的应用程序,显示一切浮动视图顶上的一切,如:airbrowser,LilyPad,坚持它,AirTerm,智能任务栏,漂浮计算器...
无论如何,为了实现这个功能,你必须有一个名为“android.permission.SYSTEM_ALERT_WINDOW”特别许可,并使用类似的东西:
final WindowManager.LayoutParams param=new WindowManager.LayoutParams();
param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
final View view=findViewById(R.id.my_floating_view);
final ViewGroup parent=(ViewGroup)view.getParent();
if(parent!=null)
parent.removeView(view);
param.format=PixelFormat.RGBA_8888;
param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
param.gravity=Gravity.TOP|Gravity.LEFT;
param.width=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().width;
param.height=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().height;
final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wmgr.addView(view,param);
// TODO handle overlapping title bar and/or action bar
// TODO you must add logic to remove the view
// TODO you must use a special permission to use this method :android.permission.SYSTEM_ALERT_WINDOW
// TODO if you wish to let the view stay when leaving the app, make sure you have a foreground service running.
而且,即使在ICS中,该视图是否也能正常工作? – 2012-04-22 11:04:10
当然。我甚至在一个月前就测试过它。这并不是说它被弃用或任何东西。一定要处理我写过的特殊情况。注意我写的一些东西是可选的(比如“param.format”部分,这使得背景变得透明)。随时与他们玩。关于模糊的效果,我并不熟悉,但肯定你可以搜索如何做到这一点。 – 2012-04-22 11:27:20
非常感谢你!它完美的工作! – 2012-04-22 11:30:35
我作为Tooleap SDK的开发人员之一,我们也处理了这个问题。 基本上,您不需要使用SYSTEM_ALERT_WINDOW
在另一个之上显示活动。您只需显示带有透明背景的常规“缩小”活动。
做一个“收缩活动,改变高度和宽度的活动窗口布局PARAMS:
WindowManager.LayoutParams params = getWindow().getAttributes();
params.x = ...;
params.y = ...;
params.width = ...;
params.height = ...;
this.getWindow().setAttributes(params);
要透明背景添加到您的活动定义清单文件:
android:theme="@android:style/Theme.Translucent"
这样,您可以创建一个浮动活动的幻想:
请注意,只有前台活动将被恢复,而后台的活动将被暂停SED。但对于大多数应用程序,这不应该是一个问题。
现在剩下的就是何时启动浮动活动。
以下是使用常规活动的“浮动”计算器应用程序示例。请注意,计算器下方的活动属于其他应用。
但是这意味着你所做的只是将活动放在另一个应用程序的活动之上,所以如果你点击后退按钮,它会影响你的活动,而不是后面的活动。为了使一些真正漂浮的东西无法处理后面应该处理的内容,这种方法将无法工作...... – 2014-12-10 08:54:41
这一切都取决于您尝试实现的用户体验种类。 如果你想显示一个小的浮动按钮,不会干扰它下面的活动,那么是的,这不会是一个好的解决方案。 但是,如果您想要在继续他的工作(如对话框)之前显示用户需要注意的小屏幕,那么一个小型活动可能是一个很好的解决方案。 – Danny 2014-12-10 10:16:31
嗯......现在我已经重新阅读了这个问题,目前还不清楚究竟需要什么行为。所以你是对的。 – 2014-12-10 12:06:38
让你找到了解决办法。如果是,请帮助我。 – rup35h 2015-09-03 10:25:54