Google 在 4.4 给全屏阅读文字或玩游戏这种情景增加了透明状态栏和透明导航栏的功能。
首先上两张乐家驿站应用的截图,其实在直播系统源代码开发中,也可以用到这样的状态栏效果。
注意:本文是自定义标题栏,不用android默认自带的标题栏。
第一步:设置 Acitivity 所在 window 的属性
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //透明状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); // Translucent status bar window.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }
//透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
只要加入上面两行代码,就可以实现直播系统源代码的沉浸式通知栏了。效果如图:
设置直播系统源代码状态栏的颜色
状态栏的颜色跟两个属性有关:
android:fitsSystemWindows="true" android:clipToPadding="true"
只要在某个view设置了该属性,那么状态栏的颜色就跟该view的背景色保持一致。
布局文件:
由于我们要实现的是直播系统源代码的状态栏和顶部的控件是同一个颜色,同时,控件内容也不和状态栏重复,所以只要把那两行代码放到我们顶部的控件就可以了。
上面内容部分来自carlos123456789博客,感谢原作者。
下面我们来解决兼容性问题。
由于这个特性是andorid4.4支持的,最少要api19才可以使用,那么低于4.4的怎么办呢?这里直播系统源代码还是通过自定义标题栏的方式解决。
首先我们来看怎么实现文章开头界面的效果。
本应用是FragmentAcitity+Framgment实现,故主界面是四个fragment组成。
MainUIAcitivy中onCreate方法:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //透明状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = getWindow(); // Translucent status bar window.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } // 强制更新 UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() { @Override public void onClick(int status) { switch (status) { case UpdateStatus.Update: break; default: // close the app AppToast.showShortText(MainUIActivity.this, "非常抱歉,您需要更新应用才能继续使用"); MainUIActivity.this.finish(); } } }); }
首页布局的加载如下代码,大家可以看到根据当前api是否大于4.4,加载不同的布局,归根到底就是标题栏的不同。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_home, container, false); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { view = inflater.inflate(R.layout.fragment_home_v19, container, false); } return view; }
fragment_home.xml
fragment_home_v19.xml
style.xml
values/dimens.xml
0dp
values-v19/dimens.xml
20dp
首页的关键代码就这么多,下面我们来重点看第二个fragment。
跟首页不同的是,fragment界面的标题栏是白色的,如果实现侵色,状态栏也是白色的,这样状态栏的白色字就看不见了,下面给出解决方法。
解决的办法还是直播系统源代码自定义标题栏。
原理:自定义标题栏(包含状态栏),背景为黑色,也就是状态栏的颜色。高度为68dp,然后设置paddingTop=20dp,这个20dp就是状态栏的高度。剩下的48dp就是我们真正的标题栏。
首先还是根据当前api是否大于4.4,加载不同的布局,归根到底就是状态栏的不同。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_life, container, false); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { view = inflater.inflate(R.layout.fragment_life_v19, container, false); } return view; }
fragment_life.xml
title_bar_main.xml
fragment_life_v19.xml
title_bar_main_v19.xml
style.xml
就这么简单,希望大家能够提出搭建直播系统源代码更好意见!
声明:本文由云豹科技转发自一叶飘舟博客,如有侵权请联系作者删除