在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();
}
}
}
首先给出一张图:
通过上图,我们可以通过设置不同的属性来达到控制不同位置颜色的目的,下面给出使用示例,修改res/values-19里面的内容:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
- "colorPrimary"
>@android:color/holo_blue_bright
- "colorPrimaryDark">@android:color/holo_blue_bright
style>
主要是设置 colorPrimary,colorPrimaryDark这两个属性的值来设置状态栏的颜色,需要注意的是:
1:AndroidManifest.xml文件中的targetSdkVersion必须设置在 21 以上。
2.parent主题必须是 Theme.AppCompat 开头,兼容包下的主题,所以必须一用 v7 包。
首先修改res/values-v19文件夹下的styles.xml文件内容如下(如果没有可以新建一个):