Android开发黑白灰模式和夜间模式设置

接口数据来源鸿洋大神“玩安卓”网站:https://wanandroid.com/

黑白灰正常模式和黑白灰夜间模式截图

  

夜间模式与正常模式截图

    

黑白灰与原色模式设置

    /**
     * 设置灰白色
     */
    protected void setGrayScreen() {
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        paint.setColorFilter(new ColorMatrixColorFilter(cm));
        getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
    }

    /**
     * 设置原色,灰白色、原色都不设置默认为原色
     */
    protected void setOriginalScreen() {
        Paint paint = new Paint();
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(1);
        paint.setColorFilter(new ColorMatrixColorFilter(cm));
        getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);
    }

 使用

 首先在BaseActivity中写入上述方法,其他Activity继承BaseActivity类。然后根据自己的业务逻辑调用全局方法即可。

夜间模式与日间模式设置

设置夜间模式首先需要把values文件夹下的styles.xml文件中的parent属性设置为:Theme.AppCompat.DayNight.NoActionBar

<resources>
    <!-- Base application theme. -->
    <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>

然后需要在values文件夹下的colors.xml文件中配置日间模式需要的颜色值

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#6200EE</color>
    <color name="colorPrimaryDark">#3700B3</color>
    <color name="colorAccent">#03DAC5</color>

    <color name="colorBg">#F4F5F7</color>
    <color name="white">#ffffff</color>
    <color name="black">#000000</color>
</resources>

在values-night文件夹下的colors.xml配置夜间模式所对应的颜色值

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#303030</color>
    <color name="colorPrimaryDark">#232323</color>
    <color name="colorAccent">#008577</color>

    <color name="white">#232323</color>
    <color name="black">#ffffff</color>
</resources>

最后根据自己的业务逻辑调用BaseActivity中的公共方法即可。

    /**
     * 设置夜间模式
     */
    protected void setModeNight() {
        getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    }

    /**
     * 设置白天模式,白天、夜间都不设置跟随系统
     */
    protected void setModeLight() {
        getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }

夜间模式与日间模式的判断

int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;

if (mode == Configuration.UI_MODE_NIGHT_YES) {//夜间模式
                    
} else if (mode == Configuration.UI_MODE_NIGHT_NO) {//非夜间模式
                   
}

//根据判断重新设置模式后刷新使设置生效
recreate();

代码详情:https://gitee.com/juer2017/MVP_Demo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

举儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值