本章内容主要是关于操作SystemUI,包括:StatusBar、ActionBar、NavigationBar。

通过View Mode and Layout

可以通过View的一些常量来改变状态栏或者屏幕的一些特性(View.setSystemUiVisibility(UiOptions)(API 11)),具体如下(隐藏系统栏和低能模式会在有app bar时失效):

View.setSystemUiVisibility(int visibility)中,visibility是Mode与Layout任意取值的组合,可传入的实参为:

Mode

  1. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。
  2. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。等同于(WindowManager.LayoutParams.FLAG_FULLSCREEN)
  3. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。
  4. View.SYSTEM_UI_FLAG_IMMERSIVE:这个flag只有当设置了SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用。如果没有设置这个flag,任意的View相互动作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果设置就不会退出。
  5. View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:这个flag只有当设置了SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION 时才起作用。如果没有设置这个flag,任意的View相互动作都坏退出SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果设置就不受影响。

Layout

  1. View.SYSTEM_UI_FLAG_LAYOUT_STABLE: 保持View Layout不变,隐藏状态栏或者导航栏后,View不会拉伸。
  2. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:让View全屏显示,Layout会被拉伸到StatusBar下面,不包含NavigationBar。
  3. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:让View全屏显示,Layout会被拉伸到StatusBar和NavigationBar下面。

例如:

    public void updateSystemUI() {        int visibility = 0;        for (int i = 0; i < mCheckControls.length; i++) {            if (mCheckControls[i].isChecked()) {                visibility |= mCheckFlags[i];            }        }        mImage.setSystemUiVisibility(visibility);    }

通过Window flag 和 Theme(通过设置Widnow flag修改属性)

  1. WindowManager.LayoutParams.FLAG_FULLSCREEN:隐藏状态栏全屏显示Window并且会拉伸。可以通过theme中的“android.R.attr#windowFullscreen”来控制。
  2. WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN:允许window contents扩展到屏幕中的缩放区域内,如果有缩放区域的话。 可以通过theme中的“android.R.attr#windowOverscan”来控制。
  3. WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS:使状态栏透明同时会拉伸window到全屏的状态(保留NavigationBar高度),假如有ActionBar,ActionBar依旧会显示。可以通过theme中的“android.R.attr#windowTranslucentStatus”来控制。
  4. WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION:NavigationBar透明同时会拉伸Window到全屏(不保留StatusBar和NavigationBar的高度)。可以通过theme中的“android.R.attr#windowTranslucentNavigation”来控制。

代码中使用Window flag:

    private void setFullscreen(boolean on) {        Window win = getWindow();        WindowManager.LayoutParams winParams = win.getAttributes();        final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;        if (on) {            winParams.flags |=  bits;        } else {            winParams.flags &= ~bits;        }        win.setAttributes(winParams);    }

Window Feature

通过requestFeature来设置Window相关的显示状态。

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

常见Flag:
1. Window.FEATURE_ACTION_BAR_OVERLAY:请求ActionBar覆盖在window content上面。

更多相关文章

  1. Android(安卓)关于Intent的一些简略总结
  2. Android中为每个Activity显示自己的标题
  3. Android(安卓)使用Intent隐式传递启动Activity(访问网址,打电话
  4. Android使用include标签无法设置具体位置的解决
  5. Android使用枚举单例实现Toast快速刷新(自定义吐司)
  6. Android管理系统状态栏和导航栏
  7. Android获取验证码倒计时实现代码
  8. ANDROID 设置状态栏与标题背景颜色一致
  9. Android学习之RecyclerView学习(实现瀑布流式布局)

随机推荐

  1. Android(安卓)开发 ------------- Unable
  2. Android异步任务处理之AsyncTaskLoader的
  3. Android(安卓)Studio版本升级与降级
  4. android listView.getCount 与 listView.
  5. 修改Android模拟器RAM大小方法
  6. Android导入多个Module时包冲突解决办法
  7. Android(安卓)jni GetFieldID 和 GetMeth
  8. android多国语言与国际化
  9. 在linux下安装android以及C/C++开发环境
  10. HUNTING YOUR LEAKS: MEMORY MANAGEMENT