Android判断键盘弹出状态并隐藏
2016-10-25 本文已影响1050人
那个阳光下奔跑的少年
最近遇到一个问题,就是无法监控Android输入法是否弹出,网上找了好多办法,有监听global layout大小变化的,代码如下
private void addKeybordListener() {
// 监听global layout的大小变化
final View activityRootView = findViewById(R.id.root); //此处是你页面根布局
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > 100) { // 高度变小100像素则认为键盘弹出
// 这里执行需要的处理
}
}
});
但是这种监听的弊端就是只能进来页面监听一次,无法根据点击一个按钮时判断出键盘是否弹出,后来我想通过一个布尔的变量,keyboardShow判断键盘现在是否显示,但是这样控制逻辑很麻烦,也容易出错,后来找到一个简单方式,就是获取InputMethodManager,根据它的isActive判断键盘是否显示,代码如下:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) { //如果为true,则是键盘正在显示
HideKeyboard(mEtOrg); //隐藏键盘
}
隐藏键盘代码如下
// 隐藏虚拟键盘
public static void HideKeyboard(View v) {
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
}