其他
Android 样式系统 | 主题背景属性
在 Android 样式系统系列的前几篇文章中,我们介绍了主题背景与样式的区别,以及为什么说通过主题背景和公共主题背景属性来分解您要实现的内容是一个不错的主意,请点击链接回顾:
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<View …
android:background="@color/white"/>
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<View …
android:background="?attr/colorSurface"/>
深色主题 https://developer.android.google.cn/guide/topics/ui/look-and-feel/darktheme
即使您当前不支持其他主题 (什么,您的应用还没有支持深色主题?),我们依然建议您采用这种方法,因为这样会让新主题的采用变得更加简单。
合格的 Colors 文件
始终使用?
Material Design 规范文档 https://material.io/design/color/dark-theme.html#ui-application
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<FloatingActionButton …
app:backgroundTint="@color/owl_pink_500"/>
当前发展状况
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<View …
android:background="@color/primary_20"/>
ColorStateLists https://developer.android.google.cn/reference/android/content/res/ColorStateList
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<selector …
<item android:alpha="0.20" android:color="?attr/colorPrimary" />
</selector>
这种单项 ColorStateList (即只提供单个默认颜色,而非每种状态的不同颜色) 有助于减少您需要维护的颜色资源数量。它并没有定义一个新的颜色资源的方式来手动为您 (每一个配置文件) 的 primary 颜色设置 alpha 值,而是通过改变当前主题背景中的 colorPrimary 的方式。如果您的原始颜色发生了变化,则只需要在一个地方进行更新,无需调整所有已更新的地方。
1. 如果指定的颜色也具有 alpha 值,则 alpha 会被合并。例如,将 50% 的 alpha 应用于 50% 的不透明白色中,将产生 25% 的白色:
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<selector …
<item android:alpha="0.50" android:color="#80ffffff" />
</selector>
AppCompatResources.getColorStateList https://developer.android.google.cn/reference/androidx/appcompat/content/res/AppCompatResources.html#getColorStateList(android.content.Context,%20int)
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<View …
android:background="@color/foo"/>
ColorDrawable https://developer.android.google.cn/reference/android/graphics/drawable/ColorDrawable ColorStateListDrawable https://developer.android.google.cn/reference/android/graphics/drawable/ColorStateListDrawable
<!-- Copyright 2019 Google LLC.
SPDX-License-Identifier: Apache-2.0 -->
<View …
android:background="@drawable/a_solid_white_rectangle_shape_drawable"
app:backgroundTint="@color/some_color_state_list"/>
强制执行
《Making Android Lint Theme Aware》
https://proandroiddev.com/making-android-lint-theme-aware-6285737b13bc
间接使用
推荐阅读