view.getViewTreeObserver().addOnGlobalLayoutListener(listener);
public interface OnSoftKeyboardStateChangedListener {
public void OnSoftKeyboardStateChanged(boolean isKeyBoardShow, int keyboardHeight);
}
//注册软键盘状态变化监听
public void addSoftKeyboardChangedListener(OnSoftKeyboardStateChangedListener listener) {
if (listener != null) {
mKeyboardStateListeners.add(listener);
}
}
//取消软键盘状态变化监听
public void removeSoftKeyboardChangedListener(OnSoftKeyboardStateChangedListener listener) {
if (listener != null) {
mKeyboardStateListeners.remove(listener);
}
}
private ArrayList<OnSoftKeyboardStateChangedListener> mKeyboardStateListeners; //软键盘状态监听列表
private OnGlobalLayoutListener mLayoutChangeListener;
private boolean mIsSoftKeyboardShowing;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mIsSoftKeyboardShowing = false;
mKeyboardStateListeners = new ArrayList<OnSoftKeyboardStateChangedListener>();
mLayoutChangeListener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//判断窗口可见区域大小
Rect r = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
//如果屏幕高度和Window可见区域高度差值大于整个屏幕高度的1/3,则表示软键盘显示中,否则软键盘为隐藏状态。
int heightDifference = screenHeight - (r.bottom - r.top);
boolean isKeyboardShowing = heightDifference > screenHeight/3;
//如果之前软键盘状态为显示,现在为关闭,或者之前为关闭,现在为显示,则表示软键盘的状态发生了改变
if ((mIsSoftKeyboardShowing && !isKeyboardShowing) || (!mIsSoftKeyboardShowing && isKeyboardShowing)) {
mIsSoftKeyboardShowing = isKeyboardShowing;
for (int i = 0; i < mKeyboardStateListeners.size(); i++) {
OnSoftKeyboardStateChangedListener listener = mKeyboardStateListeners.get(i);
listener.OnSoftKeyboardStateChanged(mIsSoftKeyboardShowing, heightDifference);
}
}
}
};
//注册布局变化监听
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mLayoutChangeListener);
}
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
@Override
protected void onDestroy() {
//移除布局变化监听
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutChangeListener);
} else {
getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(mLayoutChangeListener);
}
super.onDestroy();
};
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有