如何让我的活动透明化?

时间:2011-09-01 16:17:20

标签: java android

我正在制作一个键盘(InputMethodService),需要启动一个对话框。

正如我发现的那样,服务无法启动对话框。所以我做了一个单独的活动,通过

从服务中调用
                Intent dialogIntent = new Intent(getBaseContext(), dialog.class);
                dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                getApplication().startActivity(dialogIntent);

并显示一个对话框。问题是这个活动取代了之前用户输入内容的活动。

您认为什么是使其“透明”(即不要推开以前的活动)的最佳方式,以及此活动与服务对话的最佳方式是什么,说对话选项被选中了。

谢谢! :)

enter image description here

3 个答案:

答案 0 :(得分:2)

如果这是Activity(不是Dialog),您可以在activity的{​​{1}}部分添加对话框主题:

AndroidManifest

至于取回用户按下的内容,您应该使用startActivityForResult(...)

答案 1 :(得分:2)

您不应该从IME启动活动。这是IME流程中的一个巨大突破 - 活动出现并从当前应用程序切换应用程序,从中获取焦点,并断开与当前编辑器的连接。

此外,无法从中获取结果,因为您只能使用活动中的startActivityForResult()。

要在IME中显示对话框,只需在显示对话框之前使用Dialog.getWindow()。setType(WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG。

答案 2 :(得分:0)

要用代码恢复所说的内容,让我为需要测试解决方案的人员分享一些代码:

// 1. CREATE THE DIALOG
val builder: AlertDialog.Builder = AlertDialog.Builder(this, R.style.Theme_AppCompat_Light)
builder.setTitle("Title").setMessage("This is the message for the user. ")
val mDialog = builder.create()

// 2. SET THE IME WINDOW TOKEN ATTRIBUTE WITH THE TOKEN OF THE KEYBOARD VIEW 
mDialog.window?.attributes?.token = this.mKeyboardView.windowToken

// 3. SET THE TYPE OF THE DIALOG TO TYPE_APPLICATION_ATTACHED_DIALOG
mDialog.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG)

// 4. SHOW THE DIALOG 
mDialog.show()