Android如何设置顶部状态栏颜色(主题)
2020-09-10 本文已影响0人
凤箫之舞
在Android中我们经常需要设置屏幕顶部状态栏的主题和应用页面保持同一风格,本文介绍几种常用的设置方案:
状态栏将显示为纯净的颜色,没有渐变效果
/**
* 状态栏相关工具类
*
*/
public class StatusBarUtils {
//设置Activity对应的顶部状态栏的颜色
public static void setWindowStatusBarColor(Activity activity, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
//设置Dialog对应的顶部状态栏的颜色
public static void setWindowStatusBarColor(Dialog dialog, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = dialog.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(dialog.getContext().getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过style来设置应用顶部状态栏的颜色
首先给出一张图:
2通过上图,我们可以通过设置不同的属性来达到控制不同位置颜色的目的,下面给出使用示例,修改res/values-19里面的内容:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@android:color/holo_blue_bright</item>
<item name="colorPrimaryDark">@android:color/holo_blue_bright</item>
</style>
主要是设置 colorPrimary,colorPrimaryDark这两个属性的值来设置状态栏的颜色,需要注意的是:
1:AndroidManifest.xml文件中的targetSdkVersion必须设置在 21 以上。
2.parent主题必须是 Theme.AppCompat 开头,兼容包下的主题,所以必须一用 v7 包。
在顶部标题栏设置属性值达到风格一致的目的
首先修改res/values-v19文件夹下的styles.xml文件内容如下(如果没有可以新建一个):
<style name= "AppTheme" parent="@style/BaseAppTheme">
<item name="android:windowTranslucentStatus">true</item>
</style>
然后设置顶部标题控件的两个属性:
android:background="@android:color/holo_blue_bright"
android:fitsSystemWindows="true"
这时状态栏会保持与设置fitsSystemWindow属性的控件的背景颜色一致。