fragment和activity设置沉浸式方法并不一样。
一个一个来吧。首先说设置普通activity的。注意,一定要先判断,如果手机的SDK版本在19以下,就别弄了,没用
安卓7.0之后,沉浸式状态栏变灰问题,解决办法,再setContentView之前添加以下代码。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ try { @SuppressLint("PrivateApi") Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView"); Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor"); field.setAccessible(true); field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //改为透明 } catch (Exception ignored) {} }
1、在style中自定义主题。
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowTranslucentStatus">true</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorPrimaryDark</item> </style> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorPrimary</item> </style>
2、在AndroidManifest中想设置的actitvity下的theme中设置主题。
<activity android:name=".activity.AddItemActivity" android:label="添加项目" android:launchMode="singleTask" android:parentActivityName=".activity.MainActivity" android:theme="@style/AppTheme.NoActionBar">
3、在你的活动的布局的跟布局下加一行代码,至于为什么要加,你可以自己不加试试效果。
android:fitsSystemWindows="true"
到此为止,你应该已经实现了沉浸式。但是这并不是重点,这都是小菜。大坑来了。。
4、如果你在活动中使用了toolbar,恭喜你,需要注意了。你会发现按照上面的设置还是会出现不同的问题,你并不能在布局文件的根布局下加第三点中所说的代码。你应该在toolbar中添加。
5、真正的大坑来了,活动中嵌套fragment,而且活动中还使用了toolbar。注意。这样做需要注意以下几点:toolbar中还需要添加第三条中的代码;你的fragment中的第二个布局中添加那行代码,没错,并不是根布局,一定要注意。这样基本上差不多了。
但是,如果这些还是满足不了你的需求,看下面。
6、在se't'Content'View前添加两行代码,当然最好还是进行一下SDK的判断。必须大于19以上才可以
/*//透明状态栏 getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
7、第六点只是把状态栏给隐藏了。并没有实现沉浸式,因为这里说的是强制。所以下面这段代码是强制给状态栏添加一个颜色
View views = new View(getActivity()); ViewGroup.LayoutParams params = new ViewGroup .LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 60); views.setLayoutParams(params); views.setBackgroundColor(Color.rgb(18,150,219)); ViewGroup decorView = (ViewGroup) getActivity().getWindow().getDecorView(); decorView.addView(views);*/