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

Android 在横向中禁用软键盘输入的全屏编辑视图?,android,android-softkeyboard,android-input-method,Android,Android Softkeyboard,Android Input Method,在使用软键盘的Android设备上,我想防止在横向模式下出现全屏键盘编辑视图(如下所示)(即,我只想看到软键盘本身及其后面的视图) 我假设这可以通过使用InputMethodService上的setExtractViewShowed(false)方法实现,但我无法访问此方法的默认实例,不希望实现自定义输入方法 编辑添加:输入所指向的视图不是一个文本视图(它是一个带有自定义输入连接实现的视图),因此android:imeOptions=“flagNoExtractUi”在这里不起作用。I最后回答

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

我假设这可以通过使用
InputMethodService
上的
setExtractViewShowed(false)
方法实现,但我无法访问此方法的默认实例,不希望实现自定义输入方法


编辑添加:输入所指向的视图不是一个
文本视图
(它是一个带有自定义
输入连接
实现的
视图),因此
android:imeOptions=“flagNoExtractUi”
在这里不起作用。

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

可以在连接输入连接的点禁用提取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);

为此,请导航到ActivityXML并在代码中粘贴
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>
      


如果您想为键盘提供更多自定义选项,请参见

如果您直接修改IME,您可以通过覆盖以下内容防止其显示ExtractedView:


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

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

此外,如果要以编程方式组合多个imeOptions,可以使用|语法

例如,要在横向视图中禁用全屏编辑视图,并在键盘中将“下一步”键替换为“确定”(操作完成),您可以使用:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
您可以使用:

android:imeOptions="flagNoFullscreen" 

在您的编辑文本中

我知道有点晚了,但对于仍感兴趣的人,我的解决方案如下: 在我的例子中,我有一个横向活动,上面包含一个编辑文本,我需要在这个搜索活动中实现自动完成功能,重叠的键盘导致用户无法看到回收视图的结果。 因此,我在布局中使用了这个EditText

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />


干杯

您可以调用以隐藏软键盘并从searchview中清除焦点

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"


只需将您的xml文件放入android:imeOptions=“flagNoExtractUi”jnic,您在软键盘代码中的何处进行了覆盖?SoftKeyboard.java?我尝试了相同的覆盖,但出现了错误。您可能希望将标志添加到选项中,而不是像这样覆盖传入的任何选项:
outAttrs.imeOptions |=EditorInfo.IME_标志_NO_EXTRACT_UI
@user726518如何在操作栏中的searchbox项上应用此属性?使用自定义视图处理键盘时唯一有效的方法。谢谢让我们试试看。这对你有好处。[看这张][1][1]:我有一个类似的问题:(您可能知道如何在整个应用程序中应用此功能。我们不会在xml格式的每个edittext中添加属性值。下面的许多答案建议使用
flagNoExtractUi
IME\u FLAG\u NO\u EXTRACT\u UI
。但是,在对应于
flagNoExtractUi
的文档中,它指出t“不鼓励使用此标志,将来可能会弃用”,因此建议您选择
flagNoFullscreen
。此答案太短,不符合so质量标准。请通过添加一些额外的解释对其进行改进,以使其对社区有用,而不仅仅是对OP有用。@LorenzoDonati这正是您必须做的事情……这是一个非常简单的答案,因为解决方案非常简单非常简单,只是与上面的答案不同。而且,答案不能“太短”除非他们不回答这个问题,IMO。抱歉,但这不是SO社区的想法。答案不应该局限于解决OP的问题,一般来说应该是很好的答案。例如,请参阅和。@LorenzoDonati这是一个非常具体的问题,只有一个最终结果(但有多种解决方法)。我的答案是本页其他答案的补充。本页所有答案仅限于“OP问题”因为这是唯一可以写的答案。就像我说的,它是具体而简单的。最后,我找到了答案。非常感谢@mike yaworskinice和更好的xml编写方法。对我很有用。感谢特别是在的文档中,对应于
flagNoExtractUi
,它指出“不鼓励使用此标志,将来可能会被弃用”,因此建议选择
flagNoFullscreen
。这是一个答案吗?我尝试了一下,它对我有用!(我的设备是android 4.1.2)这是最新的答案。仅供参考。
EditorInfo.IME\u FLAG\u NO\u EXTRACT\u UI
建议改用
IME\u FLAG\u NO\u全屏
android:imeOptions="flagNoExtractUi|flagNoFullscreen"