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


237

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

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

Android全屏编辑视图

编辑添加:输入将进入的视图不是一个视图TextViewView具有自定义InputConnection实现),因此android:imeOptions="flagNoExtractUi"在这里不起作用。


让我们尝试看看。这是对你有好处。[查找到这一个] [1] [1]:stackoverflow.com/questions/8648401/...
sonida

我有一个类似的问题:(你可能有什么想法?stackoverflow.com/questions/36914290/...
railwanderer

2
如何在整个应用程序中应用此属性。我们不会在xml中的每个edittext中添加属性值。
Vikas Pandey

2
以下许多答案建议使用flagNoExtractUiIME_FLAG_NO_EXTRACT_UI。但是,在与IME_FLAG_NO_EXTRACT_UI相对应的的文档中,该文档flagNoExtractUi指出“不鼓励使用此标志,将来可能会不推荐使用此标志”,因此flagNoFullscreen建议使用该选项。
ThomasW

Answers:


178

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

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

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

215
只需将其放在xml文件中android:imeOptions =“ flagNoExtractUi”

1
jnic,您在软键盘代码中的哪个位置进行了覆盖?SoftKeyboard.java?我尝试了相同的覆盖,并且出错了。

14
您可能希望将标志添加到选项中,而不是像这样覆盖传递的任何选项:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
ObsidianX 2012年

2
@ user726518如何在操作栏中的搜索框项上应用此属性?
Menna-Allah Sami 2014年

1
使用自定义视图处理键盘时,唯一的方法起作用。谢谢!
赫尔曼

109

为此,请导航至活动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


64

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


1
该答案太短,不符合SO质量标准。请改进它并添加一些其他说明,以便它不仅对OP有用,而且对社区有用。
洛伦佐·多纳蒂

31
@LorenzoDonati这正是您要做的事情……这是一个非常简单的答案,因为解决方案非常简单,并且与上述答案只是一种不同的处理方式。另外,除非IMO不回答问题,否则答案不能太短。
Michael Yaworski

1
抱歉,但这不是SO社区对此的看法。答案不应该局限于解决OP的问题,而应该是一个很好的答案。例如,请参见thisthis
洛伦佐·多纳蒂

22
@LorenzoDonati这是一个非常具体的问题,只有一个最终结果(但是有多种解决方法)。我的答案是此页面上其他答案的补充。此页面上的所有答案仅限于“ OP的问题”,因为这是唯一可以写出的答案。就像我说的那样,它很具体而且很简单。
Michael Yaworski

2
终于,我找到了答案。非常感谢@mike yaworski
Drx

53

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

37

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


1
更好和更好的方法来编写xml。为我工作。谢谢
Ahesanali Suthar's

1
请注意,在与IME_FLAG_NO_EXTRACT_UI相对应的的文档中,该文档flagNoExtractUi指出“不鼓励使用此标志,将来可能会不推荐使用此标志”,因此flagNoFullscreen建议使用该选项。
ThomasW

12

另外,如果要以编程方式组合多个imeOptions,则可以使用|。句法。

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

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

9

如果直接修改IME,则可以通过重写来防止它显示ExtractedView onUpdateExtractingVisibility

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

6

我知道有些晚了,但是对于仍然有兴趣的人,这是我的解决方案:就我而言,我有一个横向活动,在其顶部包含一个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"  />

干杯!



2

您可以使用 :

android:imeOptions="flagNoFullscreen" 

在您的edittext中


1
这是答案吗?
artgb

我尝试一下,它对我有用!(我的设备是android 4.1.2)
Thientvse

0

您可以呼叫隐藏软键盘并从searchview清除焦点。

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

super.clearFocus();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.