Lessons from the Chrome staff

Lessons from the Chrome staff

0 0
Read Time:10 Minute, 14 Second

Posted by Rebecca Gutteridge, Developer Relations Engineer on Android

blue and green phone illustration 


With the discharge of Android 12 and Materials You, we supplied documentation and steerage on dynamic coloration foundations, easy methods to implement dynamic coloration in Jetpack Compose and a getting began codelab. However making a scalable, personalised, and accessible app with dynamic coloration can really feel like a frightening activity. We talked to designers and builders on Google Chrome, they usually provided to share some tips about how they approached it at scale for his or her Android app. Right here’s what they recommend in case you are contemplating adopting dynamic coloration in your app.

The place to start out

Begin by reviewing all of your present screens in your app and determine your present colours, themes and surfaces. Chrome kicked off a design assessment and evaluated their coloration scheme. Materials 3 encourages designers and builders to make use of coloration tokens which allow flexibility and consistency throughout an app by permitting designers to assign a component’s coloration function in a UI, reasonably than a set worth. That is significantly highly effective when contemplating designing for mild and darkish themes and dynamic coloration.

An example surface for Chrome, the Tab Switcher, identifying the color token for each element

Determine 1 : An instance floor for Chrome, the Tab Switcher, figuring out the colour token for every ingredient

Your app might have already got a coloration token system, so reviewing how the brand new Materials You dynamic coloration enabled coloration scheme matches your earlier naming conference is a crucial train. Engineering ought to align with UX to assessment the brand new coloration token system along with your mocks. That is additionally alternative to assessment your present colours.xml, themes.xml and kinds.xml.Specifically examine that your app appropriately differentiates between Kinds and Themes in addition to appropriately extending from base themes. It’s also value reviewing if there are redundant colours in your present scheme or a possibility to make a extra constant coloration scheme all through your app. Dynamic coloration implementation with Compose can also be obtainable.


Guaranteeing your app’s coloration system is accessible is important for designing for everybody and creating merchandise which might be inclusive to the widest potential viewers. Dynamic coloration is dedicated to guaranteeing that the colour choice mannequin has accessibility necessities inbuilt. Materials 3 coloration schemes are outlined by tonality reasonably than hue or hex worth, this technique of tonal palettes is central to creating any coloration system accessible by default. Utilizing a minimal 60 luminance unfold in coloration pairings supplies sufficient distinction to make sure accessibility requirements.

Combining color based on tonality, rather than hex value or hue, is one of the key systems that make any color output accessible.

Determine 2 : Combining coloration based mostly on tonality, reasonably than hex worth or hue, is likely one of the key methods that make any coloration output accessible.

Section method

When implementation, think about this improve as a phased method if wanted, concentrating on the first surfaces first and leveraging that dynamic coloration will be utilized at a per exercise degree. This was how Chrome was capable of replace their app and used it as a possibility emigrate a few of their older UI app compat parts to the fashionable Materials 3 parts, reminiscent of High app bar.

Learn how to assist customized colours

Your app might have customized colours or model colours that you don’t want to alter with the consumer’s choice. These can merely be added moreover as you might be constructing out your coloration scheme. Alternatively you possibly can import further colours to increase your coloration scheme utilizing the Materials Theme Builder to create a unified coloration system. The theme builder features a coloration harmonization function that shifts the tone of a customized coloration to make sure that visible steadiness and accessible distinction is achieved when mixed with user-generated colours.

Understand how to harmonize custom colors with the Material guidance.

Determine 3: Perceive easy methods to harmonize customized colours with the Materials steerage.

For Chrome, here’s a deep dive into two examples of the place protected colours are vital for them and the way they approached it.

Writer colours

It is vital that Chrome permits for manufacturers to maintain their recognized colours and never influence that performance when adopting dynamic coloration.

Publishers have the flexibility to set a writer coloration utilizing a metadata ingredient of their html. The highest toolbar is managed utilizing a choice tree to programmatically decide the toolbar coloration and icon coloration based mostly on a collection of cascading guidelines:

  • Incognito mode has the very best precedence. If Incognito is enabled, the toolbar and icon colours comply with the darkish baseline palette.
  • For night time theme, toolbar and icon colours comply with the darkish dynamic theme reasonably than the writer coloration to make sure a persistently darkish UI.
  • For day theme, the toolbar coloration is ready to the writer coloration, the icon coloration is both white or grey based mostly on whether or not the writer coloration is a darkish or mild coloration by way of util methodology.
  • If the writer coloration is just too brilliant or not specified, Chrome defaults to the sunshine dynamic theme.


In Incognito mode, the darkish grey coloration scheme has a semantic significance and reassurance for customers. Chrome determined to protect and leverage their present coloration system and never change it dynamically.

Phone showing incognito mode

Determine 4: Incognito mode stays the identical

To realize this, Chrome outlined non adaptive colours that map to hex values and adaptive colours that map to totally different non adaptive colours for day/night time mode. For incognito mode, Chrome makes use of the darkish non adaptive colours as they’re simply acknowledged by the customers as incognito. With these adaptive colours, Chrome created a baseline theme.

The desk under exhibits what their background colours appear to be after making use of dynamic colours:

Table showing what background colors look like after applying dynamic colors

Themes and Theme Overlays

One factor to contemplate for adhering to theme greatest practices, is to leverage Theme Overlays correctly. The Chrome staff used this chance to refactor their themes and leveraged the facility of Theme Overlays for a given exercise. At instances Chrome noticed that full themes had been getting used the place a ThemeOverlay can be extra acceptable. Dynamic coloration and Material3 encourages higher code hygiene.

