沉浸式状态栏

沉浸式状态栏只支持安卓4.4及以上的版本
状态栏:4.4上是渐变色,5.0上是完全透明。
第一种场景:
1.首先在values、values-v19、values-v21文件夹下的styles.xml都设置一个 新的style

values/styles

<style name="CustomTheme" parent="AppTheme">  
        <!--Android 4.4之前的版本上运行,直接跟随系统主题-->  
    </style>  

values-v19/styles

<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">  
        <item 
        name="android:windowTranslucentStatus">true 
        </item>  
        <item
        name="android:windowTranslucentNavigation">true
        </item>  
</style>  

values-v21/styles

    <style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar">  
        <item 
        name="android:windowTranslucentStatus">true  
        </item>  
        <item 
        name="android:windowTranslucentNavigation">true
        </item>  
 <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->  
<item name="android:statusBarColor">@android:color/transparent 
</item>  
    </style>  

2.给 activity 设置theme属性值为@style/CustomTheme

<activity android:name=".MainActivity"  
           android:theme="@style/CustomTheme">  
</activity>  

3.去除标题栏
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

使用纯代码实现:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//WindowManager.LayoutParams.FLAG_TRANSLUCE 使状态栏半透明
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
 //去除标题栏 
 //继承AppCompatActivity使用  
 supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
 //继承Activity使用  
 // requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色,手动设置状态栏颜色
            getWindow().setStatusBarColor(Color.TRANSPARENT);          
        }

效果图
这里写图片描述

这里要注意如果你此时在R.layout.activity_main布局文件中设置fitsSystemWindows=“true”
效果图
这里写图片描述

fitsSystemWindows=“false”
效果图
这里写图片描述

System windows指的就是屏幕上status bar 、 navigation bar等系统控件所占据的部分。而android:fitsSystemWindows=”true”就是通过设置View的padding,使得应用的content部分(Activity中setContentView()中传入的view)不会与system window重叠。

第二种场景把状态栏颜色和App的导航栏颜色一样。

第一步: 状态栏透明化;
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window window = getWindow();    
  window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
第二步: 去除标题栏
  //继承AppCompatActivity使用  
 supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
 //继承Activity使用  
 // requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.activity_main);
第三步: sdk版本5.0以上直接调用 getWindow().setStatusBarColor(color)设置颜色。
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (statusColor != INVALID_VAL) {
                getWindow().setStatusBarColor(statusColor);
            }
            return;
        }
//sdk版本5.0以下Window对象没有setStatusBarColor()方法。所以这里创建一个与状态栏高度相同的view,李代桃僵,给他设置颜色来达到效果。
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            int color = COLOR_DEFAULT;
            ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content);
            if (statusColor != INVALID_VAL) {
                color = statusColor;
            }
            View statusBarView = new View(this);
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    getStatusBarHeight(this));
            statusBarView.setBackgroundColor(color);
            contentView.addView(statusBarView, lp);
        }
第四步: 布局文件添加fitsSystemWindows=“true”,结束

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值