关于android:禁用横向软键盘输入的全屏编辑视图?

Disabling the fullscreen editing view for soft keyboard input in landscape?

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

我假设这可以使用InputMethodService上的setExtractViewShown(false)方法实现,但我无法访问此默认实例,也不想实现自定义输入方法。

Android fullscreen editing view

编辑添加:输入的视图不是TextView(它是带有自定义InputConnection实现的View),因此android:imeOptions="flagNoExtractUi"在这里不起作用。


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

可以在连接输入连接的位置禁用提取UI(即全屏编辑模式):

1
2
3
4
5
6
7
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}


为此,请导航到活动xml并在代码中粘贴android:imeOptions="flagNoExtractUi"。但它应该粘贴在哪里?看一下示例活动xml的代码并查看EditText:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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


上面的答案帮助我找出了动态添加的EditTexts的解决方案:

1
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

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


此外,如果你想组合多个imeOptions programaticaly,你可以使用|句法。

例如,为了在横向上禁用全屏编辑视图并在键盘中用"OK"(ACTION_DONE)替换"Next"键,您可以使用:

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


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

1
2
3
4
5
@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}

我知道这有点晚了但对于仍然感兴趣的人来说,这是我的解决方案:
在我的情况下,我有一个包含EditText的横向活动,我需要在此搜索活动中实现自动完成功能,重叠键盘导致用户无法看到RecyclerView结果的问题。
所以我最终在我的布局中使用了这个EditText:

1
2
3
4
5
6
<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

干杯!


我的解决方案

1
android:imeOptions="flagNoExtractUi|flagNoFullscreen"

您可以使用 :

1
android:imeOptions="flagNoFullscreen"

在您的edittext中


您可以调用隐藏软键盘并从搜索视图中清除焦点。

1
2
3
4
5
6
public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();