Theme.NoTitleBar.Fullscreen 主题设置状态栏颜色无效

Theme.NoTitleBar.Fullscreen 主题

<activity
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    android:name=".Activity2"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<style name="Theme.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

设置状态栏方法

private void setStatusBarColor(@ColorInt int color) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(color);
    }
}

如果设置了Theme.NoTitleBar.Fullscreen主题,实际运行效果是:状态栏黑色背景

一开始我还以为设置状态栏颜色的方法setStatusBarColor无效呢?
在这里插入图片描述

经过多次测试小结:

  • 如果调用了设置全屏接口:状态栏是黑色背景
  • 如果调用了隐藏状态栏接口:状态栏是黑色背景
  • 如果 Activity 设置了全屏的主题:状态栏是黑色背景

不调用全屏或隐藏接口,直接设置 Activity android:background="@color/colorGray"

在这里插入图片描述

但是我需要隐藏状态栏,怎么办?

实在没办法了,偷点懒

  • 设置全屏显示
  • 在布局上设置虚拟的,状态栏高度的 view (这样总算是可以自定义颜色了)
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ConfigVigame.getInstance().setFullScreen(this);

        setContentView(R.layout.layout_dialog);

        boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
        if (!isLandscape) {
            View v = findViewById(R.id.custom_status_bar_view);
            ViewGroup.LayoutParams lp = v.getLayoutParams();
            lp.height = getStatusBarHeight(this);
            v.setLayoutParams(lp);
        }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值