最近做项目需要经常修改Android主题,对于每个Activity都进行自定义主题设置,下面讲一下对于主题的一些使用心得。
1. 全屏显示activity
由于studio中继承AppCompatActivity,所以在setContentView方法前才用getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
这种方法可能不会起作用,需要自己在主题中进行设置。
<style name="AppTheme2" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:background">@drawable/transparent</item>
//设置全屏的属性
<item name="android:windowFullscreen">true</item>
<!--<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>-->
<item name="android:windowContentOverlay">@android:color/transparent</item>
<item name="android:windowBackground">@color/background</item>
//设置沉浸式状态栏的colorPrimaryDark属性,SDK19之后起作用
<!--<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
<item name="colorAccent">@color/colorAccent</item>
</style>
全屏显示会隐藏标题和状态栏。如果想隐藏状态栏使用一个单独的代码
WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
这个方法可以隐藏状态栏。这些代码放在setContentView之前
2、自定义主题
利用style标签,自定义name,选择继承一个parent,就会有parent的所有属性,和java中的继承一致。子类可以覆盖重写父类的属性,也可以拥有特有的属性。
<style name="AppTheme.My" parent="AppTheme">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/transparent</item>
</style>
<style name="AppTheme.My2" parent="AppTheme">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/black</item>
</style>