关键词:
在4.4之前状态栏一直是黑色的,在4.4中带来了 windowTranslucentStatus 这一特性,因此可以实现给状态栏设置颜色,如下图所示,状态栏颜色不再是黑色,而是可以定制的颜色。
国内将状态栏变色叫做沉浸式状态栏,时间久了,叫的人多了,大家就不再深究,默认了这种叫法。
方法1:系统的方式沉浸式状态栏实现
步奏一
//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
步奏二
布局加入: android:fitsSystemWindows="true" android:clipToPadding="true"
eg:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:fitsSystemWindows="true" android:clipToPadding="true" android:layout_width="match_parent" android:layout_height="140dp" android:textSize="24dp" android:background="@color/mask_tags_1" android:text="你好,沉浸式状态栏"/> </LinearLayout>
方法2:动态添加布局 实现沉浸式状态栏
添加隐藏布局,然后我们动态的计算状态栏的高度,然后把这个高度设置成这个隐藏的布局的高度
xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.translucentbarstest.TwoActivity"> <!--这个是隐藏的布局,然后通过动态的设置高度达到效果--> <LinearLayout android:id="@+id/ll_bar" android:layout_width="fill_parent" android:layout_height="1dp" android:orientation="vertical" android:background="#e7abff" android:visibility="gone"> </LinearLayout> <TextView android:fitsSystemWindows="true" android:clipToPadding="true" android:layout_width="match_parent" android:layout_height="140dp" android:background="@color/mask_tags_3" android:text="你好,沉浸式状态栏"/> </LinearLayout>
java:
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); initState(); } /** * 动态的设置状态栏 实现沉浸式状态栏 * */ private void initState() { //当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); // LinearLayout linear_bar = (LinearLayout) findViewById(R.id.ll_bar); linear_bar.setVisibility(View.VISIBLE); //获取到状态栏的高度 int statusHeight = getStatusBarHeight(); //动态的设置隐藏布局的高度 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linear_bar.getLayoutParams(); params.height = statusHeight; linear_bar.setLayoutParams(params); } } /** * 通过反射的方式获取状态栏高度 * * @return */ private int getStatusBarHeight() { try { Class<?> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } return 0; } }
方法3:用的github上的第三方库
1.库地址:https://github.com/jgilfelt/SystemBarTint
2.添加依赖库:
compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’
步骤1:
android:fitsSystemWindows="true" android:clipToPadding="true
步骤2:
SystemBarTintManager tintManager = new SystemBarTintManager(this); // 激活状态栏 tintManager.setStatusBarTintEnabled(true); // enable navigation bar tint 激活导航栏 tintManager.setNavigationBarTintEnabled(true); //设置系统栏设置颜色 //tintManager.setTintColor(R.color.red); //给状态栏设置颜色 tintManager.setStatusBarTintResource(R.color.mask_tags_1); //Apply the specified drawable or color resource to the system navigation bar. //给导航栏设置资源 tintManager.setNavigationBarTintResource(R.color.mask_tags_1);
eg:
xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffff" android:orientation="vertical" tools:context="com.example.translucentbarstest.ThirdActivity"> <TextView android:layout_width="match_parent" android:layout_height="140dp" android:background="@color/mask_tags_5" android:clipToPadding="true" android:fitsSystemWindows="true" android:text="你好,沉浸式状态栏" android:textSize="24dp"/> </LinearLayout>
java:
public class ThreeActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_three); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); SystemBarTintManager tintManager = new SystemBarTintManager(this); // 激活状态栏 tintManager.setStatusBarTintEnabled(true); // enable navigation bar tint 激活导航栏 tintManager.setNavigationBarTintEnabled(true); //设置系统栏设置颜色 //tintManager.setTintColor(R.color.red); //给状态栏设置颜色 tintManager.setStatusBarTintResource(R.color.mask_tags_1); //Apply the specified drawable or color resource to the system navigation bar. //给导航栏设置资源 tintManager.setNavigationBarTintResource(R.color.mask_tags_1); } } }
沉浸式导航栏及状态栏系统图标颜色的改变
最近研究沉浸式导航栏,上网看了好多,差不多实现都是一样的。。。。代码如下: //透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIG 查看详情
android实现沉浸式全屏(代码片段)
前言本文总结Android实现沉浸式全屏的实现方式。实现沉浸式全屏在一些需要全屏显示的场景下,比如玩游戏、看横屏视频的时候,内容全屏,占满窗口的体验会让用户更加沉浸到对内容的消费中,带来好的用户体验。沉浸式显... 查看详情
沉浸式状态栏的三种实现方式
沉浸式算是目前Android行业比较流行的一种App设计风格,将菜单栏北京设置为导航栏的颜色,感觉顶部状态栏像是被入侵了一样,因此称为沉浸式菜单栏。本文将介绍三种方式去实现沉浸式状态栏。 Google从androidkitkat(Androi... 查看详情
分别用toolbar和自定义导航栏实现沉浸式状态栏
一、ToolBar1、在build.gradle中添加依赖,例如:compile‘com.android.support:appcompat-v7:23.4.0‘2、去掉应用的ActionBar。可以是修改主题theme为“NoActionBar”,例如:<stylename="AppTheme"parent="Theme.AppCompat.Light.NoActionBar">或者 查看详情
android沉浸式/透明式状态栏、导航栏
...并不在根布局设置这个属性,我们想要的无外乎是让内容沉浸在状态栏之中。所以我们经常设置在最上端的图片背景、Banner之类的,如果是Toolbar的,我们可以使用一层LinearLayout包裹,并把这个属性设置给LinearLayout,这样就可以... 查看详情
android--------沉浸式状态栏immersionbar3.0(代码片段)
沉浸式状态栏我一直在使用的一个库ImmersionBar,非常不错,现在都3.0了android4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换、刘海屏、软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色... 查看详情
android--------沉浸式状态栏immersionbar3.0(代码片段)
沉浸式状态栏我一直在使用的一个库ImmersionBar,非常不错,现在都3.0了android4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换、刘海屏、软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色... 查看详情
flutter沉浸式透明状态栏|flutter自定义凸起bottomappbar导航(代码片段)
...颜色背景,使titleBar能够和状态栏融为一体,增加沉浸感。 如上图:Flutter状态栏默认为黑色半透明,那么如何去掉这个状态栏的黑色半透明背景色,让其和标题栏颜色一 查看详情
知识教程|优化状态栏沉浸式效果
沉浸式状态栏是让开发者尤其是Android开发者很头疼的问题,耗费开发者很多精力去校验代码在各个系统版本、各个机型上是否有效,今天这篇教程就跟大家分享优化初始化状态栏沉浸式效果的方法。使用APICloud时,参照社区源码... 查看详情
导航栏与状态栏
//具体的控制器设置状态栏样式overridevarpreferredStatusBarStyle:UIStatusBarStyle{return.lightContent}//如果控制器被添加到导航控制器中,上段代码失效,需要在导航控制器中添加以下代码//导航控制器不再统一设置状态栏样式,交给具体的控... 查看详情
android透明状态栏和沉浸式的实现
Android透明状态栏和沉浸式的实现1.什么是沉浸式根据百度百科上的定义,沉浸式就是要给用户提供完全沉浸的体验,使用户有一种置身于虚拟世界之中的感觉。其真正含义并不是大家所想的那样,对屏幕状态栏进行一些操作,甚至... 查看详情
iOS:向应用程序窗口添加导航栏与状态栏冲突
】iOS:向应用程序窗口添加导航栏与状态栏冲突【英文标题】:iOS:AddingnavigationbartoApplicationwindowcollideswithstatusbar【发布时间】:2018-02-2414:58:07【问题描述】:我在应用程序窗口中添加了导航栏,但导航栏与状态栏发生冲突。(我... 查看详情
在 iOS 7 中让导航栏与状态栏重叠
】在iOS7中让导航栏与状态栏重叠【英文标题】:LettingtheNavigationbaroverlaptheStatusbariniOS7【发布时间】:2013-08-2215:01:40【问题描述】:我想制作一个使用导航栏的应用程序,但仅用于显示标题和一些按钮(它使用vie容器)。我希望... 查看详情
如何匹配导航栏与状态栏ios7
】如何匹配导航栏与状态栏ios7【英文标题】:HowtomatchNavigationbarwithstatusbarios7【发布时间】:2014-02-0704:38:37【问题描述】:我正在开发一个基于UINavigationController的应用程序,其中我呈现的视图之一是模态的,我需要一个手动添加... 查看详情
react-native沉浸式状态栏(代码片段)
使用StatusBar即可实现沉浸式,但是必须把背景色设置为透明。否则如果有不同页面的头部颜色不一样的话,导航栏的颜色动画会很怪异,不会是跟着页面一起动画。<StatusBarbarStyle='light-content'backgroundColor='rgba(0,0,0,0)'... 查看详情
iOS11中没有状态栏的导航栏与安全区域重叠
】iOS11中没有状态栏的导航栏与安全区域重叠【英文标题】:NavigationBarwithoutstatusbaroverlapssafeareainiOS11【发布时间】:2017-09-2717:20:30【问题描述】:iOS11的iPhoneX模拟器有问题。我有一个没有状态栏的视图控制器。为此,我添加:-(B... 查看详情
管理systemui(状态栏+导航栏)
...,如下图)与应用程序同时显示。应用程序显示沉浸式的内容时,比如电影或者照片,可以临时地变暗系统栏图标从而让人减少分心,或者为了一个完全的沉浸式体验而隐藏系统栏。 本文主要讲解怎样去调... 查看详情
管理systemui(状态栏+导航栏)
...,如下图)与应用程序同时显示。应用程序显示沉浸式的内容时,比如电影或者照片,可以临时地变暗系统栏图标从而让人减少分心,或者为了一个完全的沉浸式体验而隐藏系统栏。 本文主要讲解怎样去调... 查看详情