如何从当前选择的主应用程序主题设置Android芯片文本外观



我一直在研究在我当前的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"/>

相关内容

  • 没有找到相关文章

最新更新