Понимание происхождения цвета значка меню - PullRequest
2 голосов
/ 30 сентября 2019

В настоящее время я копаюсь в исходном коде Google IO 2019, и я не могу понять, откуда он берется: цвет значка меню гамбургера.

Вот скриншот предварительного просмотраиз mobile\src\main\res\layout\fragment_codelabs.xml ( ссылка на источник ): enter image description here

А вот увеличение значка меню гамбургера, можно легко увидеть, что это нахотя бы не черный: enter image description here

Источник изображения @drawable/ic_menu: enter image description here

Исходный код @drawable/ic_menu (mobile\src\main\res\drawable\ic_menu.xml) ( ссылка на источник ) имеет значение

<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% черный и непрозрачный (альфа-FF). И все же значок меню гамбургера не отображается черным цветом. Итак, откуда же на самом деле отображается цвет, в котором отображается значок меню гамбургера?

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Я попытался углубиться в стили, скорее всего, это происходит из параметра по умолчанию одного из родительских элементов темы «Активность». Я постараюсь показать, как я его нашел.

  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. А альфа это <item name="secondary_content_alpha_material_light" format="float" type="dimen">0.54</item>

Итак, проще говоря: цвет значка меню - тема по умолчанию черный с альфа 0,54

0 голосов
/ 30 сентября 2019

В приведенном ниже XML-файле они устанавливают стиль панели приложения

mobile \ src \ main \ res \ layout \ фрагмент_codelabs.xml ( исходный код)

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

Если вы откроете файл mobile / src / main / res / values ​​/ styles.xml source , вы можете найти это определение стиля, поэтому обычно используется общий стиль в приложении, чтобы иметь единообразиевместо одноразового TextViewStyle / Size / Design.

...