本文实例讲述了Android编程中沉浸式状态栏的三种实现方式。分享给大家供大家参考,具体如下:沉浸式状态栏Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.0以上系统一样了。
首先看下效果
首先看下第一种方式系统的方式沉浸式状态栏实现步奏一//当系统版本为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"
我们看下activity和布局文件FirstActivity.java:/*** 沉浸式状态栏*/ private void initState() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}
activity_first.xml:
接着看下第二种方式实现思路,添加隐藏布局,然后我们动态的计算状态栏的高度,然后把这个高度设置成这个隐藏的布局的高度,便可以实现在这里我们通过反射来获取状态栏的高度/*** 通过反射的方式获取状态栏高度** @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;}
来看下SecondActivity和布局文件吧SecondActivity.javapackage com.example.translucentbarstest;import android.os.Build;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.WindowManager;import android.widget.LinearLayout;import java.lang.reflect.Field;/*** Created by 若兰 on 2016/1/22.
* 一个懂得了编程乐趣的小白,希望自己* 能够在这个道路上走的很远,也希望自己学习到的* 知识可以帮助更多的人,分享就是学习的一种乐趣* QQ:1069584784*/ 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;}}
activity_second.xml:
接下来看下第三种这个是用的github上的第三方库1.库地址:https://github.com/jgilfelt/SystemBarTint
2.添加依赖库:
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'步奏一android:fitsSystemWindows="true"android:clipToPadding="true
步奏二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);
来看下代码吧ThreeActivity.javapackage com.example.translucentbarstest;import android.os.Build;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.WindowManager;import com.readystatesoftware.systembartint.SystemBarTintManager;/*** Created by 若兰 on 2016/1/22.
* 一个懂得了编程乐趣的小白,希望自己* 能够在这个道路上走的很远,也希望自己学习到的* 知识可以帮助更多的人,分享就是学习的一种乐趣* QQ:1069584784*/ 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);}}}
activity_three.xml:
好了,原来自己以为沉浸式状态栏听着好厉害(有可能自己原先不知道),但是真正自己去做了,去了解了,也没有那么难、那么神秘了,我想这也是自己成长了一些。
继续努力。这个是上传的github上的demo:https://github.com/wuyinlei/-更多关于Android相关内容感兴趣的读者可查看本站专题:《Android资源操作技巧汇总》、《Android视图View技巧总结》、《Android操作XML数据技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》及《Android控件用法总结》希望本文所述对大家Android程序设计有所帮助。
您可能感兴趣的文章:Android Studio 全屏沉浸式透明状态栏效果的实现Android实现沉浸式状态栏功能Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果Android沉浸式状态栏的实现代码Android沉浸式状态栏设计的实例代码解决Android 沉浸式状态栏和华为虚拟按键冲突问题Android 沉浸式状态栏与隐藏导航栏实例详解Android 详解沉浸式状态栏的实现流程
