Android换肤方案大致有三大类
1.overlayManager
谷歌overlaymanager的图,用这个方案需要定制fwk
2.Android-skin-support 方案
网上很多案例,这里略
3.android 自带模式切换(google推荐)
从API 23(Android 6.0)后,Android就有自带的api能够实现夜间模式与白天模式的切换。Support Library 23.2(应用于API14+)推出了适合Android Apps的DayNight主题。
修改app主题,项目的主题继承夜间模式主题,在 style 中设置如下主题:
新建 drawable-night 和 values-night 的资源目录。如果要适配不同分辨率的屏幕则可新建 drawable-night-hdip、drawable-night-xhdpi 等目录来存放不同分辨率的图片资源。资源在白天和黑夜模式下,必须同名。系统默认进入是黑夜模式。
系统统一设置白天黑夜模式,App可以通过UiModeManager获取当前模式
//获取UiModeManager
private UiModeManager mUiModeManager;
mUiModeManager = (UiModeManager) this.getSystemService(Context.UI_MODE_SERVICE);
//获取当前模式
mUiModeManager.getNightMode()
//设置白天黑夜模式
mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);//白天
mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_YES);//黑夜
//修改白天黑夜模式需要权限,并且生效需要系统进程
<uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE" />
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//模式变化回调,app自己刷新界面
}
为了activity不重新执行生命周期,加入如下代码
时序图