ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

https://i.imgur.com/MB623.png

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

让我们试试看。这是对你有好处。 [看这个][1] [1]:stackoverflow.com/questions/8648401/…
我有一个类似的问题:(你可能有什么想法?stackoverflow.com/questions/36914290/…
如何在整个应用程序中应用它。我们不会在 xml 中的每个编辑文本中添加属性值。
以下许多答案都建议使用 flagNoExtractUiIME_FLAG_NO_EXTRACT_UI。但是,在对应于 flagNoExtractUiIME_FLAG_NO_EXTRACT_UI 的文档中,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此建议使用 flagNoFullscreen 选项。

j
jnic

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

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

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

只需简单地放入您的 xml 文件 android:imeOptions="flagNoExtractUi"
jnic,您在软键盘代码中的哪个位置进行了覆盖?软键盘.java?我尝试了相同的覆盖并出错了。
您可能希望将标志添加到选项中,而不是像这样覆盖传入的任何选项:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
@user726518 如何在操作栏中的搜索框项上应用此属性?
使用自定义视图处理键盘时唯一有效的方法。谢谢!
M
Marcin Orlowski

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


仅供参考 EditorInfo.IME_FLAG_NO_EXTRACT_UI 建议改用 IME_FLAG_NO_FULLSCREEN
M
Michael Yaworski

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


这个答案太短了,不符合 SO 质量标准。请改进它添加一些额外的解释,以便它对社区有用,而不仅仅是对 OP。
@LorenzoDonati 这正是您必须要做的……这是一个非常简单的答案,因为解决方案非常简单,而且与上述答案的方法不同。此外,答案不能“太短”,除非他们不回答问题,IMO。
抱歉,但这不是 SO 社区的想法。答案不应仅限于解决 OP 的问题,它们通常应该是很好的答案。例如,参见 thisthis
@LorenzoDonati 这是一个非常具体的问题,只有一个最终结果(但有多种解决方法)。我的答案是对本页其他答案的补充。此页面上的所有答案都仅限于“OP 的问题”,因为这是唯一可以写出的答案。就像我说的,它具体而简单。
最后,我找到了答案。非常感谢@mike yaworski
A
Abdo

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

r
ridoy

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


用 xml 编写的更好更好的方法。为我工作。谢谢
请注意,在对应于 flagNoExtractUiIME_FLAG_NO_EXTRACT_UI 的文档中,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此建议使用 flagNoFullscreen
M
Maxime Ancelin

此外,如果您想以编程方式组合多个 imeOptions,您可以使用 |句法。

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

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

P
Pang

我的解决方案:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

这是一个更新的答案。
S
Suragch

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

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

A
Arefeh Iravanchi

我知道这有点晚了,但对于任何仍然感兴趣的人来说,这是我的解决方案:在我的情况下,我有一个景观 Activity,其中包含一个 EditText,我需要在这个搜索 Activity 中实现自动完成功能,其中重叠键盘导致用户看不到 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"  />

干杯!


T
Thientvse

您可以使用 :

android:imeOptions="flagNoFullscreen" 

在您的编辑文本中


这是一个答案吗?
我试了一下,它对我有用! (我的设备是安卓4.1.2)
E
Eduard Malakhov

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

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

super.clearFocus();

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