原理是通过根布局与当前布局高度差来判断的,Fragment实现ViewTreeObserver.OnGlobalLayoutListener这个接口。
@Override
public void onGlobalLayout() {
//比较根布局与当前布局的大小
int heightDiff = mRegisterScroll.getRootView().getHeight()- mRegisterScroll.getHeight();
if(heightDiff >100){
//大小超过100时,一般为显示虚拟键盘事件
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//将ScrollView滚动到底
mRegisterScroll.fullScroll(View.FOCUS_DOWN);
}
}, 100);
}else{
//大小小于100时,为不显示虚拟键盘或虚拟键盘隐藏
}
}
onViewCreated中添加,mRootView为当前Fragment的根布局
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
必须要在销毁的时候remove掉,否则会空指针错误
@Override
public void onDestroyView() {
mRegisterScroll.getViewTreeObserver().removeOnGlobalLayoutListener(this);
super.onDestroyView();
}