Last active
January 30, 2018 01:35
-
-
Save LeonDevLifeLog/d50d18fedadc3930cdb6afa2b0053b2c to your computer and use it in GitHub Desktop.
键盘高度变化监听,转自网络原作者不详
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class SoftKeyBoardListener { | |
private View rootView;//activity的根视图 | |
int rootViewVisibleHeight;//纪录根视图的显示高度 | |
private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener; | |
public SoftKeyBoardListener(Activity activity) { | |
//获取activity的根视图 | |
rootView = activity.getWindow().getDecorView(); | |
//监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变 | |
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { | |
@Override | |
public void onGlobalLayout() { | |
//获取当前根视图在屏幕上显示的大小 | |
Rect r = new Rect(); | |
rootView.getWindowVisibleDisplayFrame(r); | |
int visibleHeight = r.height(); | |
if (rootViewVisibleHeight == 0) { | |
rootViewVisibleHeight = visibleHeight; | |
return; | |
} | |
//根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变 | |
if (rootViewVisibleHeight == visibleHeight) { | |
return; | |
} | |
//根视图显示高度变小超过200,可以看作软键盘显示了 | |
if (rootViewVisibleHeight - visibleHeight > 200) { | |
if (onSoftKeyBoardChangeListener != null) { | |
onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight); | |
} | |
rootViewVisibleHeight = visibleHeight; | |
return; | |
} | |
//根视图显示高度变大超过200,可以看作软键盘隐藏了 | |
if (visibleHeight - rootViewVisibleHeight > 200) { | |
if (onSoftKeyBoardChangeListener != null) { | |
onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight); | |
} | |
rootViewVisibleHeight = visibleHeight; | |
return; | |
} | |
} | |
}); | |
} | |
private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { | |
this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener; | |
} | |
public interface OnSoftKeyBoardChangeListener { | |
void keyBoardShow(int height); | |
void keyBoardHide(int height); | |
} | |
public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { | |
SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity); | |
softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment