我一直在研究在我当前的Android项目中动态改变我的Android Apps主题。
我已经定义了一个基本主题,然后创建了多个子主题,只是使用不同的字体。
这一切都工作良好,如预期的TextViews。
<style name="Theme.MyBaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:windowAnimationStyle">@style/WindowAnimations</item>
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryVariant">@color/primaryVariantColor</item>
<item name="colorSecondary">@color/secondaryColor</item>
<item name="colorSecondaryVariant">@color/secondaryVariantColor</item>
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<item name="android:textAppearanceLarge">@style/TextAppearance.Literal</item>
<item name="android:fontFamily">@font/roboto_regular</item>
<item name="fontFamily">@font/roboto_regular</item>
</style>
<style name="Theme.MyBaseTheme.Readable" parent="Theme.MyBaseTheme">
<item name="android:fontFamily">@font/lexie_readable_regular</item>
<item name="fontFamily">@font/lexie_readable_regular</item>
</style>
<style name="Theme.MyBaseTheme.Dyslexic" parent="Theme.MyBaseTheme">
<item name="android:fontFamily">@font/open_dyslexic_regular</item>
<item name="fontFamily">@font/open_dyslexic_regular</item>
</style>
<style name="Theme.MyBaseTheme.Mono" parent="Theme.MyBaseTheme">
<item name="android:fontFamily">@font/b612_mono_regular</item>
<item name="fontFamily">@font/b612_mono_regular</item>
</style>
我对com.google.android.material.chip.Chip
中显示的文本有一个问题。
即Chip
文本外观不变。
我可以使用自定义主题更改Chip
主题,定义如下
<style name="ChipTextAppearance" parent="TextAppearance.MaterialComponents.Chip">
<item name="fontFamily">@font/roboto_mono</item>
<item name="android:fontFamily">@font/roboto_mono</item>
</style>
然而,我无法看到如何将我的自定义芯片主题链接到我的应用程序主题,以便当我动态切换应用程序主题时,Chip
文本外观也会更改为使用正确的字体。
我需要做什么来动态切换我的应用程序主题和我的Chip
文本外观?
要将自定义芯片文本外观链接到基本应用程序主题或子主题,您可以使用"chipStyle">属性。
将基础应用程序主题的结构更改为如下所示:
<!-- Base application theme. -->
<style name="Theme.MyBaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/primaryColor</item>
<item name="android:fontFamily">@font/roboto_regular</item>
<item name="fontFamily">@font/roboto_regular</item>
<item name="chipStyle">@style/ChipStyle.Base</item>
</style>
<style name="ChipStyle.Base" parent="@style/Widget.MaterialComponents.Chip.Action">
<item name="android:textAppearance">@style/ChipTextAppearance.Base</item>
<item name="chipBackgroundColor">@android:color/holo_blue_light</item>
</style>
<style name="ChipTextAppearance.Base" parent="TextAppearance.MaterialComponents.Chip">
<item name="fontFamily">@font/roboto_regular</item>
<item name="android:fontFamily">@font/roboto_regular</item>
</style>
你的子主题示例Readable (Mode)如下所示:
<!-- Sub theme Readable -->
<style name="Theme.MyBaseTheme.Readable" parent="Theme.MyBaseTheme">
<item name="android:fontFamily">@font/lexie_readable_regular</item>
<item name="fontFamily">@font/lexie_readable_regular</item>
<item name="chipStyle">@style/ChipStyle.Readable</item>
</style>
<style name="ChipStyle.Readable" parent="@style/Widget.MaterialComponents.Chip.Action">
<item name="android:textAppearance">@style/ChipTextAppearance.Readable</item>
<item name="chipBackgroundColor">@android:color/holo_orange_dark</item>
</style>
<style name="ChipTextAppearance.Readable" parent="TextAppearance.MaterialComponents.Chip">
<item name="fontFamily">@font/lexie_readable_regular</item>
<item name="android:fontFamily">@font/lexie_readable_regular</item>
</style>
你可以使用上面的主题在你的芯片如下:
<com.google.android.material.chip.Chip
android:theme="@style/Theme.MyBaseTheme.Readable"
android:id="@+id/chip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chip"/>