android状态栏一体化、沉浸式状态栏(兼容低版本)

摘要 Android 沉浸式状态栏、状态栏一体化、透明状态栏、仿ios透明状态栏


推荐好用的工具类:http://jaeger.itscoder.com/android/2016/03/27/statusbar-util.html

git地址:https://github.com/laobie/StatusBarUtil



Google 在 4.4 给全屏阅读文字或玩游戏这种情景增加了透明状态栏和透明导航栏的功能。

首先上两张乐家驿站应用的截图,实际效果大家也可以下载体验,乐家驿站下载:http://www.wandoujia.com/apps/com.haier.cabinet.customer


    


注意:本文是自定义标题栏,不用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的背景色保持一致。
布局文件:


    


    

由于我们要实现的是状态栏和顶部的控件是同一个颜色,同时,控件内容也不和状态栏重复,所以只要把那两行代码放到我们顶部的控件就可以了。

上面内容部分来自博客http://blog.csdn.net/carlos1992/article/details/46773059,感谢原作者。

下面我们来解决兼容性问题。

犹豫这个特性是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
name="title_bar_padding_top">0dp
values-v19/dimens.xml
name="title_bar_padding_top">20dp

首页(特产惠)的关键代码就这么多,下面我们来重点看第二个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

    

就这么简单,希望大家能够提出意见!


你可能感兴趣的:(Android开发,Android,UI)