如果默认为auto,如何获取AppCompatDelegate当前模式

时间:2016-12-30 06:03:06

标签: android android-appcompat

我有这样的活动:

package com.nkdroid.daynighttheme;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatDelegate;
import android.widget.TextView;

public class ModeActivity extends AppCompatActivity {

    private TextView txtModeType;
    int modeType;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auto_mode);
        txtModeType = (TextView) findViewById(R.id.txtModeType);
        modeType = AppCompatDelegate.getDefaultNightMode();

        if (modeType == AppCompatDelegate.MODE_NIGHT_AUTO) {
            txtModeType.setText("Default Mode: Auto");
        } else if (modeType == AppCompatDelegate.MODE_NIGHT_YES) {
            txtModeType.setText("Default Mode: Night");
        } else if (modeType == AppCompatDelegate.MODE_NIGHT_NO) {
            txtModeType.setText("Default Mode: Day");
        }
    }
}`

如果默认模式设置为自动,是否可以获得当前激活的模式(白天或夜晚)?

3 个答案:

答案 0 :(得分:13)

您可以使用以下代码

获取当前模式
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
}

Chris Banes的以下article很好地解释了这一点。

答案 1 :(得分:2)

从应用程序内部(使用AppCompatDelegate设置夜间模式时,@ harshithdwivedi的答案对我不起作用。否则,它将正常工作。

所以我必须添加一些其他检查,例如:

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;
}

答案 2 :(得分:0)

如果您是kotlin开发人员,则可以使用以下代码来判断暗模式。

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

有关黑暗主题模式的更多信息

  

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