前言
关于 UI 主题切换:Android 开发时,如果业务功能做得差不多了,想让自己的应用更加开放一些,我们可以给用户提供切换UI主题的选择。有很多小伙伴可能会说,这个主题切换网上也有不少资料了,你介绍的这个有什么新意和优点吗?有的。请看下面的正文内容。
要做到这一点,需要三个步骤。
定义主题Theme内容
这个比较好理解。
就是根据需要定义屏幕上切换主题时你觉得用户可能希望更改颜色的各个元素。
比如标题栏、按钮等。
比如我们现在定义5个主题:
"霞光紫", "科技蓝", "烈焰红", "田园绿", "宝石灰"
在你的常数类C中定义好它。
public static final String[] themeNames = {"霞光紫", "科技蓝", "烈焰红", "田园绿", "宝石灰"};
然后开始编写主题文件 theme.xml(放到values目录下):
<resources>
<!-- Base application theme. -->
<style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item><!--original #3333FF-->
<item name="colorPrimaryVariant">@color/purple_700</item><!--#00008B-->
<item name="colorDim">#a569bd</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
</style>
<style name="Theme.MyApp.Blue" parent="Theme.MyApp">
<item name="colorPrimary">#1565c0</item>
<item name="colorPrimaryVariant">#1a237e</item>
<item name="colorDim">#5dade2</item>
</style>
<style name="Theme.MyApp.Red" parent="Theme.MyApp">
<item name="colorPrimary">#bb4444</item>
<item name="colorPrimaryVariant">#660000</item>
<item name="colorDim">#ec7063</item>
</style>
<style name="Theme.MyApp.Green" parent="Theme.MyApp">
<item name="colorPrimary">#1e8449</item>
<item name="colorPrimaryVariant">#145a32</item>
<item name="colorDim">#52be80</item>
</style>
<style name="Theme.MyApp.Gray" parent="Theme.MyApp">
<item name="colorPrimary">#888888</item>
<item name="colorPrimaryVariant">#424242</item>
<item name="colorDim">#a6acaf</item>
</style>
</resoure>
然后在你的常数类C之中定义好这个theme值数组.
public static final Integer[] themeValues = {R.style.Theme_MyApp,
R.style.Theme_MyApp_Blue,
R.style.Theme_MyApp_Red,
R.style.Theme_MyApp_Green,
R.style.Theme_MyApp_Gray
};
接下来,我们看看怎么使用它。
定义设置界面
在这个设置界面setting.xml里