一、在解决Android输入法键盘弹出问题是,我们先来了解几个常用的api
-
<activity android:windowSoftInputMode= "A"'>
- A="stateUnspecified" 依赖系统或者主题去设置键盘弹出
- A="stateHidden" 控制键盘不自动弹出
- A="stateUnchanged" 保持上一个Activity的键盘弹出属性设置
- A="stateAlwaysHidden" 当Activity主窗口获取焦点时,软键盘一直隐藏
- A="stateVisible" 在没有输入框的情况下也可点击弹出键盘
- A="stateAlwaysVisible" 总是显示状态
- A="adjustUnspecified" 默认设置,可能遮挡内容,比较死板
- A="adjustResize" 自动调整
屏幕大小
,留足软键盘空间 - A="adjustPan" 系统通过
布局移动
来调节用户布局,保证输入框一直在视野范围内
-
<activity android:configChanges="B">
- B="keyboard" 键盘模式发生变化,当需要调用自定义键盘时使用
- B="keyboardHidden" 打开手机自带键盘 键盘的可用性发生了改变
- B="orientation" 横竖屏切换
- B="fontScale" 全局字体发生变化
- B="ScreenSize" 屏幕大小变化
二、这次的问题是,一个表单填写,键盘挡住下方输入框,每次都得关闭键盘从新点击输入
-
解决--首先在清单文件里 activity 中标注:
<activity android:name="****Activity" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize" />
-
用scrollview包裹布局,并设置键盘遮挡的最后一个EditView控件的监听事件
lastEdit.addTextChangedListener(new TextWatcher() {
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { scrollow.fullScroll(ScrollView.FOCUSABLES_ALL); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
3.扩张:隐藏键盘的方法:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// 获得当前得到焦点的View
View view = getCurrentFocus();
IBinder token=view.getWindowToken();
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
return super.dispatchTouchEvent(ev);
}
4.具体什么时候隐藏,可同伙消息传递机制或者点击事件去控制