先上示例图
日间模式 夜间模式
主界面布局:
xml version="1.0" encoding="utf-8"?>Valuesxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
arrts(文件中定义了控件的所有属性以及所用控件的声明)
xml version="1.0" encoding="utf-8"?>colors(当中定义各种颜色值。)name="textColorValue" format="color"> name="textContent" format="string">
xml version="1.0" encoding="utf-8"?>strings(当中定义使用到的字符串常量。)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
styles(对所有控件的属性值进行了设定)name="app_name">DayNightOne name="change_to_night">切换成夜间模式 name="change_to_day">切换成日间模式
注意这个 因为改变了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"?>sliding_outxmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromAlpha="0.0" android:toAlpha="1.0">
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">
示例图
日间模式 夜间模式
主界面布局
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 一个是日间模式的 一个是夜间模式的
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"?>values - stylesname="app_name">DayNightTwo name="change_to_content">切换成夜间模式
一定要注意这个 继承这个
values - night - colors
xml version="1.0" encoding="utf-8"?>values - night - stringsname="colorPrimary">#35464e name="colorPrimaryDark">#212a2f name="colorAccent">#212a2f name="main_textView">#00FF00
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"