使应用程序运行在其他应用程序上方

问题描述:

我想进行一项可在任何应用程序上方打开的活动。使应用程序运行在其他应用程序上方

通常情况下,即使在活动设置为对话框,当您切换到我的应用程序,你看我的应用程序,并在后台看到启动:

,但我想要的应用程序将上面去任何像这样的应用程序:(在Photoshop制作):

我没有看到这个问题Creating a system overlay window (always on top),但在ICS没有functionallity布局。 此外,我想给我的应用程序的对话框,而不会最小化其他应用程序...

+0

让你找到了解决办法。如果是,请帮助我。 – rup35h 2015-09-03 10:25:54

有很多的应用程序,显示一切浮动视图顶上的一切,如: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. 
+0

而且,即使在ICS中,该视图是否也能正常工作? – 2012-04-22 11:04:10

+0

当然。我甚至在一个月前就测试过它。这并不是说它被弃用或任何东西。一定要处理我写过的特殊情况。注意我写的一些东西是可选的(比如“param.format”部分,这使得背景变得透明)。随时与他们玩。关于模糊的效果,我并不熟悉,但肯定你可以搜索如何做到这一点。 – 2012-04-22 11:27:20

+0

非常感谢你!它完美的工作! – 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。但对于大多数应用程序,这不应该是一个问题。

现在剩下的就是何时启动浮动活动。

以下是使用常规活动的“浮动”计算器应用程序示例。请注意,计算器下方的活动属于其他应用。

Tooleap Calculator Screenshot

+0

但是这意味着你所做的只是将活动放在另一个应用程序的活动之上,所以如果你点击后退按钮,它会影响你的活动,而不是后面的活动。为了使一些真正漂浮的东西无法处理后面应该处理的内容,这种方法将无法工作...... – 2014-12-10 08:54:41

+1

这一切都取决于您尝试实现的用户体验种类。 如果你想显示一个小的浮动按钮,不会干扰它下面的活动,那么是的,这不会是一个好的解决方案。 但是,如果您想要在继续​​他的工作(如对话框)之前显示用户需要注意的小屏幕,那么一个小型活动可能是一个很好的解决方案。 – Danny 2014-12-10 10:16:31

+1

嗯......现在我已经重新阅读了这个问题,目前还不清楚究竟需要什么行为。所以你是对的。 – 2014-12-10 12:06:38