安卓日记——保存你的日夜间模式

日夜间模式我我们常用的一个功能,那具体要怎么做呢?
主要用两种比较好的方法
第一种简而言之:持久化theme再recreate再取出theme,在setContentView前使用setTheme方法
第二种使用 Support Library 23.2.0 DayNight主题实现

先说第一种

第一种的好处是不仅是日夜模式,还可以自定义很多自己的模式

首先写一下自己的持久化工具SPUtil

这个工具采用了单例模式,而且将SharedPreferences和SharedPreferences.Editor整合在一起,方便储存和读取

public class SPUtil {
    private static SPUtil instance;
    private SharedPreferences sp;
    private SharedPreferences.Editor editor;

    private SPUtil(Context context) {
        sp = context.getSharedPreferences("sp", context.MODE_PRIVATE);
        editor = sp.edit();
    }

    public static void init(Context context) {
        instance = new SPUtil(context);
    }

    //最好加个线程锁,怕同时修改有冲突
    public static synchronized SPUtil getInstance() {
        if (instance != null) {
            return instance;
        } else {
            return null;
        }
    }
    public boolean putString(String key, String value) {
        editor.putString(key, value);
        return editor.commit();
    }

    public String getString(String key) {
        return sp.getString(key, "");
    }


    public boolean putInt(String key, int value) {
        editor.putInt(key, value);
        return editor.commit();
    }


    public int getInt(String key, int defaultValue) {
        return sp.getInt(key, defaultValue);
    }

    public  boolean putLong(String key, long value) {
        editor.putLong(key, value);
        return editor.commit();
    }

    public long getLong(String key, long defaultValue) {
        return sp.getLong(key, defaultValue);
    }

    public boolean putFloat(String key, float value) {
        editor.putFloat(key, value);
        return editor.commit();
    }


    public float getFloat(String key, float defaultValue) {
        return sp.getFloat(key, defaultValue);
    }
}

然后在新建一个Application类,在oncreate方法里初始化这个工具

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        SPUtil.init(this);
    }
}

到AndroidManifest.xml里修改Application的名字,改为自己的Application类名

 

然后再写一个自定义的Theme