通过设置 Theme 主题设置状态栏透明
因为 API21 之后(也就是 android 5.0 之后)的状态栏,会默认覆盖一层半透明遮罩。且为了保持4.4以前系统正常使用,故需要三份 style 文件,即默认的values(不设置状态栏透明)、values-v19、values-v21(解决半透明遮罩问题:android:windowTranslucentStatus设置为false)。
我们在res下建适应不同版本的styles文件:
默认values:
<style name="ColorTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--在Android 4.4之前的版本上运行,直接跟随系统主题-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
新建values-v19:
<!-- 状态栏和ToolBar颜色一致 -->
<style name="ColorTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
新建values-v21:
<!-- 状态栏和ToolBar颜色一致 -->
<style name="ColorTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
加了三个styles文件以后 我们在manifest清单文件中,在activity引用"ColorTranslucentTheme"这个主题即可。
每个页面都有自己的主题,但是你会发现只这样做会把内容和状态栏交错重叠在一起,所以我们要在布局文件的顶部设置一个View来达到不重叠效果:
<View
android:layout_width="match_parent"
android:layout_height="25dp"
android:background="#D53D3C"/>
当然,如果你的布局里面顶部图片想要延申到状态栏,那么就不用这个View了。
欢迎界面隐藏标题栏在setContentView(R.layout.activity_welcome);方法前添加代码:
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);
网友评论