android导航栏与状态栏颜色及透明度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android导航栏与状态栏颜色及透明度相关的知识,希望对你有一定的参考价值。

参考技术A

首先创建一个空项目,如下图

可以看到状态栏是白字黑背景, 导航栏也是白图标黑背景
嘿嘿, 我们先把状态栏隐藏掉,在添加一个ImageView, 让ImageView做背景(方便查看)

样子如下:

将状态栏和导航栏设置透明, 找到 Manifest.xml 文件, 在主题样式中修改

android:statusBarColor 设置状态栏背景色
android:navigationBarColor 同上
android:windowLightStatusBar 设置状态栏文字色, true为深色, false为白色
android:windowLightNavigationBar 同上
android:windowTranslucentStatus 设置状态栏半透明状态, true为半透明, false为不透明
android:windowTranslucentNavigation 同上

最后两个半透明状态下面没用, 可自己尝试看效果

效果图如下:

可以看到导航栏与状态栏并没有透明,原因是默认不能占用状态栏空间与导航栏空间,根布局背景为白色,所有这里显示白色
可以通过设置 getWindow().getDecorView().setSystemUiVisibility() 来适配

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 适配状态栏空间
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 适配导航栏空间
效果如下:

关于状态栏与导航栏的设置及自定义

关于状态栏和导航栏遇到的设置问题

1:statusBar字体为白色

在plist里面设置View controller-based status bar appearance 为 NO;设置statusBarStyle 为 UIStatusBarStyleLightContent

2:设置statusBar和navigationbar为一体

[nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg_navbar.png"] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault];

3:tabBarItem被选中没效果,需要调用sdk7中的方法:

//兼容ios7以前
[viewController.tabBarItem setFinishedSelectedImage:actionMenu.selectedIcon withFinishedUnselectedImage:actionMenu.icon];
//ios7的方法
viewController.tabBarItem.selectedImage = actionMenu.selectedIcon;

4:刷新状态栏statusBar

[self setNeedsStatusBarAppearanceUpdate]

5:navigationbar上面的BarButtonItem字看不见问题,backBarItem箭头没有,则需要

//ios7设置BarButtonItem字体颜色,则会显示出来,不包括返回箭头
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, 0) forBarMetrics:UIBarMetricsDefault];
//设置BarButtonItem颜色,包括返回箭头
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

6:取消ios7自带手势,比如navigationcontroller的右滑返回

self.navigationController.interactivePopGestureRecognizer.enabled = NO ;

以上是关于android导航栏与状态栏颜色及透明度的主要内容,如果未能解决你的问题,请参考以下文章

Android 4.4 沉浸式透明状态栏与导航栏

如何匹配导航栏与状态栏ios7

沉浸式状态栏与导航条

让导航栏与iOS 7中的状态栏重叠

关于状态栏与导航栏的设置及自定义

Android Kitkat 4.4版本状态栏下使用导航抽屉时状态栏颜色显示为白色不透明