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

jni*_*nic 224 android android-softkeyboard android-input-method

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

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

Android全屏编辑视图

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

jni*_*nic 165

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

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

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}
Run Code Online (Sandbox Code Playgroud)

  • 只需简单地输入你的xml文件android:imeOptions ="flagNoExtractUi" (205认同)
  • 您可能希望将标志添加到选项中,而不是覆盖传递的选项,如下所示:`outAttrs.imeOptions | = EditorInfo.IME_FLAG_NO_EXTRACT_UI;` (12认同)
  • @ user726518如何在操作栏中的搜索框项目上应用此属性? (2认同)

pba*_*ski 99

为此,只需导航到活动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>
Run Code Online (Sandbox Code Playgroud)

如果您想为键盘提供更多自定义选项,请参阅http://developer.android.com/guide/topics/ui/controls/text.html

  • 仅供参考 `EditorInfo.IME_FLAG_NO_EXTRACT_UI` 建议使用 `IME_FLAG_NO_FULLSCREEN` 代替。 (3认同)

Mic*_*ski 63

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

  • @LorenzoDonati这正是你要做的......这是一个非常简单的答案,因为解决方案非常简单,而且这只是一种不同于上述答案的方式.此外,答案不能"太短",除非他们不回答问题,IMO. (31认同)
  • @LorenzoDonati这是一个*非常*特定的问题,只有一个最终结果(但有多种方法可以解决它).我的回答是对此页面上其他答案的补充.**本页面上所有**的答案仅限于"OP的问题",因为这是唯一可以写出的答案.就像我说的那样,它具体而简单. (22认同)
  • 最后,我找到了答案.非常感谢@mike yaworski (2认同)

Abd*_*bdo 50

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Run Code Online (Sandbox Code Playgroud)


rid*_*doy 37

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

  • 请注意,在对应于 `flagNoExtractUi` 的 [`IME_FLAG_NO_EXTRACT_UI`](https://developer.android.com/reference/android/view/inputmethod/EditorInfo#IME_FLAG_NO_EXTRACT_UI) 的文档中,它指出“使用此标志是不鼓励,将来可能会被弃用”,因此`flagNoFullscreen` 是推荐选项。 (3认同)

Max*_*lin 11

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

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

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Run Code Online (Sandbox Code Playgroud)


Obs*_*anX 9

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

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}
Run Code Online (Sandbox Code Playgroud)


das*_*tan 8

我的解决方案:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"
Run Code Online (Sandbox Code Playgroud)


小智 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"  />
Run Code Online (Sandbox Code Playgroud)

干杯!