2011-09-01 118 views
0

我正在製作一個鍵盤(InputMethodService),它需要啓動一個對話框。如何讓我的活動透明?

正如我發現的,服務無法啓動對話框。所以我做了一個單獨的活動,這是從服務調用

   Intent dialogIntent = new Intent(getBaseContext(), dialog.class); 
       dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       getApplication().startActivity(dialogIntent); 

並顯示一個對話框。問題是這個活動取代了前一個用戶正在輸入內容的地方。

你認爲什麼是使其「透明」的最佳方式(即不要推開以前的活動),以及該活動與服務對話的最佳方式是什麼,並說對話選項被選中。

謝謝! :)

enter image description here

回答

2

如果這是一個Activity(不是Dialog),你可以在你AndroidManifestactivity部分添加對話框主題:

android:theme="@android:style/Theme.Dialog" 

至於找回用戶什麼按下,您應該使用startActivityForResult(...)

+1

是的,謝謝。 「<活動機器人:名字=」。!。對話框」 android:theme =「@ android:style/Theme.Translucent.NoTitleBar」/>「這個工作在清單中很棒! – Roger

2

您不應該從IME啓動活動。這是IME流程中的一個巨大突破 - 活動隨之而來,執行應用程序切換,從當前應用程序轉移焦點,並斷開與當前編輯器的連接。

也無法從中獲得結果,因爲您只能從活動中使用startActivityForResult()。

要在顯示對話框之前在您的IME顯示一個對話框,只需使用Dialog.getWindow()的setType(WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG

+0

你確定嗎?它給了我」09-01 20:09:28.199:ERROR/AndroidRuntime(12857) :android.view.WindowManager $ BadTokenException:無法添加窗口[email protected] - 拒絕此窗口類型的權限「。如果花費昨天整整一天試圖打敗它沒有成功,所以決定讓它運行 – Roger

+0

哎呀,你說得對,目前只能被系統使用,你可以做的是使用TYPE_AP PLICATION_ATTACHED_DIALOG並將窗口標記(WindowManager.LayoutParams.token)設置爲標記,如果您的IME窗口(使用View.getWindowToken()檢索)。 – hackbod

+0

謝謝。你可以請指定如何設置這個「(WindowManager.LayoutParams.token)作爲標記,如果你的IME窗口(通過View.getWindowToken()檢索)」)? – Roger