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

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

编辑添加:视图输入将不是一个TextView(它是一个自定义InputConnection实现的视图),所以android:imeOptions="flagNoExtractUi"将不会在这里工作。


当前回答

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

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

其他回答

我知道这有点晚了,但对于那些仍然感兴趣的人来说,这是我的解决方案: 在我的情况下,我有一个景观活动包含一个EditText在它的顶部,我需要在这个搜索活动中实现自动完成功能,其中重叠的键盘导致了一个问题,用户无法看到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"  />

干杯!

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

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

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

要做到这一点,请导航到activity 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

在XML文件中的每个EditText中添加属性android:imeOptions="flagNoExtractUi"。