DayNight实现日夜间模式

有两种方式进行 切换日夜间模式

第一种

先上示例图

DayNight实现日夜间模式_第1张图片DayNight实现日夜间模式_第2张图片

                    日间模式                                                                               夜间模式


主界面布局:


xml version="1.0" encoding="utf-8"?>
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    
Values

DayNight实现日夜间模式_第3张图片

arrts(文件中定义了控件的所有属性以及所用控件的声明

xml version="1.0" encoding="utf-8"?>

    name="textColorValue" format="color">
    name="textContent" format="string">

colors(当中定义各种颜色值。)

xml version="1.0" encoding="utf-8"?>

    name="colorPrimary">#3F51B5
    name="colorPrimaryDark">#303F9F
    name="colorAccent">#FF4081

    name="background">#252a2e
    name="unablebtn">#dcdcdc
    name="dark_bg">#505050
    name="light">#ECECEC
    name="white">#FFFFFF
    name="black">#000000
    name="green">#05D992
    name="zise">#E5004F
    name="dark_bg1">#414141
    name="pink">#FF5877
    name="yellow">#FFFF00
strings(当中定义使用到的字符串常量。)


    name="app_name">DayNightOne
    name="change_to_night">切换成夜间模式
    name="change_to_day">切换成日间模式


styles(对所有控件的属性值进行了设定



      注意这个 因为改变了name 记得在AndroidManifest中修改
    
    
    



下面贴代码

Mainactivity

package com.example.lixin.daynightone;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
/**
 * 第一种实现夜间模式  用设置主题的方式
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //设置对应的主题 ,在ui创建好之后设置主题无效,所以要放到setContentView()方法前面setTheme()
        ThemeUtil.onActivityCreatedSetTheme(this);
        setContentView(R.layout.activity_main);

    }
    public void onClick(View view){
        //切换日夜间模式
        ThemeUtil.ChangeCurrentTheme(this);

    }
}

ThemeUtil

package com.example.lixin.daynightone;

import android.app.Activity;
import android.content.Intent;
import android.preference.PreferenceManager;

/**
 * Created by hua on 2017/8/7.
 */

public class ThemeUtil {
    //我当前应用的主题
    private static  int theme =0;
    //日间模式主题
    private static  final int DAY_THEME = 0;
    //夜间模式主题
    private static final int NIGHT_THEME = 1;

    public static void onActivityCreatedSetTheme(Activity activity){


        switch (theme){
            case DAY_THEME:
                activity.setTheme(R.style.day_theme);
                break;
            case NIGHT_THEME:
                activity.setTheme(R.style.night_theme);
                break;
        }
    }
    //点击按钮改变对应得主题
    public static void ChangeCurrentTheme(Activity activity){

        //1、改变当前主题的theme变量
        switch (theme){
            case DAY_THEME:
                theme = NIGHT_THEME;
                break;
            case NIGHT_THEME:
                theme = DAY_THEME;
                break;
        }
        //2、重启这个activity
        activity.finish();
        //加一个动画
        activity.overridePendingTransition(R.anim.sliding_in,R.anim.sliding_out);
        activity.startActivity(new Intent(activity,activity.getClass()));

    }

}
最后为了美观加了一个动画(在res里创建一个anim)

sliding_in

xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromAlpha="0.0"
    android:toAlpha="1.0">
sliding_out

xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:toAlpha="0.0"
    android:fromAlpha="1.0">

以上是第一种方法 接下来介绍第二种方法:

示例图

                     DayNight实现日夜间模式_第4张图片DayNight实现日夜间模式_第5张图片

                                          日间模式                                       夜间模式                     


主界面布局

xml version="1.0" encoding="utf-8"?>
    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    
DayNight实现日夜间模式_第6张图片

这个方法创建了两个values  一个是日间模式的  一个是夜间模式的

values - colors

xml version="1.0" encoding="utf-8"?>

    name="colorPrimary">#3F51B5
    name="colorPrimaryDark">#303F9F
    name="colorAccent">#FF4081

    name="main_textView">#FF0000 字体颜色


values - strings

xml version="1.0" encoding="utf-8"?>

    name="app_name">DayNightTwo
    name="change_to_content">切换成夜间模式

values - styles



                 一定要注意这个 继承这个
    



values - night - colors

xml version="1.0" encoding="utf-8"?>


    name="colorPrimary">#35464e
    name="colorPrimaryDark">#212a2f
    name="colorAccent">#212a2f

    name="main_textView">#00FF00

values - night - strings



    name="app_name">DayNightTwo
    name="change_to_content">切换成日间模式


下面贴代码


Mainactivity

package com.example.lixin.daynighttwo;

import android.content.res.Configuration;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatDelegate;
import android.view.View;

/**
 * 优雅的实现日夜间模式,第二种实现日间模式的方式
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view){
        //切换日夜间模式

        int uiMode;
        uiMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
        switch (uiMode){
            case Configuration.UI_MODE_NIGHT_YES:
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                getSharedPreferences("theme",MODE_PRIVATE).edit().putBoolean("night_theme",false).commit();

                break;
            case Configuration.UI_MODE_NIGHT_NO:
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                getSharedPreferences("theme",MODE_PRIVATE).edit().putBoolean("night_theme",true).commit();

                break;
        }
        //重建
        recreate();
    }
}

MyApplication

package com.example.lixin.daynighttwo;

import android.app.Application;
import android.support.v7.app.AppCompatDelegate;

/**
 * Created by hua on 2017/8/7.
 */

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        if (getSharedPreferences("theme",MODE_PRIVATE).getBoolean("night_theme",false)){

            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

        }
    }
}
注意在manifests 加上
android:name=".MyApplication"


你可能感兴趣的:(DayNight实现日夜间模式)