1. 跳转到新的页面自动软键盘显示情况:
在配置清单文件AndroidManifest.xml文件,对Activity的windowSoftInputMode属性进行设置。
- stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
- stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
- stateHidden:用户选择activity时,软键盘总是被隐藏
- stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
- stateVisible:软键盘通常是可见的
- stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
- adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
- adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
- adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
一般情况下,软键盘的弹出都需要依托EditText获取焦点。根据输入控件可以控制软键盘的弹出和收缩。
public static void showSoftInput(final View view) { view.postDelayed(() -> { view.setFocusable(true); view.setFocusableInTouchMode(true); view.requestFocus(); InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if(imm != null) imm.showSoftInput(view, 0); }, 200); } public static boolean hideSoftInput(View view) { InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); return imm != null && imm.hideSoftInputFromWindow(view.getWindowToken(), 0); }
2. 键盘上的搜索,回车,确定,GO之类的设置。在EditText类型设置imeOptions属性:
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:imeOptions="actionDone|actionGo|actionNext|actionPrevious|actionNone|actionSearch|actionSend"/>
或在代码中设置:
editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
3. 判断是否点击了软键盘的回车,搜索之类的按钮,可以添加为输入控件添加TextView.OnEditorActionListener监听,判断点击IME_ACTION类型,返回false则是默认系统处理,返回true则自行处理。
editText.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_DONE){ //TODO return true; } return false; });