导航号,我的单页导航
文章目录

前言

之前介绍过Android日夜模式的使用,日夜模式是Android高版本自带的一种模式,很方便也很使用。如果换肤只有2种皮肤,这个是最佳选择,因为Android日夜模式只要按照规则即可实现。

虽然介绍过,但很多细节还是没有说明白,因此由写一篇流水文,方便自己回顾。

正文

日夜模式就是我们常说的静态换肤的一种。进入话题前,先介绍一下优缺点。

知此知彼,百战不殆

优点

  1. 使用简单,Android自带

缺点

  1. 只支持两套皮肤(日间和夜间皮肤)

  2. APK可能臃肿(若图片资源过多的话)

资源目录

Android高版本支持日夜模式,并创建夜间对应资源目录。

drawable
# 白天(默认)
drawable-nodpi
drawable-mdpi
# 黑夜
drawable-night-nodpi
drawable-night-mdpi

注意night的位置,是在中间哈!

位置写错是Android是无法识别里面黑夜资源图片!

values
# 白天(默认)
values
# 黑夜
values-night

AndroidManifest.xml

<activity
    android:name=".MainActivity"
    android:configChanges="uiMode"
    android:exported="true"
    android:launchMode="singleInstance">
    //站长 略
</activity>

这里主要是配置了

android:configChanges="uiMode"
不设置uiMode

如果不设置uiMode,切换模式时MainActivity会先销毁,然后重新创建。

#MainActivity在顶部
onPause
onStop:
onDestroy
onCreate
onResume

如果界面没啥逻辑,只是刷新UI,那没啥问题。一旦有其他逻辑,比如加载动画等,那就是又会重新走一次,这样肯定不友好。

设置uiMode

如果设置了uiMode,须重写onConfigurationChanged(),因此MainActivity不会先销毁再启动,二是直接回调onConfigurationChanged()这里。

PS: android:configChanges=""里面还有好多配置,这里不介绍。

@Override
public void onConfigurationChanged(@NonNull Configuration configuration) {
    super.onConfigurationChanged(configuration);
    //站长,打印模式变化
    Log.d(TAG, "updateMode configuration uiMode : " + (configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK));
    //重新加载UI
    reloadUI();
}

其实,Android的日夜模式都是设计好了的,要么重启Activity(不配置uiMode),要么自己重新加载一次UI资源。

隐藏内容!
付费阅读后才能查看!
2
多个隐藏块只需支付一次

参考文章

  1. Android日夜模式

© 版权声明
导航号,我的单页导航

暂无评论

暂无评论...