Android一键切换【日夜间模式】,一行代码搞定【转】

查看【日夜间模式】详情
转载必须注明本文转自严振杰的博客: http://blog.yanzhenjie.com
上图:日间夜间
这里写图片描述

//第一步 改掉res—values—styles.xml 内的主题代码

<resources>

    <!-- Base application theme. -->
    <!--把此行代码换掉-->
    <!--<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
    <!--换成此行代码-->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

这里写图片描述

//第二步 在AppLication类里写状态值,因为此类在整个应用中只会加载一次

public class AppLictionClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Boolean b = false;
        SharedPreferences sharedPreferences = getSharedPreferences("SaveBoolean", MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("bbb", b);
        editor.commit();
    }
}

//第三步:在MainActivity里实现【那行代码】

//注意要继承AppCompatActivity 类
public class MainActivity extends AppCompatActivity {
    //定义一个状态值
    private Boolean bbb;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e("+++++++++", "重新走了onCreate方法");
        //因为系统带的这个日夜间模式,每次切换都会重走onCreate生命周期,所以会出现问题,
        //为了解决这个问题,我就把状态值存到SharedPreferences 里面
        SharedPreferences sharedPreferences = getSharedPreferences("SaveBoolean", MODE_PRIVATE);
        final SharedPreferences.Editor editor = sharedPreferences.edit();
        //从SharedPreferences里面把状态值取出来
        bbb = sharedPreferences.getBoolean("bbb", false);
        Log.e("+++++++++", "取到的SharedPreferences的Boolean值为:" + bbb);
        //随便一个控件给点击事件触发就行
        ImageView imageView = findViewById(R.id.image_night);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //拿着从SharedPreferences里取出来的值判断
                if (bbb == false) {
                //此行代码就是【夜间模式】】】】】】】】】】】【【【【【【【【【就是这行代码】】】】】】】】】】
                    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    bbb = true;
                    editor.putBoolean("bbb", bbb);
                    editor.commit();
                    Log.e("+++++++++", "存入的Boolean值为:" + bbb);
                } else if (bbb == true) {
                //此行代码就是【日间模式】】】】】】】】】】】【【【【【【【【【就是这行代码】】】】】】】】】】
                    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    bbb = false;
                    editor.putBoolean("bbb", bbb);
                    editor.commit();
                    Log.e("+++++++++", "存入的Boolean值为:" + bbb);
                }
            }
        });
    }
}

emm…确实很简单粗暴吧
TIP:
我的studio是3.1.2
支持gradle 23以上

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值