android 监听软键盘弹起和关闭状态与点击空白区域软键盘隐藏
2017-07-07 17:09
731 查看
监听软键盘弹起与关闭状态
很多例子上用的是大于100去判断,现在手机屏幕越来越大,分辨率越来越高,100的高度是不够的
第二种写法:监听软键盘弹起与关闭状态
不需要去界面里面写判断,定义一个 类实现ViewTreeObserver.OnGlobalLayoutListener,并在这里面做判断
package com.dreamlive.utils;
import android.graphics.Rect;
import android.view.View;
import android.view.ViewTreeObserver;
/**
* 软键盘显示与隐藏监听
*
* @author 2017/7/7 / mengwei
*/
public class OnKeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
private View mContainer;
private OnChangeListener mOnChangerListener;
public OnKeyboardChangeListener(View view, OnChangeListener onChangeListener) {
mContainer = view;
mOnChangerListener = onChangeListener;
}
@Override
public void onGlobalLayout() {
if (mOnChangerListener != null) {
Rect rect = new Rect();
mContainer.getWindowVisibleDisplayFrame(rect);
int heightDifference = mContainer.getRootView().getHeight() - rect.bottom;
if (heightDifference > 200) {
mOnChangerListener.onKeyboardShow();
} else {
mOnChangerListener.onKeyboardHidden();
}
}
}
/**
* 软键盘监听变化接口
*/
public interface OnChangeListener {
void onKeyboardShow();//显示接口
void onKeyboardHidden();//隐藏接口
}
}
在界面实现onChangeListener接口
@Override
public void onKeyboardShow() {
Log.e("Tag", "show");
mIsSoftKeyboardShowing = true;
}
@Override
public void onKeyboardHidden() {
Log.e("Tag", "hidden");
mIsSoftKeyboardShowing = false;
}
调用,view是editText的父布局
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnKeyboardChangeListener(view, this));
****************************点击空白区域软键盘隐藏*************************************
boolean mIsSoftKeyboardShowing = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mIsSoftKeyboardShowing) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
}
return true;
} else {
return super.onTouchEvent(event);
}
}
ok,结束了,仅做记录用。
很多例子上用的是大于100去判断,现在手机屏幕越来越大,分辨率越来越高,100的高度是不够的
view.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); view.getWindowVisibleDisplayFrame(r); int screenHeight = view.getRootView() .getHeight(); int heightDifference = screenHeight - (r.bottom); if (heightDifference > 200) { //软键盘显示 mIsSoftKeyboardShowing = true; Log.e("TAG", "显示"); } else { //软键盘隐藏 Log.e("TAG", "隐藏"); mIsSoftKeyboardShowing = false; } } });
第二种写法:监听软键盘弹起与关闭状态
不需要去界面里面写判断,定义一个 类实现ViewTreeObserver.OnGlobalLayoutListener,并在这里面做判断
package com.dreamlive.utils;
import android.graphics.Rect;
import android.view.View;
import android.view.ViewTreeObserver;
/**
* 软键盘显示与隐藏监听
*
* @author 2017/7/7 / mengwei
*/
public class OnKeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
private View mContainer;
private OnChangeListener mOnChangerListener;
public OnKeyboardChangeListener(View view, OnChangeListener onChangeListener) {
mContainer = view;
mOnChangerListener = onChangeListener;
}
@Override
public void onGlobalLayout() {
if (mOnChangerListener != null) {
Rect rect = new Rect();
mContainer.getWindowVisibleDisplayFrame(rect);
int heightDifference = mContainer.getRootView().getHeight() - rect.bottom;
if (heightDifference > 200) {
mOnChangerListener.onKeyboardShow();
} else {
mOnChangerListener.onKeyboardHidden();
}
}
}
/**
* 软键盘监听变化接口
*/
public interface OnChangeListener {
void onKeyboardShow();//显示接口
void onKeyboardHidden();//隐藏接口
}
}
在界面实现onChangeListener接口
@Override
public void onKeyboardShow() {
Log.e("Tag", "show");
mIsSoftKeyboardShowing = true;
}
@Override
public void onKeyboardHidden() {
Log.e("Tag", "hidden");
mIsSoftKeyboardShowing = false;
}
调用,view是editText的父布局
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnKeyboardChangeListener(view, this));
****************************点击空白区域软键盘隐藏*************************************
boolean mIsSoftKeyboardShowing = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mIsSoftKeyboardShowing) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
}
return true;
} else {
return super.onTouchEvent(event);
}
}
ok,结束了,仅做记录用。
相关文章推荐
- android朋友圈监听键盘状态 点击空白区域隐藏键盘
- IOS(1) 点击空白区域隐藏(关闭)键盘
- Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android 点击空白区域 隐藏输入法 软键盘
- 安卓学习笔记---Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- 【转】Android点击空白区域,隐藏输入法软键盘
- Android点击空白区域,隐藏输入法软键盘
- Android点击除键盘外的其他区域隐藏键盘
- ios点击键盘以外空白区域隐藏键盘
- Android点击非编辑框区域键盘隐藏
- Android之监听手机软键盘弹起与关闭
- iOS点击键盘以外空白区域隐藏键盘的常见方法
- android 点击空白隐藏软键盘
- Android之监听手机软键盘弹起与关闭
- Android EditText 输入完毕 点击空白区域键盘自动退出
- android 监听判断软键盘的弹出、隐藏状态
- Android之监听手机软键盘弹起与关闭