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

时间:2010-12-02 15:42:10

标签: android android-softkeyboard android-input-method

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

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

Android fullscreen editing view

已编辑添加:输入的视图不是TextView(具有自定义View实现的InputConnection),因此{ {1}}在这里不起作用。

11 个答案:

答案 0 :(得分:161)

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

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

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

答案 1 :(得分:93)

要做到这一点,只需导航到活动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

答案 2 :(得分:61)

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

答案 3 :(得分:50)

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

答案 4 :(得分:37)

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

答案 5 :(得分:11)

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

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

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

答案 6 :(得分:9)

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

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

答案 7 :(得分:5)

我知道这有点晚了但是对于仍然感兴趣的人来说,这是我的解决方案: 在我的情况下,我在其顶部有一个包含 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"  />

干杯!

答案 8 :(得分:2)

您可以使用:

android:imeOptions="flagNoFullscreen" 
中的

答案 9 :(得分:2)

我的解决方案:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

答案 10 :(得分:0)

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

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

super.clearFocus();