由于对话框中的焦点更改,当系统显示/隐藏软键盘时,是否重新启动了对话框的主机活动?
我的应用程序是Fragment-Driven。我有很多片段。我的一个片段触发了一个打开对话框的动作。在该对话框中,有输入字段,当我点击该输入字段时,主机片段上的UI的所有状态(实际上所有片段,因此必须影响主要活动)被重置。在我的活动中,我已经说过了。
android:configChanges="keyboardHidden|orientation|screenSize"
所以,正确的说,即使在Activity上显示软键盘,它也不应该重新启动。
我认为我不需要输入任何代码,因为它完全基于软键盘上Android控件显示/隐藏的逻辑。
编辑:我的问题不是如何隐藏软键盘。我的问题是当软键盘出现时如何处理LifeCycle重启。
答案 0 :(得分:1)
实际问题是,在我的基础活动中,我有ListView。因此,当软键盘出现时,系统会检查来自主机活动的视图并尝试PAN那些ListView。
因此,调用了ListView的适配器的getView(..),并且UI状态表明ListView中的项目已刷新。
如果你输入了
,当软键盘出现时,活动或片段没有重新启动android:configChanges="keyboardHidden|orientation|screenSize"
在您的活动或应用程序中。
暂时,我通过
解决了这个问题getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
在我的主持人活动中。当软键盘出现时,它不会调整活动的UI大小/平移。但是,对我来说没问题。我的所有UI内部活动或片段都没有请求来自用户的任何输入。所有输入都使用单独的Dialog UI进行请求。
以上代码不会影响Dialog上的resize / pan。但是,如果你想确定,请把它放在你的Dialog子类中。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
我不确定这是否是可取的方式。但是,它适合我的情况,因为这是我的问题,我觉得我有义务在找到解决方案时回答这个问题。
答案 1 :(得分:0)
请使用此方法隐藏您的软键盘。从onactivity结果中调用此方法。
public static void hideSoftKeyboard(Activity context) {
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputManager != null)
inputManager.hideSoftInputFromWindow(context.getWindow().getDecorView().getApplicationWindowToken(), 0);
context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}