Android的Theme主题切换

这篇博客介绍了如何在Android应用中实现Theme主题切换的功能。通过定义属性、设置主题样式、在布局中使用以及在onCreate方法中调用来切换主题,实现简单的换肤。然而,这种方法存在缺点,即需要重启应用才能生效,且只能应用预设的主题,无法动态切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的Theme换肤功能

效果截图

1、定义属性
先定义几个需要改变的属性,例如:

<!--换肤-->
    <attr name="userNameColor" format="color" />
    <attr name="commonColor" format="color" />
    <attr name="bgColor" format="color" />
    <attr name="itemColor" format="color" />
    <attr name="settingImage" format="reference" />
    <attr name="themeImage" format="reference" />

2、定义主题,在style中

    <style name="NightTheme" parent="AppTheme">
        <item name="userNameColor">@color/color_ffffff</item>
        <item name="commonColor">@color/color_68737f</item>
        <item name="bgColor">@color/color_1c232c</item>
        <item name="itemColor">@color/color_181f29</item>
        <item name="settingImage">@mipmap/settings_night</item>
        <item name="themeImage">@mipmap/theme_night</item>
    </style>

    <style name="DayTheme" parent="AppTheme">
        <item name="userNameColor">@color/color_000000</item>
        <item name="commonColor">@color/color_424242</item>
        <item name="bgColor">@color/color_ffffff</item>
        <item name="itemColor">@color/color_ffffff</item>
        <item name="settingImage">@mipmap/settings_day</item>
        <item name="themeImage">@mipmap/theme_day</item>
    </style>

3、在布局中使用

<LinearLayout
  android:id="@+id/ll_parent"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="?attr/bgColor">

<ListView
  android:id="@+id/lv_choose_project_item"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:divider="@null" />

</LinearLayout>

4、在onCreate中调用,需要再setContentView之前调用,这边配合sp,记录用户喜欢的主题

boolean theme = (boolean) SPUtil.getInstance(Const.ConstantSp.SP_THEME_FILE_NAME).get(Const.ConstantSp.SP_THEME_KEY, true);
if (theme ) {
  MainActivity.this.setTheme(R.style.DayTheme);
} else {
  MainActivity.this.setTheme(R.style.NightTheme);
}
setContentView(R.layout.activity_main);

5、在切换的地方启动

finish();
Intent intent = getIntent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
overridePendingTransition(0, 0);

总结

通过Theme切换主题:
优点:实现简单,配置简单
缺点:需要重启应用;是固定皮肤,不能动态切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值