261

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

我假设这可以使用setExtractViewShown(false)on 方法来实现InputMethodService,但是我无法访问 this 的默认实例并且不想实现自定义输入法。

Android全屏编辑视图

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

4

11 回答 11

185

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

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

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}
于 2011-01-18T16:47:21.633 回答
123

为此,导航到活动 xml 并粘贴android:imeOptions="flagNoExtractUi"到您的代码中。但是应该粘贴在哪里呢?查看示例活动 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

于 2012-11-01T15:03:39.543 回答
67

将属性添加到文件中的android:imeOptions="flagNoExtractUi"每个。EditTextXML

于 2013-11-03T21:46:22.670 回答
54

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
于 2012-10-18T11:40:24.400 回答
41

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

于 2014-04-25T17:28:24.320 回答
13

此外,如果您想以编程方式组合多个 imeOptions,您可以使用 | 句法。

例如,为了禁用横向全屏编辑视图并将键盘中的“下一步”键替换为“确定”(ACTION_DONE),您可以使用:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
于 2016-03-08T09:15:49.547 回答
9

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

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}
于 2012-12-04T00:30:13.427 回答
9

我的解决方案:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"
于 2018-09-17T14:42:31.587 回答
6

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

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

干杯!

于 2017-12-16T15:16:59.013 回答
2

您可以使用 :

android:imeOptions="flagNoFullscreen" 

在您的编辑文本中

于 2017-09-27T02:54:48.300 回答
0

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

public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();
于 2018-06-10T12:03:06.940 回答