Disabling the fullscreen editing view for soft keyboard input in landscape?
在使用软键盘的Android设备上,我想防止在横向模式下出现全屏键盘编辑视图(如下所示)(即我只想看到软键盘本身和我后面的视图)。
我假设这可以使用
编辑添加:输入的视图不是
我终于回答了我自己的问题:
可以在连接输入连接的位置禁用提取UI(即全屏编辑模式):
1 2 3 4 5 6 7 | @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; // etc. } |
为此,请导航到活动xml并在代码中粘贴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?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
将属性
上面的答案帮助我找出了动态添加的EditTexts的解决方案:
1 | editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); |
使用
此外,如果你想组合多个imeOptions programaticaly,你可以使用|句法。
例如,为了在横向上禁用全屏编辑视图并在键盘中用"OK"(ACTION_DONE)替换"Next"键,您可以使用:
1 | editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI); |
如果您直接修改IME,可以通过覆盖
1 2 3 4 5 | @Override public void onUpdateExtractingVisibility(EditorInfo ei) { ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI; super.onUpdateExtractingVisibility(ei); } |
我知道这有点晚了但对于仍然感兴趣的人来说,这是我的解决方案:
在我的情况下,我有一个包含EditText的横向活动,我需要在此搜索活动中实现自动完成功能,重叠键盘导致用户无法看到RecyclerView结果的问题。
所以我最终在我的布局中使用了这个EditText:
1 2 3 4 5 6 | <EditText android:layout_width="match_parent" android:layout_height="?actionBarSize" android:id="@+id/main_search_et" android:imeOptions="actionSearch|flagNoExtractUi" android:inputType="text" /> |
干杯!
我的解决方案
1 | android:imeOptions="flagNoExtractUi|flagNoFullscreen" |
您可以使用 :
1 | android:imeOptions="flagNoFullscreen" |
在您的edittext中
您可以调用隐藏软键盘并从搜索视图中清除焦点。
1 2 3 4 5 6 | public void hideKeyboard(View view) { InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } super.clearFocus(); |