【发布时间】:2013-02-18 14:52:52
【问题描述】:
我有一个Activity,它是在配置更改时重新创建的(需要)。我有一个DialogFragment,它调用setRetainInstance(true),其布局中有一个EditText。
在DialogFragment的onActivityCreated我调用:
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
A) 如果我打开键盘,那么当我将应用程序置于后台然后将其带到前台时,我希望键盘仍然显示。
B) 如果我关闭键盘(EditText 仍然有焦点并显示所需行为的光标)然后 我希望键盘仍然关闭如果我将应用程序置于后台然后将把它放到前台。
我似乎无法同时实现 A) 和 B)。当我将应用程序带到前台时,键盘总是关闭。我试过 .SOFT_INPUT_STATE_ALWAYS_VISIBLE 但是键盘总是打开的。
在此先感谢您就如何实现这一目标提出任何建议。我也希望在旋转过程中保持这种键盘状态,但我将把它留到另一天。彼得。
编辑 请注意,我确实不想阻止在配置更改时重新创建活动。
我还尝试了WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED,它确实在手机旋转期间保持键盘打开/关闭状态(单窗格布局),但 a) 不适用于双窗格布局 b) 带入时不保持键盘状态应用到前台。
【问题讨论】:
-
在
onCreate方法中使用getDialog()不应该返回null? -
谢谢,改成
onActivityCreated -
我建议看一下
HIDE_IMPLICIT_ONLY、HIDE_NOT_ALWAYS、SHOW_FORCED、SHOW_IMPLICITofInputMethodManagerdeveloper.android.com/reference/android/view/inputmethod/…,并告知此功能在所有设备中的行为可能不同因为某些 ROM(官方/非官方)可能会在切换活动时强制更改键盘。 -
与您的问题无关,但您不应在其中包含视图小部件的片段上使用 setRetainInstance(true)。