使用透明状态栏时新活动的状态栏变白
Statusbar of new activities turns white when using transparent statusbar
每次我从 MainActivity
启动新的 activity 时,新的 activity 的状态栏都会变成白色。由于某种原因,此问题不会影响最初加载的 Activity MainActivity
。
我意识到这个行为在线程 上已经讨论得够多了,但是大多数建议的解决方案都围绕着禁用透明状态栏,我找不到任何其他解决方案对我有用。
这是我的一项活动的布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<FrameLayout
android:id="@+id/search_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
属性 android:fitsSystemWindows="true"
在这里似乎没有效果,因为我的 activity 布局的所有内容都已经符合系统 window 边界。只是状态栏是全白的。
我依赖我的透明状态栏,因此无法禁用它。有没有其他方法可以防止所描述的行为?
我现在确定了两种实现所需行为的解决方案:
- 修改 activity 的
onCreate
方法中的 window 标志:
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
这会将状态栏涂成灰色,以便系统图标再次可见。
- 修改活动根布局的背景颜色以匹配所需的状态栏颜色:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@color/colorPrimaryDark">
<FrameLayout
android:id="@+id/search_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
由于 Phoenix Wang 的友好评论,我能够找到最后的解决方案。
每次我从 MainActivity
启动新的 activity 时,新的 activity 的状态栏都会变成白色。由于某种原因,此问题不会影响最初加载的 Activity MainActivity
。
我意识到这个行为在线程
这是我的一项活动的布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<FrameLayout
android:id="@+id/search_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
属性 android:fitsSystemWindows="true"
在这里似乎没有效果,因为我的 activity 布局的所有内容都已经符合系统 window 边界。只是状态栏是全白的。
我依赖我的透明状态栏,因此无法禁用它。有没有其他方法可以防止所描述的行为?
我现在确定了两种实现所需行为的解决方案:
- 修改 activity 的
onCreate
方法中的 window 标志:
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
这会将状态栏涂成灰色,以便系统图标再次可见。
- 修改活动根布局的背景颜色以匹配所需的状态栏颜色:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@color/colorPrimaryDark">
<FrameLayout
android:id="@+id/search_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
由于 Phoenix Wang 的友好评论,我能够找到最后的解决方案。