Android Theme


这里如果将ColorPrimary和colorPrimaryDark颜色值设置成一致,那么将会成为“沉浸式”,或者说是透明状态栏

 <style name="MyThemeRed" parent="Theme.AppCompat.Light.NoActionBar">
     <!--选中状态icon的颜色和字体颜色-->
    <item name="colorPrimary">@color/colorTheme</item>
    <item name="colorPrimaryDark">@color/colorTheme</item>
    <item name="colorAccent">@color/colorTheme</item>
    <!--正常状态下字体颜色和icon颜色-->
    <!--<item name="android:textColorPrimary">@color/colorTheme</item>-->
</style>

注意:他们android不同版本上实现方法不同

image.png
 /**
 * 设置状态栏颜色
 *
 * @param activity       需要设置的activity
 * @param color          状态栏颜色值
 * @param statusBarAlpha 状态栏透明度
 */

public static void setColor(Activity activity, @ColorInt int color, int statusBarAlpha) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
      //版本是大于19,设置背景为透明
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        int count = decorView.getChildCount();
        if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
            decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
        } else {
            StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
            decorView.addView(statusView);
        }
        setRootView(activity);
    }
}


 /**
 * 计算状态栏颜色
 *
 * @param color color值
 * @param alpha alpha值
 * @return 最终的状态栏颜色
 */
private static int calculateStatusColor(@ColorInt int color, int alpha) {
    float a = 1 - alpha / 255f;
    int red = color >> 16 & 0xff;
    int green = color >> 8 & 0xff;
    int blue = color & 0xff;
    red = (int) (red * a + 0.5);
    green = (int) (green * a + 0.5);
    blue = (int) (blue * a + 0.5);
    return 0xff << 24 | red << 16 | green << 8 | blue;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,718评论 25 709
  • 创建一个 Android 工程,第一步,也是必不可少的一步,就是定制 Application 主题样式。利用系统诸...
    亦枫阅读 6,332评论 1 30
  • 参考Attr、Style和Theme详解Android 深入理解Android中的自定义属性Android 中的T...
    合肥黑阅读 961评论 0 6
  • 我是去年冬天皈依佛门的,一直没有去深入了解佛教的历史。上周开始我看了南怀瑾老师《中国佛教发展略述》一下子感觉特特好...
    韩艾辰阅读 261评论 0 0
  • 晚秋的校园里充满了丝丝凉意,路边的雪松依旧挺拔,害怕寒冷的银杏叶早已落满了草坪,学校每时每刻都在变化着,原来的...
    一抹時光阅读 241评论 0 0