Clone this repo:
  1. 47d4cfb Update checkcolor.py hashbang to Python 3 am: ee59816895 am: 8b7e6cc073 am: 4f8c37e10d am: 383d3e0bf1 by Ember Rose · 10 months ago android13-dev android13-frc-adbd-release android13-frc-art-release android13-frc-cellbroadcast-release android13-frc-conscrypt-release android13-mainline-adservices-release android13-mainline-appsearch-release android13-mainline-go-adbd-release android13-mainline-go-adservices-release android13-mainline-go-appsearch-release android13-mainline-go-media-swcodec-release android13-mainline-go-mediaprovider-release android13-mainline-go-networking-release android13-mainline-go-neuralnetworks-release android13-mainline-go-odp-release android13-mainline-go-os-statsd-release android13-mainline-go-permission-release android13-mainline-go-resolv-release android13-mainline-go-scheduling-release android13-mainline-go-sdkext-release android13-mainline-go-tethering-release android13-mainline-go-tzdata4-release android13-mainline-go-uwb-release android13-mainline-go-wifi-release android13-mainline-tzdata4-release android13-mainline-uwb-release android13-qpr1-release android13-qpr1-s1-release main-16k master aml_ads_331131000 aml_ase_331011020 aml_go_adb_330913000 aml_go_ads_330913000 aml_go_ase_330913000 aml_go_mpr_330912000 aml_go_net_330913000 aml_go_neu_330912000 aml_go_odp_330912000 aml_go_per_330912000 aml_go_res_330912000 aml_go_sch_330911000 aml_go_sdk_330810000 aml_go_sta_330911000 aml_go_swc_330913000 aml_go_tet_330914010 aml_go_tz4_330912000 aml_go_uwb_330912000 aml_go_wif_330911000 aml_tz4_331012000 aml_tz4_331012040 aml_tz4_331012050 aml_uwb_330810010 aml_uwb_331015040 android-13.0.0_r16 android-13.0.0_r17 android-13.0.0_r18 t_frc_adb_330444000 t_frc_art_330443060 t_frc_ase_330444010 t_frc_cbr_330443000 t_frc_con_330443020
  2. 383d3e0 Update checkcolor.py hashbang to Python 3 am: ee59816895 am: 8b7e6cc073 am: 4f8c37e10d by Ember Rose · 10 months ago
  3. 4f8c37e Update checkcolor.py hashbang to Python 3 am: ee59816895 am: 8b7e6cc073 by Ember Rose · 10 months ago
  4. 8b7e6cc Update checkcolor.py hashbang to Python 3 am: ee59816895 by Ember Rose · 10 months ago
  5. ee59816 Update checkcolor.py hashbang to Python 3 by Ember Rose · 10 months ago android-s-qpr3-beta-1 android-s-v2-beta-3 android-t-preview-1 android-s-qpr3-beta-1 android-s-v2-beta-3 android-t-beta-3 android-t-preview-1 android-t-preview-2

Lint check for hardcoded colors

What is this lint check for

This check detects whether hardcoded colors have been added in a CL.

Starting in Android O, multiple device themes will exist on devices, enabling changing the look and feel of all system UI. In order to make that effort possible, colors in component that uses this check must be specified using theme attributes, rather than hardcoded colors. Otherwise, when the theme changes, this UI will not update properly.

Examples of hardcoded colors

Color files

<!-- File: res/values/colors.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="hardcoded_color">#FFFFFF</color>
</resources>

Layout files

<!-- File: res/layout/my_layout.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:textColor="#FF000000" />

Or

<!-- File: res/layout/my_layout.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:textColor="@color/hardcoded_color" />

Style files

<!-- File: res/values/styles.xml -->
<style name="MyStyle">
    <item name="android:textColor">#ff3c3c3c</item>
</style>

How to fix it

Use attributes in theming as much as possible

Here are some tips to choose the colors.

Choose colors for text

Use color attributes specified in the theme. Some examples:

  1. textColorPrimary
  2. textColorSecondary
  3. colorAccent

Choose colors for icon

For vector drawable, please use full opacity color as fillColor and tint it with theme attribute. example

Others

Please check the following table for more available options.

AttributeDescription
colorAccentBright complement to the primary branding color. By default, this is the color applied to framework controls (via colorControlActivated).
colorForegroundColor for foreground imagery. Most text and image colors will be based on some alpha of colorForeground.
colorBackgroundColor of background imagery, ex. full-screen windows.
colorBackgroundFloatingColor of background imagery for floating components, ex. dialogs, popups, and cards.
colorPrimaryThe primary branding color for the app. This is the color applied to the action bar background.
colorPrimaryDarkDark variant of the primary branding color. By default, this is the color applied to the status bar (via statusBarColor) and navigation bar (via navigationBarColor).
colorErrorColor used for error states and things that need to be drawn to the users attention.
textColorPrimary (colorPrimaryText)Is now constructed out of colorForeground and primaryContentAlpha.
textColorSecondary (colorSecondaryText)Is now constructed out of colorForeground and primaryContentAlpha.

How to bypass it

We strongly discourage bypassing color lint check.

However, if you need to bypass the check, please update the baseline.xml by running following command in package root folder(i.e. package/app/Settings/)

export ANDROID_LINT_JARS=$(gettop)/prebuilts/checkcolor/checkcolor.jar
lint --check HardCodedColor --xml color-check-baseline.xml .

After update the baseline.xml, your hardcoded color will be ignored in check. Please submit the new baseline.xml within your cl.

Contact us

  1. For help to remove hardcoded colors or report issue in color check, please contact jackqdyulei@google.com