安卓中白天模式和夜间模式的切换

来源:互联网 发布:网络测试是什么 编辑:程序博客网 时间:2024/05/09 02:51

前言
安卓是自带模式的,我们在styles.xml便可以设置标题栏显示的颜色(白天和夜间模式当然也就可以通过切换主题来实现)
设置切换之间的动画
在res下面新建anim文件夹然后在里面创建切换动画
in.xml

  <!--  interpolator 这个是动画变化的频率 快 慢 等-->    <alpha        android:duration="0"        android:fromAlpha="0.0"        android:interpolator="@android:anim/accelerate_interpolator"        android:toAlpha="1.0">    </alpha>

out.xml

    <alpha        android:duration="0"        android:fromAlpha="1.0"        android:interpolator="@android:anim/decelerate_interpolator"        android:toAlpha="0.0">    </alpha>

在styles里面设置要切换的主题

    <!-- Base application theme. -->    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">        <!-- Customize your theme here. -->        <item name="colorPrimary">@color/colorPrimary</item>        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>        <item name="colorAccent">@color/colorAccent</item>    </style>    <!--黑夜主题-->    <style name="AppTheme.Black"        parent="Theme.AppCompat">    </style>

在Preferences.class
定义一个传值的类

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

在UIUtils里面

public class UiUtils {//获取主题    public static int getAppTheme(Context ctx) {//        给他的默认值是1默认是白天模式        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;//默认白色        }    }//    通过点击时给activity_theme不同的值    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;        }    }}

在MainActivity里面

public class MainActivity extends AppCompatActivity {    private int theme = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        //切换主题必须放在onCreate()之前        if (savedInstanceState == null) {//                如果么有            theme = UiUtils.getAppTheme(MainActivity.this);        }        else {           theme = savedInstanceState.getInt("theme");        }//        可以设置主题的 方法 在oncreate之前调用        setTheme(theme);        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }//点击按钮时实现白天和黑夜的切换并实现效果    public  void  Buttons (View view){        UiUtils.switchAppTheme(MainActivity.this);       load();    }//    切换之间的动画    public void load() {        Intent intent = getIntent();        overridePendingTransition(R.anim.in, R.anim.out);//进入动画        finish();        overridePendingTransition(R.anim.in, R.anim.out);        startActivity(intent);    }    }

这样就简单实现了点击button按钮时对白天和黑夜的切换。

原创粉丝点击