使用Android原生的黑白主题切换方式实现,各应用需要准备两套资源文件,创建drawable-night,values-night等文件夹存放深色模式资源文件,资源文件名称,颜色名称等无需变化,与drawable,values下保持一致即可。实现方式有两种:
- 需要监听主题切换,需要在AndroidManifest的activity标签增加android:configChanges = “uiMode”,重写onConfigurationChanged方法,在onConfigurationChanged中处理切换主题后的逻辑,重新加载资源;
监听onConfigurationChanged的方式如下:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG,"onConfigurationChanged");
//todo
}
//此方式可以实现不重启切换主题,页面不是太多建议使用此方式。
2.不需要监听主题切换,则不需要增加android:configChanges = “uiMode”,切换主题后,应用会自动重启重新load资源,(若切换后应用未自动重启,尝试一下更新build.gradle中androidx.appcompat:appcompat的版本到1.4.0以上)。
注意:activity需要继承自AppCompatActivity!
- 监听onConfigurationChanged,收到主题变化通知后重启应用,执行
public void reCreate(){
finish();
startActivity(new Intent( this, this.getClass()));
overridePendingTransition(0, 0);
}
//无退出动画下重启应用,重新加载资源文件。