禁用横向软键盘input的全屏编辑视图?

在使用软键盘的Android设备上,我想防止在横向模式下(即,我只想看到软键盘本身和我的视图)出现全屏键盘编辑视图(如下所示)。

我认为这可以使用InputMethodService上的setExtractViewShown(false)方法来实现,但是我无法访问这个默认实例,也不想实现一个自定义的input方法。

Android fullscreen editing view

编辑添加:input的视图不是TextView (它是一个具有自定义InputConnection实现的View ),所以android:imeOptions="flagNoExtractUi"在这里不起作用。

终于回答了我自己的问题:

提取的用户界面(即全屏编辑模式)可以在input连接的连接点被禁用:

 @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; // etc. } 

要做到这一点,只需导航到活动XML并粘贴android:imeOptions="flagNoExtractUi"在您的代码。 嗯非常简单 – 但它应该粘贴的地方? 看例子activity xml的代码,看看EditText:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:imeOptions="flagNoExtractUi" android:id="@+id/etTextInAct" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> </LinearLayout> 

如果你想要更多的键盘自定义选项,请参阅http://developer.android.com/guide/topics/ui/controls/text.html

将属性android:imeOptions="flagNoExtractUi"XML文件中的每个EditText

上面的答案帮助我找出了dynamic添加EditTexts的解决scheme:

 editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

使用android:imeOptions="flagNoFullscreen"来实现该function。

如果您直接修改IME,则可以通过覆盖onUpdateExtractingVisibility来防止它显示ExtractedView:

 @Override public void onUpdateExtractingVisibility(EditorInfo ei) { ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI; super.onUpdateExtractingVisibility(ei); } 

另外,如果你想结合多个ime选项programaticaly,你可以使用| 句法。

例如,要禁用横屏中的全屏编辑视图并用键盘上的“确定”(ACTION_DONE)replace“下一步”键,可以使用:

 editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

您可以使用 :

 android:imeOptions="flagNoFullscreen" 

在你的编辑文本