用setTheme实现日夜间模式的切换

来源:互联网 发布:网络品牌策划公司 编辑:程序博客网 时间:2024/05/22 10:51

1.在style.xml中

 <style        name="AppTheme.Black"        parent="Theme.AppCompat">    </style>
2.在res下建anim
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">        <alpha            android:duration="0"            android:fromAlpha="1.0"            android:interpolator="@android:anim/decelerate_interpolator"            android:toAlpha="0.0">        </alpha></set>
in:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">        <alpha            android:duration="0"            android:fromAlpha="0.0"            android:interpolator="@android:anim/accelerate_interpolator"            android:toAlpha="1.0">        </alpha></set>
utils

public class UiUtils {    public static int getAppTheme(Context ctx) {        String value = Preferences.getString(ctx, "activity_theme", "1");        switch (Integer.valueOf(value)) {            case 1:                return R.style.AppTheme;//白色主题            case 2:                return R.style.AppTheme_Black;            default:                return R.style.AppTheme;//默认白色        }    }    public static void switchAppTheme( Context ctx){        String value = Preferences.getString(ctx, "activity_theme", "1");        switch (Integer.valueOf(value)){            case 1:                Preferences.setString(ctx, "activity_theme", "2");                break;            case 2:                Preferences.setString(ctx, "activity_theme", "1");                break;            default:                Preferences.setString(ctx, "activity_theme", "1");                break;        }}
Preferences


public class Preferences {    private static final String shared_name = "user_guide";    private static SharedPreferences sp;    public static String getString(Context context, String key, String defaultValues) {        SharedPreferences sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE);        return sp.getString(key, defaultValues);    }    public static void setString(Context context, String key, String Values) {        SharedPreferences sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE);        sp.edit().putString(key, Values).commit();    }
oncreate前

    private int theme = 0;    @Override    public void onCreate(Bundle savedInstanceState) {        if (savedInstanceState == null) {            theme = UiUtils.getAppTheme(MainActivity.this);        } else {            theme = savedInstanceState.getInt("theme");        }        setTheme(theme)
2个方法

 public void Click(View v) {        UiUtils.switchAppTheme(MainActivity.this);        reload();    }    public void reload() {        Intent intent = getIntent();        overridePendingTransition(R.anim.in, R.anim.comeout);//进入动画        finish();        overridePendingTransition(R.anim.in, R.anim.comeout);        startActivity(intent);    }