Как изменить textColor для всех виджетов в приложении, если выбрана тема Material3

Я хочу изменить textColor по умолчанию для всего текста в моем приложении. например, для всех кнопок, textViews, EditText и т. д. в моем приложении. Перед переходом на Material3 это было сделано с помощью:

темы.xml

      <style name="MyThemeName" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:textColor">@color/black</item>

Теперь это больше не работает. Как мне это сделать сейчас? Проект является проектом Android по умолчанию:

      <style name="Theme.MyApplication" parent="Theme.Material3.DayNight.NoActionBar">
    <!-- This is not working -->
    <item name="android:textColor">@color/black</item>

    <!-- Primary brand color. -->
    <item name="colorPrimary">@color/purple_200</item>
    <item name="colorPrimaryVariant">@color/purple_700</item>
    <item name="colorOnPrimary">@color/black</item>
    <!-- Secondary brand color. -->
    <item name="colorSecondary">@color/teal_200</item>
    <item name="colorSecondaryVariant">@color/teal_200</item>
    <item name="colorOnSecondary">@color/black</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
    <!-- Customize your theme here. -->
</style>

Я могу сделать это так, но это не тот ответ, который я ищу:

      <style name="BaseStyle" parent="android:Widget.Material.Light.Button.Borderless"/>

<style name="Widget.Button.MyCompanyName" parent="BaseStyle">
    <item name="android:textColor">@android:color/black</item>
</style>

В приведенном выше стиле кнопки я определяю textColor только тогда, когда он отличается от цвета по умолчанию, который я хочу.

1 ответ

Цвет текста элементов будет меняться в зависимости от типа элемента, на котором он отображается. например, если вы используете кнопку материала по умолчанию, цвет кнопки будет «colorPrimary», а цвет текста кнопки будет «colorOnPrimary». и аналогично этому, если цвет элемента использует «colorBackground», его цвет текста будет «colorOnBackground».

в моем случае я смог контролировать цвет текста всех элементов, которые я использую, добавив значение для следующих стилей:

      <item name="colorOnPrimary">#000000</item>
<item name="colorOnPrimaryContainer">#000000</item>
<item name="colorOnSecondary">#000000</item>
<item name="colorOnSecondaryContainer">#000000</item>
<item name="colorOnBackground">#000000</item>
<item name="colorOnSurface">#000000</item>
<item name="colorOnSurfaceVariant">#000000</item>
<item name="android:textColorPrimary">#000000</item>
<item name="titleTextColor">#000000</item>

подробнее об этом можно прочитать в разделе "Цвета типографики и иконографии" здесь

Другие вопросы по тегам