沉浸式状态栏设置的几种方式

先上效果图

总共有三种方法,下面一一介绍:
     第一种
     布局中顶层容器配置:

android:clipToPadding="true"
android:fitsSystemWindows="true"

     结果如下
这里写图片描述
     在Activity对应的style里面设置:

<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>

     总共是这样
这里写图片描述
第二种
     在Activity代码中添加:

private void initWindows() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.BLACK);
}
}

     然后在setContentView方法前调用即可
     如下图
这里写图片描述
     第三种
     调用第三方jar包
     在gradle中配置:

compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'

     如下图
这里写图片描述

     在Activity里添加:

        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.setStatusBarTintColor(Color.GREEN);
            //Apply the specified drawable or color resource to the system navigation bar.
            //给导航栏设置资源
            tintManager.setNavigationBarTintResource(R.mipmap.ic_launcher);
        }

     如图
这里写图片描述

     注释很明确了,我也不多说。
    最后我还要添一个,如果想让状态栏背景栏颜色和该页面顶端颜色一样,就用我下面这个。配置和第一种都一样,自己回上去去看。
     然后在Activity里添加代码
代码如下:

        new Thread(){
            @Override
            public void run() {
                super.run();

                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
                int pixel = bitmap.getPixel(1, 1);//获取颜色
                int redValue = Color.red(pixel);
                int blueValue = Color.blue(pixel);
                int greenValue = Color.green(pixel);
                Message message = new Message();
                message.what = 123;
                message.obj = redValue;
                message.arg1 = greenValue;
                message.arg2 = blueValue;
                handler.sendMessage(message);
                Log.d("MainActivity.this", "redValue" + redValue + "blueValue" + blueValue + "greenValue" +
                        greenValue + "height" + bitmap.getHeight() + "width" + bitmap.getWidth());
            }
        }.start();
和

        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what)
                {
                    case 123:
                        activity_main.setBackgroundColor(Color.argb(255, (int)msg.obj, msg.arg1, msg.arg2));
                }
            }
        };

       什么意思呢?就是获取该页面顶端图片座标(1,1)的像素,然后传出去,再设置状态栏颜色,很简单了。
  Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic);这里的R.drawable.pic就是我们需要分析的图片,每个人都不一样,自己填进去即可。
最后给出资源:http://download.csdn.net/detail/wanxuedong/9890210

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章