我想改变我的应用程序中所有文本的默认textColor,例如,对于我的应用程序中的所有按钮,textViews, EditText等。在移动到Material3之前,这是使用:
themes.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当它不同于我想要的默认颜色。
元素的文本颜色将根据它所显示的元素类型而改变。例如,如果你使用的是材质按钮,默认情况下按钮的颜色将是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>
你可以在"字体和图像颜色"中了解更多。部分
下面的工作吗?不确定textViewStyle涵盖所有文本。你可能还需要一些额外的东西,比如<item name="materialButtonStyle">
。
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:textViewStyle">@style/MyTextView</item>
</style>
<style name="MyTextView" parent="Widget.MaterialComponents.TextView">
<item name="android:textColor">@android:color/black</item>
</style>