禁用横向软键盘输入的全屏编辑视图?
Posted
技术标签:
【中文标题】禁用横向软键盘输入的全屏编辑视图?【英文标题】:Disabling the fullscreen editing view for soft keyboard input in landscape? 【发布时间】:2011-05-19 05:11:34 【问题描述】:在使用软键盘的 android 设备上,我想防止在横向模式下出现全屏键盘编辑视图(如下所示)(即我只想看到软键盘本身和我在它后面的视图)。
我认为这可以使用InputMethodService
上的setExtractViewShown(false)
方法来实现,但我无法访问它的默认实例并且不想实现自定义输入法。
编辑添加:输入的视图不是TextView
(它是带有自定义InputConnection
实现的View
),所以android:imeOptions="flagNoExtractUi"
不起作用在这里。
【问题讨论】:
让我们试试看。这是对你有好处。 [看这个][1][1]:***.com/questions/8648401/… 我也有类似的问题 :(你可能有什么想法?***.com/questions/36914290/… 如何在整个应用程序中应用它。我们不会在 xml 中的每个编辑文本中添加属性值。 以下许多答案建议使用flagNoExtractUi
或IME_FLAG_NO_EXTRACT_UI
。但是,在对应于flagNoExtractUi
的IME_FLAG_NO_EXTRACT_UI
的文档中,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此推荐使用flagNoFullscreen
。
【参考方案1】:
我终于回答了我自己的问题:
可以在连接输入连接时禁用提取 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 如何在操作栏中的搜索框项上应用此属性?
使用自定义视图处理键盘时唯一有效的方法。谢谢!【参考方案2】:
为此,导航到活动 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_
android:layout_
android:orientation="vertical"
>
<EditText
android:imeOptions="flagNoExtractUi"
android:id="@+id/etTextInAct"
android:layout_
android:layout_
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
。【参考方案3】:
将属性android:imeOptions="flagNoExtractUi"
添加到XML
文件中的每个EditText
。
【讨论】:
此答案太短,不符合 SO 质量标准。请改进它添加一些额外的解释,以便它对社区有用,而不仅仅是对 OP。 @LorenzoDonati 这正是你必须做的......这是一个非常简单的答案,因为解决方案非常简单,而且它只是一种与上述答案不同的方法。此外,答案不能“太短”,除非他们不回答问题,IMO。 对不起,但这不是 SO 社区的想法。答案不应仅限于解决 OP 的问题,它们通常应该是很好的答案。例如,请参阅 this 和 this。 @LorenzoDonati 这是一个非常的具体问题,只有一个最终结果(但有多种解决方法)。我的答案是对本页其他答案的补充。此页面上的所有答案仅限于“OP 的问题”,因为这是唯一可以写出的答案。就像我说的,它既具体又简单。 终于,我找到了答案。非常感谢@mike yaworski【参考方案4】:上面的答案帮我弄清楚了动态添加EditTexts的解决方案:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
【讨论】:
【参考方案5】:使用android:imeOptions="flagNoFullscreen"
来实现该功能。
【讨论】:
用 xml 编写更好的方法。为我工作。谢谢 请注意,在IME_FLAG_NO_EXTRACT_UI
的文档中,它对应于flagNoExtractUi
,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此flagNoFullscreen
是推荐选项。【参考方案6】:
另外,如果你想以编程方式组合多个 imeOptions,你可以使用 |语法。
例如,为了禁用横向全屏编辑视图并将键盘中的“下一步”键替换为“确定”(ACTION_DONE),您可以使用:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
【讨论】:
【参考方案7】:如果您直接修改 IME,您可以通过覆盖 onUpdateExtractingVisibility
来阻止它显示 ExtractedView:
@Override
public void onUpdateExtractingVisibility(EditorInfo ei)
ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
super.onUpdateExtractingVisibility(ei);
【讨论】:
【参考方案8】:我的解决方案:
android:imeOptions="flagNoExtractUi|flagNoFullscreen"
【讨论】:
这是一个更新的答案。【参考方案9】:我知道这有点晚了,但对于仍然感兴趣的人来说,这是我的解决方案: 就我而言,我有一个景观 Activity,顶部包含一个 EditText,我需要在此搜索 Activity 中实现自动完成功能,重叠的键盘导致用户无法看到 RecyclerView 的结果。 所以我最终在我的布局中有这个 EditText:
<EditText
android:layout_
android:layout_
android:id="@+id/main_search_et"
android:imeOptions="actionSearch|flagNoExtractUi"
android:inputType="text" />
干杯!
【讨论】:
【参考方案10】:你可以使用:
android:imeOptions="flagNoFullscreen"
在您的编辑文本中
【讨论】:
这是答案吗? 我试了一下,它对我有用! (我的设备是安卓4.1.2)【参考方案11】:您可以调用隐藏软键盘并从搜索视图中清除焦点。
public void hideKeyboard(View view)
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
super.clearFocus();
【讨论】:
以上是关于禁用横向软键盘输入的全屏编辑视图?的主要内容,如果未能解决你的问题,请参考以下文章
android的webview下,如果设置了全屏,输入框获得焦点时,软键盘会盖住输入框,怎么破?