Check out this instance, beforehand the theme for full display dialogs inherited from a full theme. This overrode all of the attributes from the exercise theme, undoing the dynamic colours or any overrides which might be utilized on the exercise degree. With the dynamic coloration work, the staff turned extra deliberate in how they outline and use their theming.


    <fashion identify="Base.Theme.Chromium.Fullscreen" mum or dad="Theme.BrowserUI.DayNight">
    <merchandise identify="windowActionBar">true</merchandise>
          <merchandise identify="colorPrimary">...</merchandise>
          <merchandise identify="colorAccent">...</merchandise>


    <fashion identify="Base.ThemeOverlay.BrowserUI.Fullscreen" mum or dad="">
    <merchandise identify="android:windowContentTransitions">false</merchandise>

Suggestions from Google Chrome designers

This part shares some key classes that Chrome’s designers utilized to efficiently create an intentional and unified theme

  • Create a unified design system: Materials 3 and dynamic coloration offers the chance to reconcile your app’s themes. For Chrome that meant reconciling their mild and darkish theme and eradicating fragmentation based mostly on elevation.
  • Figuring out easy methods to migrate present coloration system: Perceive the function of your present coloration system and tokens, if relevant, and the way they map onto the M3 coloration tokens.
  • Use accent colours meaningfully: Materials 3’s accented coloration tokens are extremely highly effective and helpful, iterate on how greatest to make use of them.
  • Phased method: Deal with just a few surfaces first. Dynamic coloration is more and more a part of the consumer’s expectation of their gadget, so work out which surfaces make sense to undertake first after which iterate and increase to extra surfaces.
  • Work carefully along with your engineers from the start: Share designs as quickly as you have got them along with your engineers. Chrome designers requested questions to know how Chrome was constructed so they might set up how coloration can be utilized and which parts may be affected. It will make it easier to make higher knowledgeable selections on which surfaces/parts are up to date since there may very well be many dependencies in your app.
  • Create customized tokens: If it is advisable use dynamic colours that aren’t a part of the out of the field coloration system, create a customized coloration token that extends your coloration theme.

Suggestions from Google Chrome builders

This part shares some key classes that Chrome’s builders utilized to efficiently migrate

  • Have a rigorous theme code hygiene: Create a baseline set of colours with out dynamic for situations the place dynamic coloration isn’t utilized, eg, incognito mode after which prolong with theme and theme overlays.
  • Perceive easy methods to use floor colours: Surfaces are handled with “elevation” to permit differentiation from the background and layered parts like app bars, and different navigation parts; this can be a paradigm shift for some apps. Floor colours are calculated at runtime, so there isn’t any useful resource/coloration/macro to retrieve them at present. Chrome determined to create a utility methodology to calculate floor colours utilizing `ElevationOverlayProvider`. Nonetheless, that is solely obtainable to make use of programmatically whereas we additionally wanted to implement dynamic coloration for a lot of layouts in bulk. For this function, they created a customized Drawable that may draw a floor coloration based mostly on a supplied elevation worth. One disadvantage of this method is {that a} legacy pre-dynamic colours model of every drawable have to be maintained for compatibility with outdated Android variations.
  • Significance of utilizing Exercise context: It’s vital to make use of the Exercise context to inflate views because the Exercise has the theme with the dynamic coloration overlay utilized.
  • Selection of methodology to get colours: Utilization of ‘Sources#getColor(int)’ was quite common in Chrome’s codebase as a result of they wanted to assist older Android variations. Nonetheless, to assist dynamic coloration, the `#getColor` methodology ought to be capable of resolve the colour assets in opposition to the theme. So, Chrome migrated the `Sources#getColor` calls to `Context#getColor`.
  • Macros: Chrome makes use of semantic coloration names to have a unified coloration system all through the app. Earlier than the dynamic coloration adoption, a semantic coloration would look one thing like this:

    @coloration/default_text_color_light: Shade used for main textual content

    → @coloration/default_text_color_dark/@coloration/default_text_color_light (adaptive to nighttime mode)

    → @coloration/modern_grey_900/@coloration/modern_white

    → #1F1F1F / #FFFFFF

    Your app might have already got a semantic coloration system and so migrating provides further concerns. For Chrome they wished to protect their semantic colours. In collaboration with UX, they translated the prevailing coloration palette to the Materials coloration roles/attributes. Their first thought was to level to those attributes from the prevailing semantic colours. For instance, @coloration/default_text_color from the instance above would appear to be this: <coloration identify="default_text_color">?attr/colorOnSurface</coloration>. Nonetheless, the @coloration useful resource can’t level to an ?attr. The subsequent thought was to transform all semantic `@coloration`s to `?attr`s with the identical names. This method additionally triggered points as they wanted so as to add all of the attributes to their themes and there are lots of actions, themes and entry factors to Chrome, so it might be difficult to take care of. Lastly, they adopted the newly launched <macro> tag. Macros are very similar to C/C++ macros however for Android assets: they’re changed with no matter they level to at construct time. So semantic colours turned semantic macros, for instance, <macro identify="default_text_color">?attr/colorOnSurface</macro>. This made it potential to implement dynamic colours at bulk. One limitation of macros is that they can’t be accessed programmatically, however Chrome added static utility strategies to work round this. The macro tag is now obtainable in Android Studio Canary.

Dynamic coloration is coming to extra Android 12 telephones globally, together with units by Samsung, OnePlus, Oppo, Vivo, realme, Xiaomi, Tecno, and extra! As you’re employed with dynamic coloration in your app, we’d like to get your suggestions by way of the Materials Android subject tracker. Glad coloring!

0 %
0 %
0 %
0 %
0 %
0 %

Average Rating

5 Star
4 Star
3 Star
2 Star
1 Star

Leave a Reply

Your email address will not be published.