You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12以下版本使用Material3动态颜色崩溃及替代方案咨询

Android 12以下版本Material3动态颜色崩溃的适配方案

Android 12(API 31)及以上才原生支持动态颜色,Material3库的material_dynamic_*系列资源仅在该版本以上存在,直接在低版本引用必然触发Resources$NotFoundException。结合你使用Theme.Material3.DayNight.NoActionBar主题的情况,给你三个可行的适配方案:

  • 使用Material3静态替代色资源
    Material3库为低版本提供了一套和动态颜色默认值对齐的静态颜色资源,命名格式为@color/m3_*,比如m3_primary、m3_primary_container、m3_secondary等。你可以直接用这些资源替换布局里的material_dynamic_*,比如material_dynamic_primary20对应m3_primary_container,这类资源在所有API版本都能正常加载。

  • 通过主题属性引用(推荐)
    避免直接引用具体颜色资源,改用主题中定义的属性,比如?attr/colorPrimary、?attr/colorPrimaryContainer、?attr/colorSecondaryContainer等。Material3的主题会自动适配版本:在Android12+时属性会指向动态颜色,低版本则指向静态默认色,无需手动区分版本。例如把布局里的android:background="@color/material_dynamic_primary20"改成android:background="?attr/colorPrimaryContainer",既能保留动态颜色特性,又能兼容低版本。

  • 手动版本区分颜色资源
    自定义一个统一的颜色名称,在不同版本的资源目录下分别指向动态色和静态色:

    1. 在res/values/colors.xml中定义低版本用的静态色:
    <color name="custom_primary20">@color/m3_primary_container</color>
    
    1. 在res/values-v31/colors.xml中定义高版本用的动态色:
    <color name="custom_primary20">@color/material_dynamic_primary20</color>
    

    之后布局里统一引用@color/custom_primary20即可,系统会自动根据当前API版本加载对应资源。

内容的提问来源于stack exchange,提问作者CryptoAlgorithm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:30:43