了解菜单图标颜色的由来

时间:2019-09-30 18:22:10

标签: android material-design android-appcompat material-components

我目前正在研究Google IO 2019源代码,有一件事我不知道它是从哪里来的:汉堡菜单图标的颜色。

以下是mobile\src\main\res\layout\fragment_codelabs.xmlsource link)的预览的屏幕截图: enter image description here

这是汉堡菜单图标的放大图,可以很容易地看出它至少不是黑色的: enter image description here

图像来源为@drawable/ic_menuenter image description here

@drawable/ic_menumobile\src\main\res\drawable\ic_menu.xml)(source link)的源代码为

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0"
    android:tint="?colorControlNormal">
    <path
        android:fillColor="#FF000000"
        android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z" />
</vector>

因此,这里fillColor被指定为#FF000000,它是100%黑色且不透明(alpha FF)。但是,汉堡菜单图标并未显示为黑色。那么,汉堡菜单图标实际显示的颜色是哪里?

2 个答案:

答案 0 :(得分:1)

我试图更深入地研究样式,很可能它来自Activity主题的父项之一的默认参数。我将尝试说明如何找到它。

  1. \mobile\src\main\AndroidManifest.xml文件中,所有活动均从android:theme="@style/AppTheme"继承
  2. <style name="AppTheme" parent="Base.AppTheme" />
  3. <style name="Base.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
  4. <style name="Theme.MaterialComponents.DayNight.NoActionBar" parent="Theme.MaterialComponents.Light.NoActionBar"/>
  5. <style name="Theme.MaterialComponents.Light" parent="Base.Theme.MaterialComponents.Light"/>
  6. <style name="Base.Theme.MaterialComponents.Light" parent="Base.V14.Theme.MaterialComponents.Light"/>
  7. <style name="Base.V14.Theme.MaterialComponents.Light" parent="Base.V14.Theme.MaterialComponents.Light.Bridge">
  8. <style name="Base.V14.Theme.MaterialComponents.Light.Bridge" parent="Platform.MaterialComponents.Light">
  9. <style name="Platform.MaterialComponents.Light" parent="Theme.AppCompat.Light"/>
  10. <style name="Theme.AppCompat.Light" parent="Base.Theme.AppCompat.Light"/>
  11. <style name="Base.Theme.AppCompat.Light" parent="Base.V28.Theme.AppCompat.Light"/>
  12. <style name="Base.V28.Theme.AppCompat.Light" parent="Base.V26.Theme.AppCompat.Light">
  13. <style name="Base.V26.Theme.AppCompat.Light" parent="Base.V23.Theme.AppCompat.Light">
  14. <style name="Base.V23.Theme.AppCompat.Light" parent="Base.V22.Theme.AppCompat.Light">
  15. <style name="Base.V22.Theme.AppCompat.Light" parent="Base.V21.Theme.AppCompat.Light">
  16. <style name="Base.V21.Theme.AppCompat.Light" parent="Base.V7.Theme.AppCompat.Light">
  17. 您可以看到我们已经接近<item name="android:colorControlNormal">?attr/colorControlNormal</item>,我们需要更深入地研究。
  18. <style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
  19. <item name="colorControlNormal">?android:attr/textColorSecondary</item>:)
  20. 但是,我们可以更进一步,直到到达<style name="Theme.Material.Light" parent="Theme.Light">
  21. <item name="textColorSecondary">@color/text_color_secondary</item>
  22. text_color_secondary.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:alpha="?attr/disabledAlpha" android:color="?attr/colorForeground"/> <item android:alpha="?attr/secondaryContentAlpha" android:color="?attr/colorForeground"/> </selector>

  23. <item name="colorForeground">@color/foreground_material_light</item>

  24. colors_material.xml中是<color name="foreground_material_light">@color/black</color>
  25. alpha是<item name="secondary_content_alpha_material_light" format="float" type="dimen">0.54</item>

因此,简单地说:菜单图标的颜色是默认主题黑色 alpha 0.54

答案 1 :(得分:0)

在下面的xml文件中,他们设置了应用栏的样式

mobile \ src \ main \ res \ layout \ fragment_codelabs.xml(source)

    style="@style/Widget.IOSched.AppBar"

如果您打开mobile / src / main / res / values / styles.xml source 您可以找到样式的定义,通常的做法是在整个应用程序中使用通用样式以保持一致,而不是一次性使用TextViewStyle / Size / Design。