Android 4.4 UI体验之ImmersiveMode沉浸模式,状态颜色栏变化,状态栏和导航栏

 Toolbar+AppCompatActivity打造沉浸式体验;AppCompatActivity中嵌入ViewPager+Fragment.

    Android 3.0之后,Google引入了ActionBar,想统一安卓应用的导航栏样式。但由于ActionBar难以定制,很大程度上限制了开发人员,比如标题文字大小、间距等不易实现个性化,很多开发者放弃了ActionBar的使用,而是使用普通的ViewGroup来封装自己的App Bar,或者使用JakeWharton大神的ActionBarSherlock库。

APP顶部导航Bar,JakeWharton大神的ActionBarSherlock库- https://github.com/JakeWharton/ActionBarSherlock

    后来,自2014年Google I/O 上Material Design横空出世后,市场上的应用又逐步趋向了样式的风格统一,support library中很快就出来了Toolbar控件,一个定制化的ViewGroup,来完善ActionBar的使用,App Bar又迎来了春天。
 android.support.v7.widget.Toolbar ,compile ‘com.android.support:appcompat-v7:23.3.0’

Android沉浸式状态栏,支持状态栏渐变色,纯色, 全屏,亮光、暗色模式,适配android 4.4 -10.0机型- https://github.com/Ye-Miao/StatusBarUtil

- 先把状态栏和导航栏都设置为沉浸式,然后通过在状态栏和导航栏的位置加一个自定义背景的 View 和应对复杂的业务场景。
Transparent statusbar and navigationbar- https://github.com/Zackratos/UltimateBar

// 控制状态栏颜色compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'

-- 沉浸式状态栏和6.0权限申请框架
// 透明状态栏
        getWindow().addFlags(
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        // 透明导航栏
        getWindow().addFlags(
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

if (android.os.Build.VERSION.SDK_INT > 18) {
 
   Window window = getWindow();
   window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
     WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
 
   window.setFlags(
     WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
     WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
   // 创建状态栏的管理实例
   SystemBarTintManager tintManager = new SystemBarTintManager(this);
   // 激活状态栏设置
   tintManager.setStatusBarTintEnabled(true);
   // 激活导航栏设置
   tintManager.setNavigationBarTintEnabled(true);
   // 设置一个颜色给系统栏
   tintManager.setTintColor(Color.parseColor("#FFFF6666"));
  }

/**
     * 隐藏虚拟按键,并且全屏
     */
    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);
        }
    }
-- 系统虚拟按键,   隐藏系统虚拟键 Android
Android沉浸式以及虚拟键冲突的解决方法和隐藏状态栏、标题栏的实现- https://blog.csdn.net/qq_36255612/article/details/53463569
android沉浸式状态栏和虚拟按键- https://blog.csdn.net/bitter_2014/article/details/46439405
Android适配底部返回键等虚拟键盘的完美解决方案- https://blog.csdn.net/u012685888/article/details/78954523

android 系统虚拟键盘的收起与显示- https://blog.csdn.net/yeshennet/article/details/78492296
Android 虚拟按键与沉浸式的适配- https://blog.csdn.net/lingfeixiang/article/details/56665722
Android 沉浸式状态栏与华为虚拟按键的冲突处理- https://blog.csdn.net/macaopark/article/details/81356052
android沉浸式状态栏和虚拟按键- https://blog.csdn.net/bitter_2014/article/details/46439405
android沉浸式虚拟按键栏- https://www.jianshu.com/p/b8c8fee18d80

解决沉浸式状态栏底部导航与虚拟键冲突
if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    //为避免底部导航栏覆盖注释掉这一行
//                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
//            getWindow().setNavigationBarColor(Color.TRANSPARENT);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }

public static void adaptFullScreenUI (Window window) {
        if ( Build.VERSION.SDK_INT > 20 ) {
            View decorView = window.getDecorView ( );
            int uiOptions = ( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                      | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN )
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; // TODO
            decorView.setSystemUiVisibility ( uiOptions );
            // TODO
            window.setStatusBarColor(Color.TRANSPARENT);
        }
    }

> Android 4.4 Immersive Mode(沉浸模式)
  Android 4.4 Immersive Mode(沉浸模式):“沉浸模式”和“透明栏”.“支持沉浸模式”“沉浸状态栏”等等,和真正的“沉浸模式”,即 Immersive Full-Screen Mode 是一点关系都没有的。“沉浸模式”“沉浸状态栏”.真正的沉浸模式,指的是一种全屏模式,而你一般在开发者/爱好者/用户那里听到的“沉浸模式”绝大部分情况下指的是“半透明栏”。或者是 Android 5.0 之后加入的“全透明/变色栏”。至于所谓“沉浸式状态栏/导航栏”之类的描述,则完全是无稽之谈。

<!-- 在colors.xml  3F51B5 ; 303F9F  ;  cc0033 -->
<!--  AppCompatActivity 导航上的背景色-->
<color name="colorPrimary">#cc0033</color>
<!--沉浸式下通知栏上的背景色-->
<color name="colorPrimaryDark">#cc0033</color>

-- AndroidのUI体验之ImmersiveMode沉浸模式-- http://blog.csdn.net/bvin_/article/details/46660679 
  getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions);
-- 管理系统UI之四:使用全屏沉浸模式(Using Immersive Full-Screen Mode)-- http://blog.csdn.net/chuyouyinghe/article/details/46984777
你说你看到了沉浸模式,你可能只是见到鬼了--http://www.woshipm.com/pd/164714.html
你这样玩过android沉浸式状态栏吗—教你玩出新花样-https://github.com/androidstarjack/MyStausBarFacoryTest
android沉浸式状态栏- https://github.com/gyf-dev/ImmersionBar
android沉浸式状态栏封装—教你玩出新花样- http://blog.csdn.net/androidstarjack/article/details/76401105

android状态栏背景及文字变色- https://github.com/hongyangAndroid/ColorTrackView
android标题栏、状态栏图标文字颜色及背景动态变化- https://blog.csdn.net/smileiam/article/details/73603840
android状态栏背景及文字变色- https://github.com/xiewenfeng/statusbartextcolorchange 
Android状态栏微技巧,带你真正理解沉浸式模式- http://blog.csdn.net/guolin_blog/article/details/51763825
Android沉浸式状态栏实现- http://www.chinastor.org/gdcc/9281.html
Android沉浸式状态栏(透明状态栏)最佳实现- http://blog.csdn.net/android_technology/article/details/53614871
Android 沉浸式状态栏的实现- https://github.com/yazhi1992/Practice

-- CompatStatusBar集合了SwipeBackLayout,实现左滑关闭页面和沉浸式
(推荐)Android 沉浸式状态栏+左滑关闭页面的实现- https://github.com/xiaoyanger0825/CompatStatusBar
左划关闭页面SwipeBackLayout- https://github.com/ikew0ng/SwipeBackLayout

> Android 4.4新特性之开启全屏沉浸模式
getActivity().getWindow().getDecorView().setSystemUiVisibility;
getActivity().getWindow().getDecorView().getSystemUiVisibility;

setSystemUiVisibility(int visibility)方法可传入的实参为:
 1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态栏的正常情况)。
 2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。
 3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。
 4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。
 5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。
 8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。

Android4.4新特性又增加下面俩个:
View.SYSTEM_UI_FLAG_IMMERSIVE; View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值