目次
1.关键方法
2.在项目中的应用
1.关键方法
去掉小白条参考:https://juejin.cn/post/7090385839619833893
该方法在小米手机上测试去掉了手势栏与状态栏;
关键方法1:
- WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
复制代码 该方法使得布局内容能够扩展到顶部的状态栏以及底部的导航栏
关键方法2:
方法1将内容延展到状态栏与手势导航栏的下面,于是方法2只需要将状态栏以及底部手势导航栏的颜色设置透明即可。
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- // 设置导航栏和状态栏的颜色
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
- getWindow().setNavigationBarColor(color);
- getWindow().setStatusBarColor(color);
- }
复制代码 关键方法3:
方法3修改状态栏上体系关照的图标与字体颜色
- View decor = activity.getWindow().getDecorView();
- if (dark) {
- // 设置状态栏为亮色模式(深色图标)
- decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
- } else {
- // 设置状态栏为暗色模式(浅色图标)
- decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
- }
复制代码
2.在项目中的应用
此处将上面的三个方法放进项目标基类里面,其他Activity继承该类即可设置所有页面全屏显示
- public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置布局文件 setContentView(getLayoutId()); // 初始化视图组件 initViews(savedInstanceState); // 设置全屏模式并隐蔽状态栏和导航栏 setFullscreen(false, false); // 设置状态栏的图标和文本为深色(亮色状态栏) setAndroidNativeLightStatusBar(this, false); } /** * 设置 Android 状态栏的图标和文本颜色 * * @param activity 当前的 Activity * @param dark 是否设置为深色模式 * true: 状态栏图标和文本为深色(配景为淡色) * false: 状态栏图标和文本为淡色(配景为深色) */ private static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) { View decor = activity.getWindow().getDecorView();
- if (dark) {
- // 设置状态栏为亮色模式(深色图标)
- decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
- } else {
- // 设置状态栏为暗色模式(浅色图标)
- decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
- } } /** * 设置全屏模式,并根据参数选择是否显示状态栏和导航栏 * * @param isShowStatusBar 是否显示状态栏 * true: 显示状态栏 * false: 隐蔽状态栏 * @param isShowNavigationBar 是否显示导航栏 * true: 显示导航栏 * false: 隐蔽导航栏 */ public void setFullscreen(boolean isShowStatusBar, boolean isShowNavigationBar) { /* int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;*//* if (!isShowStatusBar) { // 假如不显示状态栏,则设置为全屏模式 uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN; } else { // 保持状态栏可见但扩展到全屏 uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; } if (!isShowNavigationBar) { // 假如不显示导航栏,则隐蔽导航栏 uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } else { // 保持导航栏可见但扩展到全屏 uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; }*/ /*int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; // 设置体系 UI 选项 getWindow().getDecorView().setSystemUiVisibility(uiOptions);*/ WindowCompat.setDecorFitsSystemWindows(getWindow(), false); // 设置导航栏和状态栏的颜色为透明,并设置为亮色状态栏 setNavigationStatusColor(Color.TRANSPARENT, true); } /** * 设置导航栏和状态栏的颜色 * * @param color 要设置的颜色 * @param isLightStatusBar 是否设置状态栏为亮色模式(深色图标) * true: 状态栏图标和文本为深色(配景为淡色) * false: 状态栏图标和文本为淡色(配景为深色) */ public void setNavigationStatusColor(int color, boolean isLightStatusBar) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- // 设置导航栏和状态栏的颜色
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
- getWindow().setNavigationBarColor(color);
- getWindow().setStatusBarColor(color);
- } } /** * 获取布局文件的资源 ID * * @return 布局文件的资源 ID */ protected abstract int getLayoutId(); /** * 初始化视图组件 * * @param savedInstanceState 生存的实例状态 */ protected abstract void initViews(@Nullable Bundle savedInstanceState); @Override protected void onDestroy() { super.onDestroy(); }}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |