Window的各种效果
默认的效果
导航栏显示,内容处于导航键上方
style
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
fitSystemWindow
单独使用fitSystemWindow是没有效果的,如下图
fitSystemWindow配合透明状态栏和导航栏
<style name="TransparentStyle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<!--设置导航栏/状态栏窗口color为透明-->
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<!-- <item name="android:windowNoTitle">true</item>-->
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<!-- Customize your theme here. -->
<!-- <item name="colorPrimary">@color/colorPrimary</item>-->
<!-- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
<!-- <item name="colorAccent">@color/colorAccent</item>-->
</style>
FitsystemWindow内容延申到状态栏
public class NormalFitSystemWindowTransparentCoverNavigationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_fitsystemwindow_transparent_content_tonavigation);
RelativeLayout backgroundLayout = findViewById(R.id.background_layout);
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) backgroundLayout.getLayoutParams();
layoutParams.bottomMargin = - getRealNavigationBarHeight(this);
layoutParams.topMargin = - getStatusBarHeight();
backgroundLayout.setLayoutParams(layoutParams);
}
public int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
public static int getRealNavigationBarHeight(Context context) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
}
}
最后有一个小技巧补充一下,改变状态栏图标的颜色:
//切换到浅色状态栏模式,黑字
getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
//切换到深色模式,白字
getWindow().getDecorView()
.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
Demo地址:
https://github.com/HumorSmith/UsefulDemoZip/blob/master/windowFit.rar