2012-04-22 175 views
8

我想進行一項可在任何應用程序上方打開的活動。使應用程序運行在其他應用程序上方

通常情況下,即使在活動設置爲對話框,當您切換到我的應用程序,你看我的應用程序,並在後臺看到啓動:

,但我想要的應用程序將上面去任何像這樣的應用程序:(在Photoshop製作):

我沒有看到這個問題Creating a system overlay window (always on top),但在ICS沒有functionallity佈局。 此外,我想給我的應用程序的對話框,而不會最小化其他應用程序...

+0

讓你找到了解決辦法。如果是,請幫助我。 – rup35h 2015-09-03 10:25:54

回答

21

有很多的應用程序,顯示一切浮動視圖頂上的一切,如: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

10

我作爲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

相關問題