How to get AppCompatDelegate current mode if default is auto

后端 未结 3 1129
鱼传尺愫
鱼传尺愫 2020-12-15 19:37

I have activity like this:

package com.nkdroid.daynighttheme;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.supp         


        
相关标签:
3条回答
  • 2020-12-15 20:00

    You can get the current mode using the following code,

    int currentNightMode = getResources().getConfiguration().uiMode
            & Configuration.UI_MODE_NIGHT_MASK;
    switch (currentNightMode) {
        case Configuration.UI_MODE_NIGHT_NO:
            // Night mode is not active, we're in day time
        case Configuration.UI_MODE_NIGHT_YES:
            // Night mode is active, we're at night!
        case Configuration.UI_MODE_NIGHT_UNDEFINED:
            // We don't know what mode we're in, assume notnight
    }
    

    The following article by Chris Banes explains it nicely.

    0 讨论(0)
  • 2020-12-15 20:08

    If you are a kotlin developer, then you can use the code below to check which mode your app is in..

    val mode = context?.resources?.configuration?.uiMode? and Configuration.UI_MODE_NIGHT_MASK
    when (mode) {
        Configuration.UI_MODE_NIGHT_YES -> {}
        Configuration.UI_MODE_NIGHT_NO -> {}
        else -> {} //covers Configuration.UI_MODE_NIGHT_UNDEFINED
    }
    

    For more about the dark theme modes see;

    https://github.com/googlesamples/android-DarkTheme/

    0 讨论(0)
  • 2020-12-15 20:09

    Somehow @harshithdwivedi's answer didn't work for me when the night mode is set from inside the app (using AppCompatDelegate). Otherwise it works fine.

    So I had to add some additional checks like this:

    public static boolean isNightModeActive(Context context) {
        int defaultNightMode = AppCompatDelegate.getDefaultNightMode();
        if (defaultNightMode == AppCompatDelegate.MODE_NIGHT_YES) {
            return true;
        }
        if (defaultNightMode == AppCompatDelegate.MODE_NIGHT_NO) {
            return false;
        }
    
        int currentNightMode = context.getResources().getConfiguration().uiMode
                & Configuration.UI_MODE_NIGHT_MASK;
        switch (currentNightMode) {
            case Configuration.UI_MODE_NIGHT_NO:
                return false;
            case Configuration.UI_MODE_NIGHT_YES:
                return true;
            case Configuration.UI_MODE_NIGHT_UNDEFINED:
                return false;
        }
        return false;
    }
    
    0 讨论(0)
提交回复
热议问题