在使用软键盘的 Android 设备上,我想防止在横向模式下出现全屏键盘编辑视图(如下所示)(即,我只想看到软键盘本身及其背后的视图)。
我假设这可以使用 InputMethodService
上的 setExtractViewShown(false)
方法来实现,但我无法访问它的默认实例并且不想实现自定义输入法。
https://i.imgur.com/MB623.png
已编辑添加:输入要进入的视图不是 TextView
(它是具有自定义 InputConnection
实现的 View
),因此 android:imeOptions="flagNoExtractUi"
在这里不起作用。
flagNoExtractUi
或 IME_FLAG_NO_EXTRACT_UI
。但是,在对应于 flagNoExtractUi
的 IME_FLAG_NO_EXTRACT_UI
的文档中,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此建议使用 flagNoFullscreen
选项。
我终于回答了我自己的问题:
可以在连接输入连接时禁用提取 UI(即全屏编辑模式):
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;
// etc.
}
为此,导航到活动 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
。
将属性 android:imeOptions="flagNoExtractUi"
添加到 XML
文件中的每个 EditText
。
上面的答案帮助我找出了动态添加的EditTexts的解决方案:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
使用 android:imeOptions="flagNoFullscreen"
来实现该功能。
flagNoExtractUi
的 IME_FLAG_NO_EXTRACT_UI
的文档中,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此建议使用 flagNoFullscreen
。
此外,如果您想以编程方式组合多个 imeOptions,您可以使用 |句法。
例如,为了禁用横向全屏编辑视图并将键盘中的“下一步”键替换为“确定”(ACTION_DONE),您可以使用:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
我的解决方案:
android:imeOptions="flagNoExtractUi|flagNoFullscreen"
如果您直接修改 IME,您可以通过覆盖 onUpdateExtractingVisibility
来阻止它显示 ExtractedView:
@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
super.onUpdateExtractingVisibility(ei);
}
我知道这有点晚了,但对于任何仍然感兴趣的人来说,这是我的解决方案:在我的情况下,我有一个景观 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" />
干杯!
您可以使用 :
android:imeOptions="flagNoFullscreen"
在您的编辑文本中
您可以调用隐藏软键盘并从搜索视图中清除焦点。
public void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
super.clearFocus();
不定期副业成功案例分享
outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;