Modo cinza preto e branco de desenvolvimento do Android e configurações do modo noturno

A fonte dos dados da interface é o site "playing Android" de Hongyang Dashen: https://wanandroid.com/

Capturas de tela do modo normal cinza preto e branco e do modo noturno cinza preto e branco

  

Capturas de tela do modo noturno e do modo normal

    

Configurações do modo preto e branco, cinza e cores primárias

    /**
     * 设置灰白色
     */
    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);
    }

 usar

 Primeiro, escreva o método acima em BaseActivity e outras atividades herdarão a classe BaseActivity. Em seguida, chame o método global de acordo com sua própria lógica de negócios.

Configurações do modo noturno e do modo diurno

Para definir o modo noturno, primeiro você precisa definir o atributo pai no arquivo styles.xml na pasta de valores para: 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>

Então você precisa configurar os valores de cores necessários para o modo dia no arquivo colors.xml na pasta values

<?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>

Configure o valor da cor correspondente ao modo noturno em colors.xml na pasta values-night

<?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>

Por fim, basta chamar o método público em BaseActivity de acordo com sua própria lógica de negócios.

    /**
     * 设置夜间模式
     */
    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);
    }

Julgamento entre o modo noturno e o modo diurno

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();

Detalhes do código: https://gitee.com/juer2017/MVP_Demo

Acho que você gosta

Origin blog.csdn.net/juer2017/article/details/128288533
Recomendado
Clasificación