美文网首页Android知识我们就爱程序媛
如何使用代码更改 Activity 中 App Bar 的背景颜

如何使用代码更改 Activity 中 App Bar 的背景颜

作者: _WZ_ | 来源:发表于2016-11-20 07:55 被阅读140次

一般在设计 Activity 时,会设定 Activity 的主题,也就是套用某一个特定的 Theme。如果今天在启动 Activity 后,想要动态调整 App Bar 的背景颜色,可以在另外指定 Activity 所套用的 Theme 后,重新启动 Activity。然而,这样的程序只是为了换个颜色似乎有一点小题大作,所以在这篇文章中提供了另外一种不用重新启动 Activity 的方法。

由于在源代码中指定颜色值不是好习惯、不够弹性,所以示范的源代码会从指定的 Theme 中取出 colorPrimary 及 colorPrimaryDark 二项属性的内容,并分别套用到 App Bar 及 Status Bar。另外,示范的源代码使用的是衍生自 AppCompatActivity 的 Activity,所以在取得 Action Bar 的 Instance 时调用的是 getSupportActionBar()

完整的源代码如下:

    private void changeActionBarColor(int inThemeId) {
        ActionBar actionBar = getSupportActionBar();

        if (actionBar != null) {
            String primaryColor = null;
            String primaryColorDark = null;

            primaryColor = this.getThemePrimaryColor(inThemeId);
            primaryColorDark = this.getThemePrimaryColorDark(inThemeId);

            if (primaryColor != null && primaryColor.length() > 0) {
                actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(primaryColor)));
            }

            if (primaryColorDark != null && primaryColorDark.length() > 0) {
                Window window = this.getWindow();

                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(Color.parseColor(primaryColorDark));
            }
        }
    }

    private String getThemePrimaryColor(int inThemeId) {
        String result;
        int[] attrs = {R.attr.colorPrimary};
        TypedArray typedArray = obtainStyledAttributes(inThemeId, attrs);

        result = typedArray.getString(0);
        typedArray.recycle();

        return result;
    }

    private String getThemePrimaryColorDark(int inThemeId) {
        String result;
        int[] attrs = {R.attr.colorPrimaryDark};
        TypedArray typedArray = obtainStyledAttributes(inThemeId, attrs);

        result = typedArray.getString(0);
        typedArray.recycle();

        return result;
    }

相关文章

网友评论

    本文标题:如何使用代码更改 Activity 中 App Bar 的背景颜

    本文链接:https://www.haomeiwen.com/subject/imojuttx.html