Android中白天模式与夜间模式的切换

前言
安卓是自带模式的,我们在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按钮时对白天和黑夜的切换

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鸳鸯锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值