记录贴,直接上代码!
1、工具类
public class LayoutChangedListener {
private View decorView = null;
private int decorViewHeight = 800; // HD100设备,屏幕的固定高度为800
private OnLayoutChangeListener layoutChangeListener;
private Rect rect = new Rect(); // 记录整个屏幕的显示范围
public LayoutChangedListener(){
}
public LayoutChangedListener(Activity mActivity,OnLayoutChangeListener layoutChangeListener){
decorView = mActivity.getWindow().getDecorView();
Log.d("lixm","KeyBoardListener(),decorViewHeight = " + decorViewHeight);
this.layoutChangeListener = layoutChangeListener;
decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
}
/**
* 整体布局发生变化时的监听
*/
private ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
decorView.getWindowVisibleDisplayFrame(rect);
int curDecorViewHeight = rect.height();// 获取屏幕的高度
if(decorViewHeight > curDecorViewHeight){
if((decorViewHeight - curDecorViewHeight) == 48){ // 底部导航栏弹出了
if(layoutChangeListener != null){
layoutChangeListener.onNavigationBarShow();
}
}else if((decorViewHeight - curDecorViewHeight) == 416){ // 输入法显示
if(layoutChangeListener != null){
layoutChangeListener.onKeyboardShow();
}
}
}
Log.d("lixm","onGlobalLayout(),decorViewHeight = " + decorViewHeight);
}
};
public interface OnLayoutChangeListener{
public void onKeyboardShow(); // 键盘显示
public void onNavigationBarShow(); // 底部导航栏显示
}
}
2、使用(在BaseActivity中使用)
@Override
protected void onResume() {
super.onResume();
LayoutChangedListener layoutChangedListener = new LayoutChangedListener(this, new LayoutChangedListener.OnLayoutChangeListener() {
@Override
public void onKeyboardShow() {
hideNavigationBar();
}
@Override
public void onNavigationBarShow() {
hideNavigationBar();
}
});
}
public void hideNavigationBar(){
/*隐藏虚拟按键导航栏,底部滑出停留短暂时间*/
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v = this.getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
}