Android 5.0 (API 21) 以上可用 Window.setStatusBarColor() 或 Toolbar 配合 fitsSystemWindows 修改狀態列顏色;5.0 以下無系統 API 支援。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
在根佈局最上層加入 View 佔位高度 = 狀態列高度,背景設為目標顏色。
implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'
SystemBarTintManager tintManager = new SystemBarTintManager(activity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(R.color.colorPrimary);
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
int statusBarHeight = resourceId > 0 ? getResources().getDimensionPixelSize(resourceId) : 0;
View statusBarView = new View(this);
statusBarView.setLayoutParams(new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
statusBarView.setBackgroundColor(Color.parseColor("#3F51B5"));
((ViewGroup) findViewById(android.R.id.content)).addView(statusBarView, 0);
fitsSystemWindows="true" 時需配合 android:clipToPadding="false"。WindowManager.LayoutParams.FLAG_FULLSCREEN) 會隱藏狀態列,不適用需保留狀態列的場景。