欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-14 23:47:09
...

查看【日夜间模式】详情
转载必须注明本文转自严振杰的博客: http://blog.yanzhenjie.com
上图:Android一键切换【日夜间模式】,一行代码搞定【转】Android一键切换【日夜间模式】,一行代码搞定【转】
Android一键切换【日夜间模式】,一行代码搞定【转】

//第一步 改掉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>

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

//第二步 在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以上