美文网首页
Android Material Design 沉浸式状态栏

Android Material Design 沉浸式状态栏

作者: 花椒人生 | 来源:发表于2018-03-26 18:01 被阅读0次

    Android 沉浸式状态栏

    Android 4.4 版本之前,我们是无法改变手机的状态栏的颜色。也就是说,无论打开哪个应用,状态栏都是黑色,与应用的风格非常不协调。为了提供更好的界面交互,google在Android 4.4 之后提供了设置沉浸式状态栏的方法。实际上的效果就是给状态栏设置透明的背景。

    1 隐藏状态栏
    1.1 隐藏状态栏和ActionBar
      public class MainActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(option);
            ActionBar actionBar = getSupportActionBar();
            actionBar.hide();
        }}
    

    这里先调用getWindow().getDecorView()的方法获取当前界面的DecorView,然后调用它的seteSystemUiVisibility()方法来设置系统UI元素的可见性。SYSTEM_UI_FLAG_FULLSCREEN 代表全屏的意思,也就是将状态栏隐藏。另外,根据Android设计建议,ActionBar是不应该独立于状态栏而单独显示,因此状态栏如果隐藏了,我们同时也需要调用ActionBar的hide()方法将ActionBar()也进行隐藏。

    1.2 Android 4.4 - 5.0 ,Android 5.0 以上,隐藏状态栏

    1.隐藏状态栏
    在状态中添加

        <item name="windowNoTitle">true</item>
    
    1. 获取状态栏高度

         private static int getStatusBarHeight(Activity activity){
             //获取状态栏的高度
             Resources resources = activity.getResources();
             int statusBarHeight = resources.getIdentifier("status_bar_height", "dimen", "android");
             return resources.getDimensionPixelOffset(statusBarHeight); 
        }
      
    2. 设置全屏

            public static void setActivityTranslucent(Activity activity){
            //5.0以上
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
             //获取DecorView
              View decorView = activity.getWindow().getDecorView();
             decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
             activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
            }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){//4.4 - 5.0 之间
             activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
         }
       }
      

    4.沉浸式状态栏

        public static void setStatusBarTranslucent(Activity activity){
        //5.0以上
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //获取DecorView
            View decorView = activity.getWindow().getDecorView();
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
        }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){//4.4 - 5.0 之间
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
            //在状态栏的部分添加一个布局 setContentView 的源码,自己添加一个布局(高度是状态栏的高度)
            View view = new View(activity);
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight(activity));
            view.setLayoutParams(params);
            view.setBackgroundColor(Color.TRANSPARENT);
    
            ViewGroup decorView = (ViewGroup)activity.getWindow().getDecorView();
            decorView.addView(view);
    
            //获取activity中setContentView布局的根布局
            ViewGroup contentView = activity.findViewById(android.R.id.content);
            contentView.setPadding(0,getStatusBarHeight(activity),0,0);
        }
    }

    相关文章

      网友评论

          本文标题:Android Material Design 沉浸式状态栏

          本文链接:https://www.haomeiwen.com/subject/bfdxcftx.html