现在好多的小说阅读器都有白天和夜间模式的切换,为了让用户有更好的体验,保护用户的眼睛。
Android官方在Support Library 23.2.0中已经加入了夜间主题。
接下来我们看怎么实现吧:
第一步添加依赖:
implementation'com.android.support:appcompat-v7:28.0.0'
第二步项目的主题继承夜间模式主题,在style中设置如下主题:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
第三步创建夜间模式资源文件
(1)新建values-night目录,如下:
后缀为 -night 的文件夹是夜间模式资源存放位置
(2)在values-night目录下新建colors文件,如下:
接下来只需要在对应的colors文件下写不同的颜色值(夜间颜色值和白天颜色值)即可。至此关于实现夜间模式的配置已经基本完成。
调用切换模式
代码调用切换模式,设置AppCompatDelegate.MODE_NIGHT_YES或者AppCompatDelegate.MODE_NIGHT_NO来控制切换
使用如下:
其中SettingUtils工具类如下:
public class SettingUtils {
private SharedPreferences mSp = PreferenceManager.getDefaultSharedPreferences(MyApplication.appContext);
private static final String NIGHT_MODE = "night_mode";
private SettingUtils() {
}
public static SettingUtils getInstance() {
return SettingUtilsInstance.instance;
}
private static final class SettingUtilsInstance {
private static final SettingUtils instance = new SettingUtils();
}
public boolean isNightMode() {
return mSp.getBoolean(NIGHT_MODE, false);
}
public void saveNightMode(boolean mode) {
mSp.edit().putBoolean(NIGHT_MODE, mode).commit();
}
}
MyApplication如下:
class MyApplication extends Application {
public static Context appContext;
@Override
public void onCreate() {
super.onCreate();
appContext = this.getApplicationContext();
initAppTheme();
}
private void initAppTheme() {
SettingUtils settingUtils = SettingUtils.getInstance();
if (settingUtils.isNightMode()) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
}
}
这样建议的换肤就完成了。