zoukankan      html  css  js  c++  java
  • 菜鸟新闻2--设置沉浸式状态栏的三种方法

      在4.4之前状态栏一直是黑色的,在4.4中带来了 windowTranslucentStatus 这一特性,因此可以实现给状态栏设置颜色,如下图所示,状态栏颜色不再是黑色,而是可以定制的颜色。

      国内将状态栏变色叫做沉浸式状态栏,时间久了,叫的人多了,大家就不再深究,默认了这种叫法。

    方法1:系统的方式沉浸式状态栏实现

    步奏一

    //当系统版本为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"
    

    eg:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:fitsSystemWindows="true"
            android:clipToPadding="true"
            android:layout_width="match_parent"
            android:layout_height="140dp"
            android:textSize="24dp"
            android:background="@color/mask_tags_1"
            android:text="你好,沉浸式状态栏"/>
    
    </LinearLayout>
    

    方法2:动态添加布局 实现沉浸式状态栏

    添加隐藏布局,然后我们动态的计算状态栏的高度,然后把这个高度设置成这个隐藏的布局的高度

    xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.translucentbarstest.TwoActivity">
    
        <!--这个是隐藏的布局,然后通过动态的设置高度达到效果-->
        <LinearLayout
            android:id="@+id/ll_bar"
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:orientation="vertical"
            android:background="#e7abff"
            android:visibility="gone">
        </LinearLayout>
        <TextView
            android:fitsSystemWindows="true"
            android:clipToPadding="true"
            android:layout_width="match_parent"
            android:layout_height="140dp"
            android:background="@color/mask_tags_3"
            android:text="你好,沉浸式状态栏"/>
    
    </LinearLayout>
    

    java:

    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;
        }
    }
    

    方法3:用的github上的第三方库

    1.库地址:https://github.com/jgilfelt/SystemBarTint

    2.添加依赖库: 
      compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’

    步骤1:

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

    步骤2:

    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);
    

    eg:

    xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffff"
        android:orientation="vertical"
        tools:context="com.example.translucentbarstest.ThirdActivity">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="140dp"
            android:background="@color/mask_tags_5"
            android:clipToPadding="true"
            android:fitsSystemWindows="true"
            android:text="你好,沉浸式状态栏"
            android:textSize="24dp"/>
    </LinearLayout>
    

    java:

    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);
            }
        }
    }
    

      

  • 相关阅读:
    移动端尺寸基础知识
    em与px换算
    ECharts是中国的,也是世界的。
    Sublime Text 使用介绍、全套快捷键及插件推荐
    HTML5 新属性placeholder 兼容ie
    链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别
    关于文字内容溢出用点点点(...)省略号表示
    Hello World!
    C# 在类中使用session
    SQL Server2008函数大全
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6876404.html
Copyright © 2011-2022 走看看