最近做项目,要求隐藏底部导航栏的同时禁止其上滑出现,平常导航栏的状态是隐藏并且是上滑出现的,而我们的项目就是要求其完全不出现,但是退出我们的app的它的上滑出现功能恢复正常
//为使底部栏能滑动隐藏,直接监听NestedScrollView的滑动事件 向下滑则隐藏 上滑则显示
mNestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int
oldScrollX, int oldScrollY) {
//上滑 并且 正在显示底部栏
if (scrollY - oldScrollY > 0 && isBottomShow) {
isBottomShow = false;
//将Y属性变为底部栏高度 (相当于隐藏了)
mBottomView.animate().translationY(mBottomView.getHeight());
} else if (scrollY - oldScrollY < 0 && !isBottomShow) {
isBottomShow = true;
mBottomView.animate().translationY(0);
}
}
});
//上滑 并且 正在显示底部栏
if (scrollY - oldScrollY > 0 && isBottomShow) {
isBottomShow = false;
//将Y属性变为底部栏高度 (相当于隐藏了)
mBottomView.animate().translationY(mBottomView.getHeight());
} else if (scrollY - oldScrollY < 0 && !isBottomShow) {
isBottomShow = true
}
}
});
//上滑 并且 正在显示底部栏
if (scrollY - oldScrollY > 0 && isBottomShow) {
isBottomShow = false;
//将Y属性变为底部栏高度 (相当于隐藏了)
mBottomView.animate().translationY(mBottomView.getHeight());
} else if (scrollY - oldScrollY < 0 && !isBottomShow) {
isBottomShow = true
}
}
});
楼主你好,问下华为的虚拟键最左边的那个隐藏导航栏的键,怎么监听的,我用测试机测试,点击隐藏导航栏键,在上滑出这个导航栏,在点击返回按钮,闪退,我猜测的是点击那个隐藏键时,执行的是finsh();把页面销毁了,
/**
* 隐藏虚拟按键,并且全屏
*/
protected void hideBottomUIMenu() {
//隐藏虚拟按键,并且全屏
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);
}
}
} 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);
}
1.在manifest 文件中添加权限:
2.在java文件中添加StatusBarManager 实例
mStatusBarManager = (StatusBarManager) mContext.getSystemService(Context.STATUS_BAR_SERVICE);
3. 禁止下拉状态栏
mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
4. 解除禁止
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
Android 隐藏or 显示底部导航栏
private void setNavigationBarVisibility(boolean visible) {
int flag = 0;
if (!visible) {
flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}
getWindow().getDecorView().setSystemUiVisibility(flag);
}
Note:
SYSTEM_UI_FLAG_HIDE_NAVIGATION: View has requested that the system navigation be temporarily hidden.