Android: 如何动态切换应用主题

前言

关于 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里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值