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);
}