Android 状态栏透明、自定义状态栏颜色设置
2017-06-20 20:40
399 查看
系统是4.4及以上的系统,支持设置透明的状态栏和导航栏。
代码中实现:
也可在Style.xml 中实现:
但是 设置了这两个属性之后,布局里面的view会自动向上偏移;
内容就会显示在透明状态栏下面。
为了防止这种现象,可以在主题(Style)中添加如下属性:
通过往 Window 窗口的 decorView 添加一个 View , 让它大小与系统状态栏一样,然后设置这个view的背景,就可以实现修改状态栏颜色的效果了。
代码如下:
获取状态栏高度:
然后调用 setStatusBarColor(int color)即可实现目标功能!
compile ‘com.githang:status-bar-compat:0.3’
在你的Activity中(最好是setContentView()被调用之后)添加以下代码:
StatusBarCompat.setStatusBarColor(this, color, (boolean) lightStatusBar );
代码中实现:
if(VERSION.SDK_INT >= VERSION_CODES.KITKAT){ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); //透明导航栏 }
也可在Style.xml 中实现:
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- API 19 theme customizations can go here. --> <item name="android:windowTranslucentStatus">true</item> //透明状态栏 <item name="android:windowTranslucentNavigation">true</item> //透明导航栏 </style>
但是 设置了这两个属性之后,布局里面的view会自动向上偏移;
内容就会显示在透明状态栏下面。
为了防止这种现象,可以在主题(Style)中添加如下属性:
<item name="android:fitsSystemWindows">true</item>
自定义状态栏颜色
设置状态栏透明之后,我希望进而动态自定义状态栏的颜色。通过往 Window 窗口的 decorView 添加一个 View , 让它大小与系统状态栏一样,然后设置这个view的背景,就可以实现修改状态栏颜色的效果了。
代码如下:
private void setStatusBarColor(int color){ ViewGroup decorViewGroup = (ViewGroup) window.getDecorView(); View statusBarView = new View(window.getContext()); int statusBarHeight = getStatusBarHeight(window.getContext());//获取状态栏高度(自定义函数 见下文) FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, statusBarHeight); params.gravity = Gravity.TOP; statusBarView.setLayoutParams(params); statusBarView.setBackgroundColor(color); decorViewGroup.addView(statusBarView); }
获取状态栏高度:
private static int getStatusBarHeight(Context context) { int statusBarHeight = 0; Resources res = context.getResources(); int resourceId = res.getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { statusBarHeight = res.getDimensionPixelSize(resourceId); } return statusBarHeight; }
然后调用 setStatusBarColor(int color)即可实现目标功能!
以上内容基于以下开源项目,各位看官可以直接引用即可完美实现:
在项目的build.gradle中声明以下依赖:compile ‘com.githang:status-bar-compat:0.3’
在你的Activity中(最好是setContentView()被调用之后)添加以下代码:
StatusBarCompat.setStatusBarColor(this, color, (boolean) lightStatusBar );
相关文章推荐
- Android设置状态栏透明与设置状态栏字体颜色Mode
- 1.android 改变状态栏的颜色,2 设置透明渐变式的样式!,设置状态栏为透明的渐变的
- android 中 EditText加入图标 更改边框颜色 设置透明 代码
- android设置状态栏的颜色
- 如何设置android 5.0主题,状态栏,toolbar颜色设定
- Android 使用SystemBarTint设置状态栏颜色
- android:设置背景图片、背景颜色透明
- android 中 EditText加入图标 更改边框颜色 设置透明
- Android ToolBar 解析与应用(三)状态栏,toolbar,窗口背景,底部导航条颜色设置,
- Android如何设置背景透明、开关输入法、改变标题栏颜色、layer-list
- android 中 EditText加入图标 更改边框颜色 设置透明 代码
- Android:16进制颜色透明值设置
- android沉浸式 & 状态栏颜色设置
- android:设置背景图片、背景颜色透明
- Android 4.4之后设置状态栏颜色
- android 中 EditText加入图标 更改边框颜色 设置透明 代码
- Android设置透明状态栏,仿ios状态栏
- Android 4.4以后设置状态栏颜色
- Android 5.1 下设置 WebView颜色透明
- Android 使用SystemBarTint设置状态栏颜色