2011-09-22 60 views
6

已經有人問過類似的問題,但沒有多少運氣。從服務啓動視圖?

假設我有一個服務,我需要一個視圖來彈出它。同時,它們都應該是棘手的,即用戶應該既能夠在視圖內單擊按鈕,也能夠在後臺單擊服務中的按鈕。

enter image description here

這在理論上是可行的嗎?如果是,我應該如何初始化該視圖?

謝謝!

+1

我不明白:上面顯示服務的看法?服務通常在android中是不可見的(不要有任何UI)。也許你需要某種可定製的吐司功能。嘗試編輯您的文章,並提供更多詳細信息... – pkk

回答

1

服務在後臺運行並且沒有UI。所以你不能在服務上顯示某些內容。

如果您需要服務通知用戶某事,請使用Notification

Ayou可以使用Toast,但我建議不要這樣做,因爲它會混淆用戶,因爲它可以彈出另一個應用的活動。

+0

如何將視圖添加到WindowManager?這不反駁你的第一個陳述嗎? – JacksOnF1re

2

我想你是濫用「服務」一詞。 服務不可見,活動可見。

服務中沒有按鈕!

所以你別無選擇!您應該將兩個視圖放在一個Activity中,然後使用RelativeLayout並將您的孩子的可見性設置爲GONE/Visible。

http://developer.android.com/reference/android/widget/RelativeLayout.html

而且使用彈出式窗口,使得其下的佈局點擊會打擾用戶。您完全改變了用戶體驗。我強烈建議你也讓你的彈出窗口出現在你的初始佈局的頂部/底部

+1

我認爲這是你最好的選擇,如果你絕對必須達到這個效果。讓自己成爲一個包含在活動主佈局中的佈局,這種佈局看起來像是一個彈出式窗口,只需在您希望的時候顯示即可。除此之外,無法使前景和背景按鈕都可點擊。 – FoamyGuy

1

你想要的是一個活動,而不是一個服務和一個對話框,而不是視圖。我建議你閱讀谷歌的這個文件:http://developer.android.com/guide/topics/fundamentals.html

但是要回答你的問題關於兩個互動。這是不可能的。在任何給定的時間1,只有1個活動位於活動堆棧的頂部。用戶只能與該活動進行交互。如果你想要像浮動窗口那樣的東西,那麼你將不得不自己創建它。請記住,這違背了Android設計原則。

5

是的,它是可能的,你需要做的就是調用WindowManager服務並通過相同的添加您的看法。

WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE); 
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
RelativeLayout layout=(RelativeLayout) inflater.inflate(R.layout.box,null); 

你需要一個WindowManager.LayoutParams對象應包含參數佈局

windowManager.addView(layout,params); 

好,加的觀點