禁用全屏编辑视图的软键盘输入在景观?

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

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

Android全屏编辑视图

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

99408 次浏览

最后回答了我自己的问题:

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

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {


outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;


// etc.
}

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

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

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

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

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

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

另外,如果希望以编程方式组合多个imeOptions,可以使用|语法。

例如,为了在横屏中禁用全屏编辑视图,并将键盘中的“Next”键替换为“OK”(ACTION_DONE),你可以使用:

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

你可以使用:

android:imeOptions="flagNoFullscreen"

在编辑文本中

我知道这有点晚了,但对于那些仍然感兴趣的人来说,这是我的解决方案: 在我的例子中,我有一个景观活动包含一个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"  />

干杯!

你可以调用隐藏软键盘和清除搜索视图的焦点。

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


super.clearFocus();

我的解决方案:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"