2011-09-01 144 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