本文主要会简单介绍 下Android项目开发中有关系统软键盘的事情,主要包括强制开启键盘、强制收起键盘,以及如何在键盘开启和收起时进行事件监听。话不多说,直接进入主题。
强制开启键盘
/**
* 强制开启软键盘
* 这里的mEditText就是键盘目前获得焦点的输入框
*/
private void showSoftInput() {
InputMethodManager inputManager = (InputMethodManager) mEditText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(mEditText, InputMethodManager.SHOW_FORCED);
}
强制收起键盘
/**
* 强制收起输入键盘
*/
private void hideSoftInput() {
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}
键盘开启个收起监听
键盘的开启和收起监听,一般用到的关键类View.OnLayoutChangeListener接口。顾名思义,从名字上就可以看到,键盘监听的原理就是监听视图布局的变化,因为键盘开启时,一般会将视图整体往上推。同理,键盘收起时,视图会整体往下收回。说到这里,就需要特别注意,这里介绍的方法只适合键盘的开启和收回会引起视图布局变化的情况。(一般是视图封装在ScrollView等滚动容器里面的)
public class FocusActivity extends Activity implements View.OnLayoutChangeListener {
private final String TAG = FocusActivity.class.getSimpleName();
private FrameLayout mContent;
private int screenHeight = 0;//屏幕高度
private int keyHeight = 0;//键盘高度
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_focus);
initVariables();
initViews();
}
private void initViews() {
mContent = (FrameLayout) findViewById(R.id.fl_content);
mContent.addOnLayoutChangeListener(this);//绑定视图布局变化监听器
}
private void initVariables() {
screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();//获取当前屏幕的高度
keyHeight = screenHeight / 4; //设置键盘的大概高度(一般是除以3或者4)
}
/**
* @param v 发生变化的视图
* @param left view左侧值(变化后)
* @param top view顶部值(变化后)
* @param right view右侧值(变化后)
* @param bottom view底部值(变化后)
*
* @param oldLeft view左侧值(变化前)
* @param oldTop view顶部值(变化前)
* @param oldRight view右侧值(变化前)
* @param oldBottom view底部值(变化前)
*/
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (oldBottom != 0 && bottom != 0 && (oldBottom - bottom > keyHeight)) {
Log.i(TAG, "键盘开启");
} else if (oldBottom != 0 && bottom != 0 && (bottom - oldBottom > keyHeight)) {
Log.i(TAG, "键盘收起");
}
}
}