如何为不同Android API版本的特定属性配置不同颜色?含colorPrimaryDark适配
针对不同Android API版本设置颜色属性的解决方案
1. 如何为不同Android API版本的特定属性选择不同颜色?
其实这个需求在Android开发里挺常见的,核心就是利用Android自带的资源目录分级机制来实现版本区分,步骤很清晰:
- 首先在你的
res目录下,创建对应API版本的资源子目录。比如要针对API23及以上,就建values-v23;如果要覆盖更低版本(比如API21),可以建values-v21,而最基础的values目录会作为所有旧版本的默认资源目录。 - 然后在每个版本目录下的
colors.xml文件里,定义同名的颜色资源。Android系统会根据当前设备的API版本,自动加载对应目录下的资源,完全不用你手动判断版本。 - 举个例子:如果想让
colorAccent在API21+是蓝色,旧版是灰色,那就在values/colors.xml里写<color name="colorAccent">#888888</color>,在values-v21/colors.xml里写<color name="colorAccent">#2196F3</color>就行。
2. 已为API>23设置colorPrimaryDark为白色,如何给旧版设为黑色?
你现在用tools:targetApi="23"标记的白色colorPrimaryDark,其实只是给Lint工具看的提示,告诉它这个资源是给API23+用的,但旧版设备还是会直接加载这个白色,达不到区分版本的效果。咱用最规范的资源目录方法来解决:
- 第一步,在默认的
res/values/colors.xml里定义旧版的黑色:
<color name="colorPrimaryDark">#000000</color>
- 第二步,创建
res/values-v23目录,在里面新建colors.xml文件,写入API23+的白色(保留tools:targetApi也没问题,能避免Lint警告):
<resources> <color name="colorPrimaryDark" tools:targetApi="23">#FFFFFF</color> </resources>
这样一来,API23及以上的设备会自动优先加载values-v23里的白色,旧版设备就会用values目录里的黑色,完美适配不同版本~
另外补充一句:tools:targetApi只是辅助Lint检查的属性,不会改变系统加载资源的逻辑,所以核心还是靠版本对应的资源目录来实现精准适配。
内容的提问来源于stack exchange,提问作者Waseem
相关产品推荐
相关产品推荐

