android 软键盘监听显示和隐藏
2024-09-05 06:33:31
githup中找到:https://github.com/yescpu/KeyboardChangeListener
import android.app.Activity;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver; /**
* simple and powerful Keyboard show/hidden listener,view {@android.R.id.content} and {@ViewTreeObserver.OnGlobalLayoutListener}
* Created by yes.cpu@gmail.com 2016/7/13.
*/
public class KeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
private static final String TAG = "ListenerHandler";
private View mContentView;
private int mOriginHeight;
private int mPreHeight;
private KeyBoardListener mKeyBoardListen; public interface KeyBoardListener {
/**
* call back
* @param isShow true is show else hidden
* @param keyboardHeight keyboard height
*/
void onKeyboardChange(boolean isShow, int keyboardHeight);
} public void setKeyBoardListener(KeyBoardListener keyBoardListen) {
this.mKeyBoardListen = keyBoardListen;
} public KeyboardChangeListener(Activity contextObj) {
if (contextObj == null) {
Log.i(TAG, "contextObj is null");
return;
}
mContentView = findContentView(contextObj);
if (mContentView != null) {
addContentTreeObserver();
}
} private View findContentView(Activity contextObj) {
return contextObj.findViewById(android.R.id.content);
} private void addContentTreeObserver() {
mContentView.getViewTreeObserver().addOnGlobalLayoutListener(this);
} @Override
public void onGlobalLayout() {
int currHeight = mContentView.getHeight();
if (currHeight == 0) {
Log.i(TAG, "currHeight is 0");
return;
}
boolean hasChange = false;
if (mPreHeight == 0) {
mPreHeight = currHeight;
mOriginHeight = currHeight;
} else {
if (mPreHeight != currHeight) {
hasChange = true;
mPreHeight = currHeight;
} else {
hasChange = false;
}
}
if (hasChange) {
boolean isShow;
int keyboardHeight = 0;
if (mOriginHeight == currHeight) {
//hidden
isShow = false;
} else {
//show
keyboardHeight = mOriginHeight - currHeight;
isShow = true;
} if (mKeyBoardListen != null) {
mKeyBoardListen.onKeyboardChange(isShow, keyboardHeight);
}
}
} public void destroy() {
if (mContentView != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mContentView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
}
}
KeyboardChangeListener
simple and powerful Keyboard show/hidden change listener,without having to add a layout and can run in every Activity;
useage
make activity:
android:windowSoftInputMode="adjustResize"
java:
new KeyboardChangeListener(this).setKeyBoardListener(new KeyboardChangeListener.KeyBoardListener() {
@Override
public void onKeyboardChange(boolean isShow, int keyboardHeight) {
Log.d(TAG, "isShow = [" + isShow + "], keyboardHeight = [" + keyboardHeight + "]");
}
});
#enjoy!
感谢作者!
最新文章
- Linux下用户组、文件权限详解
- 【cl】Json学习
- TCP/IP WebSocket MQTT
- JDK,JRE,JVM区别与联系-理解与概括
- C#_事件委托
- [置顶] mybatis批量新增系列之有主键的表的批量新增
- 【java提高】Serializable(一)--初步理解
- Windows DLL资料整理
- WebService访问oracle数据库本地调试
- YAML配置:mapping values are not allowed here
- html-form
- Linux使用命令修改默认启动为图形或字符界面
- Conda下安装libsvm
- i=i+1,i+=1,i++哪个执行效率最高?为什么?
- SpringBoot 开启 Actuator
- C#(简单递归)和实现IComparable接口
- Restore IP Addresses,将字符串转换成ip地址
- HDU 2553 N皇后问题 (深搜)
- JavaFx 实现画图工具
- 牛客网 牛客小白月赛1 E.圆与三角形-公式题