Android状态栏变色,沉浸式状态栏

Android状态栏变色,沉浸式状态栏

Android中的状态栏默认背景是黑色的,有的时候看起来不是很美观,所以现在很多时候公司的产品都会对状态栏改变颜色。
github上也有开源项目 SystemBarTint 用起来方便快捷。

下面是我对状态栏背景颜色改变总结:
* Android目前只支持系统是4.4以上的,4.4以下的就算你用开源也没有办法,反正我没有找到 *

  1. 先来一个快捷却解决不了的, 可以直接在style中添加
    <item name="android:statusBarColor">@color/bg_title</item>
    但是很遗憾会有提示说:需要API 21的 ,就是系统要5.0以上。5.0以下的状态栏颜色没有变化。

5.0以上的效果:

这里写图片描述

5.0以下的效果,还是原来的配方,还是原来的味道………

这里写图片描述

  1. 没事,关了一扇门还有门,办法还是有的。
    加载布局之后添加这两句代码,就有沉浸的效果,发现状态栏不见了(4.4系统以上的),
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  Window window = getWindow();
  window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}

效果如下,标题栏上移了。

这里写图片描述

其实就是我们的布局上移了,上移了状态栏的高度,这时候机会到了,我们可以在布局或者基类布局的顶部添加:

<View
        android:id="@+id/status_view"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_alignParentTop="true"
        android:visibility="gone"
        />

在代码中更改status_view的显示高度,让其等于状态栏高度,这时候之前的布局会整体下移状态栏高度,原理很简单。

RelativeLayout.LayoutParams params2 = (RelativeLayout.LayoutParams) statusView.getLayoutParams();
params2.height = statusBarHeight;
statusView.setLayoutParams(params2);

如果这时候statusView调用改变背景的方法,那么就可以达到所需的效果,包括状态栏渐变色都可以做到 只要你想做,哈哈
最后效果如下:
最后效果

如有不正确的地方,请指正,感激不尽。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用dialog来实现loading框时,每次dialog弹出时手机的状态栏会变成其他颜色,这会影响用户的感官体验。为了解决这个问题,你可以使用以下方法: 1. 首先,设置透明蒙层来解决状态栏变色的问题。你可以使用以下代码: ```java Window dialogWindow = mDialog.getWindow(); dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); dialogWindow.setBackgroundDrawableResource(android.R.color.transparent); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.dimAmount = 0.0f; dialogWindow.setAttributes(lp); ``` 2. 然后,当dialog初始化时调用`dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)`方法,这样dialog弹出时,状态栏的颜色将和Activity展示的状态栏保持一致,不会随着dialog的弹出和销毁而改变。 然而,这种方法会引发另一个问题,就是当设置了透明背景后,状态栏的字体也会变成白色。如果Activity标题背景是白色的话,会造成冲突。为了解决这个问题,你可以尝试以下方法: 1. 在dialog弹出之前,将状态栏字体颜色设置为黑色。你可以使用以下代码: ```java dialogWindow.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); ``` 2. 在dialog关闭后,将状态栏字体颜色恢复为白色。你可以使用以下代码: ```java dialogWindow.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); ``` 这样就可以解决android dialogfragment弹出时状态栏变色的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值