一、第一种方法,进入带有输入框的页面, 让输入框自动显示软键盘
//输入框,获取焦点 不然无法弹出键盘 et_english.requestFocus(); //键盘输入法管理器 InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(et_english, 0);
二、第二种设置方法
首先在AndroidManifest.xml中找到输入框,对应的Activity类
设置android:windowSoftInputMode
属性
<activity android:name=".InputMethodActivity" android:windowSoftInputMode="stateVisible" />
之后在InputMethodActivity类中给输入框EditText设置获取焦点
//请求焦点 editText.requestFocus();
三、退出这个页面后,如果不做处理的话,软键盘还在,所以需要在对应的界面对软键盘做隐藏处理,我这里是在Fragment的onResume()方法中,隐藏软键盘,就是每次进入该页面时,键盘还在就隐藏键盘。
InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
备注:这里的requireActivity
是获取Fragment中的上下文对象,在Activity里面写的话自然使用this
注意
: 软键盘弹出后,默认会自动压缩View,把View往上推,如果不需要这个行为,需要在AndroidManifest.xml中对应的Activity标签中,加入android:windowSoftInputMode="adjustNothing"
不做任何调整,这样就不会自动收缩我们的页面了。但是这个输入框靠近屏幕底部的话,就不适用了,软键盘会覆盖输入框。
可以换成这个属性,如果软键盘会覆盖输入框,系统会自动将页面向上提,从而能显示输入框。
android:windowSoftInputMode="stateHidden|adjustPan"
adjustPan
的含义:当前窗口的内容将自动移动,以便当前焦点从不被键盘覆盖,和用户能总是看到输入内容的部分
stateHidden
含义:当用户进入Activity后保证是隐藏软键盘的,但是如果是从另一个页面返回该页面就不能保证了。比如说用户进入A页面,然后在输入框输入内容,未收起软键盘直接进入B页面,再从B页面返回A页面,此时A页面中软键盘还是显示的。又或者是用户由A页面进入B页面,在B页面弹出软键盘,未收起直接返回A页面,此时A页面中软键盘还是显示的。