Android Galaxy Nexus';在横向一致的情况下编辑文本而不是全屏

Android Galaxy Nexus';在横向一致的情况下编辑文本而不是全屏,android,android-4.0-ice-cream-sandwich,android-softkeyboard,Android,Android 4.0 Ice Cream Sandwich,Android Softkeyboard,在我的应用程序中,我有一个搜索按钮,单击该按钮将使EditText小部件可见,将焦点放在其中,并显示键盘。当我这样做时,我称之为代码: queryTextView.requestFocus(); InputMethodManager imm = Utilities.getInputMethodManagerFromContext(getContext()); imm.showSoftInput(queryTextView, InputMethodManager.SHOW_FORC

在我的应用程序中,我有一个搜索按钮,单击该按钮将使EditText小部件可见,将焦点放在其中,并显示键盘。当我这样做时,我称之为代码:

queryTextView.requestFocus();
    InputMethodManager imm = Utilities.getInputMethodManagerFromContext(getContext());
    imm.showSoftInput(queryTextView, InputMethodManager.SHOW_FORCED);
InputMethodManager imm = Utilities.getInputMethodManagerFromContext(getContext());      
    imm.hideSoftInputFromWindow(getWindowToken(), 0);
这是我第一次在景观中看到我所期望的:

一旦我输入文本并点击搜索,我将隐藏我的编辑文本并强制关闭键盘。我使用以下代码执行此操作:

queryTextView.requestFocus();
    InputMethodManager imm = Utilities.getInputMethodManagerFromContext(getContext());
    imm.showSoftInput(queryTextView, InputMethodManager.SHOW_FORCED);
InputMethodManager imm = Utilities.getInputMethodManagerFromContext(getContext());      
    imm.hideSoftInputFromWindow(getWindowToken(), 0);
如果我再次按下按钮以使EdidText可见并再次显示键盘,我的屏幕将如下所示(仅当使用stock Galaxy Nexus键盘时):


使用另一个键盘,例如SwiftKey,我不了解这种行为。我可以寻找什么样的东西来找出为什么这个软键盘没有完全填满屏幕?

编辑:再想想,从你的屏幕截图上看,键盘似乎试图占据整个屏幕,所以OneEvaluationalScreenMode应该返回true…也许问题出在
onCreateExtractTextView


这不是你想要的,但是如果其他一切都失败了,也许你可以画出AOSP键盘的源代码,仔细查看,找出是否/为什么会返回,或者根本没有被调用。

编辑:再想想,从你的屏幕截图上看,键盘似乎正试图占据整个屏幕,所以OneEvaluationalScreenMode应该返回true…也许问题出在
onCreateExtractTextView


这并不是你想要的,但是如果其他一切都失败了,也许你可以画出AOSP键盘源代码,仔细查看它,找出是否/为什么会返回,或者根本没有被调用。

使用android:imeOptions=“flagNoFullscreen”来实现该功能。

使用android:imeOptions=“flagNoFullscreen”要实现该功能。

感谢Sam的响应。不幸的是,这两种方法都没有被调用。我在这两个方法中都设置了断点,当我调用键盘时,它们都不会被击中。这是在AOSP源的InputMethodService类中。它是否可以使用另一个实现?我没有在AOSP源代码中找到任何其他匹配项。我想你应该在键盘本身的代码中,而不是它扩展的服务中。我做了一些进一步的挖掘,发现LatinIME.java(我通过查看运行的进程找到了它,com.google.android.inputmethod.latin软件包让我找到了它)是键盘的代码实际存在的地方,而不是android SDK下载的源代码。不幸的是,尽管onStartInputView是一个可以查看的地方,但无法看到我所说的任何覆盖。奇怪的是,实际的键盘代码没有与AOSP打包在一起。我可以通过一个黑客解决方案来解决这个问题,即在decorView中添加一个新的EditText,提供该焦点,调用hideSoftInputFromWindow,然后删除该textView。不过,感谢您的响应,很高兴知道键盘实现的一些内部类名。感谢您的响应Sam。不幸的是,这两个方法都没有被调用。我在这两个方法中都设置了断点,当我调用键盘时,它们都不会被击中。这是在AOSP源的InputMethodService类中。它是否可以使用另一个实现?我没有在AOSP源代码中找到任何其他匹配项。我想你应该在键盘本身的代码中,而不是它扩展的服务中。我做了一些进一步的挖掘,发现LatinIME.java(我通过查看运行的进程找到了它,com.google.android.inputmethod.latin软件包让我找到了它)是键盘的代码实际存在的地方,而不是android SDK下载的源代码。不幸的是,尽管onStartInputView是一个可以查看的地方,但无法看到我所说的任何覆盖。奇怪的是,实际的键盘代码没有与AOSP打包在一起。我可以通过一个黑客解决方案来解决这个问题,即在decorView中添加一个新的EditText,提供该焦点,调用hideSoftInputFromWindow,然后删除该textView。不过,感谢您的回复,很高兴知道键盘实现的一些内部类名。