演示效果

Usage xml

    android:background="?attr/zzbackground"    app:backgroundAttr="zzbackground"//如果当前页面要立即刷新,这里传入属性名称  比如R.attr.zzbackground  传zzbackground即可        android:textColor="?attr/zztextColor"    app:textColorAttr="zztextColor"//如需立即刷新页面效果 同上

java

@Override    protected void onCreate(Bundle savedInstanceState) { // 在要立即切换效果的页面调用此方法 ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme); //在其他页面调用此方法 //ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //添加额外view至夜间管理 // ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary); //ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent); // ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent); // 设置切换 //ChangeModeController.changeDay(this, R.style.DayTheme); //ChangeModeController.changeNight(this, R.style.NightTheme); } @Override protected void onDestroy() { super.onDestroy(); // 在onDestroy调用 ChangeModeController.onDestory(); }

详细操作描述


第一步:自定义属性

<?xml version="1.0" encoding="utf-8"?><resources>                <attr name="zzbackground" format="color|reference"/> <attr name="zzbackgroundDrawable" format="reference"/> <attr name="zztextColor" format="color"/> <attr name="zzItemBackground" format="color"/> resources> 

第二步:配置夜间style文件

<resources>        <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> -- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary "colorPrimaryDark">@color/colorPrimaryDark "colorAccent">@color/colorAccent "windowActionBar">false "android:windowNoTitle">true "windowNoTitle">true style>  <style name="DayTheme" parent="AppTheme"> <item name="zzbackground">@color/dayBackground "zzbackgroundDrawable">@drawable/ic_launcher "zztextColor">@color/dayTextColor "zzItemBackground">@color/dayItemBackground style>  <style name="NightTheme" parent="AppTheme"> <item name="zzbackground">@color/nightBackground "zzbackgroundDrawable">@color/nightBackground "zztextColor">@color/nightTextColor "zzItemBackground">@color/nightItemBackground "colorPrimary">@color/colorPrimaryNight "colorPrimaryDark">@color/colorPrimaryDarkNight "colorAccent">@color/colorAccentNight style> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> resources> 

为相关属性设置对应模式的属性值:

<?xml version="1.0" encoding="utf-8"?><resources>    <color name="dayBackground">#F2F4F7color> <color name="dayTextColor">#000color> <color name="dayItemBackground">#fffcolor> <color name="nightItemBackground">#37474Fcolor> <color name="nightBackground">#263238color> <color name="nightTextColor">#fffcolor> resources>

第三步:在布局文件中配置使用对应属性

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:background="?attr/zzbackground" app:backgroundAttr="zzbackground" tools:context="com.thinkfreely.changemode.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:backgroundAttr="colorPrimary" app:titleTextColor="?attr/zztextColor" app:popupTheme="@style/AppTheme.PopupOverlay" /> android.support.design.widget.AppBarLayout> <Button android:layout_width="match_parent" android:layout_height="120dp" android:gravity="center" android:textColor="?attr/zztextColor" app:textColorAttr="zztextColor" android:background="?attr/zzItemBackground" app:backgroundAttr="zzItemBackground" android:padding="10dp" android:layout_marginBottom="8dp" android:textSize="22sp" android:textAllCaps="false" android:text="夜间模式切换by Mr.Zk" /> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/> LinearLayout>

注意textColorAttr、backgroundAttr、backgroundDrawableAttr三个属性。如需当前页面立即刷新,需填加相应属性。

属性 描述
textColorAttr 修改字体颜色时设置。如R.attr.zztextColor 传zztextColor 即可。例:app:textColorAttr="zztextColor"
backgroundAttr 修改背景颜色/背景图片时设置。同上。例: app:backgroundAttr="zzbackground"
backgroundDrawableAttr 修改背景颜色/背景图片时设置。同上。例: app:backgroundDrawableAttr="zzbackground"

第四步:页面调用java代码

@Override    protected void onCreate(Bundle savedInstanceState) { //1. 在要立即切换效果的页面调用此方法 ChangeModeController.getInstance().init(this,R.attr.class).setTheme(this, R.style.DayTheme, R.style.NightTheme); //在其他页面调用此方法 //ChangeModeController.setTheme(this, R.style.DayTheme, R.style.NightTheme); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //2.设置切换夜间活日间模式 //ChangeModeController.changeDay(this, R.style.DayTheme);//切换日间模式 //ChangeModeController.changeNight(this, R.style.NightTheme);//切换夜间模式 } @Override protected void onDestroy() { super.onDestroy(); //3. 在onDestroy调用 ChangeModeController.onDestory(); }

代码调用三步,即可开始夜间之旅。
如果页面有新创建的视图要加入夜间模式控制,安卓源码调用:

         //添加额外view至夜间管理        // ChangeModeController.getInstance().addBackgroundColor(toolbar, R.attr.colorPrimary);        //ChangeModeController.getInstance().addBackgroundDrawable(view,R.attr.colorAccent);       // ChangeModeController.getInstance().addTextColor(view,R.attr.colorAccent);

如果在改变夜间模式时有其他非标准定义的属性时,可在ChangeModeController.changeDay或ChangeModeController.changeNight之后调用如下代码给相关属性赋值:

   TypedValue  attrTypedValue = ChangeModeController.getAttrTypedValue(this, R.attr.zztextColor);   toolbar.setTitleTextColor(getResources().getColor(attrTypedValue.resourceId));源码下载:http://www.codesocang.com/kj/transition/33588.html

更多相关文章

  1. Android(安卓)Afianl框架(2)——FinalDB
  2. Android展开/收缩列表 ExpandableListView 每次只能有一个项目是
  3. android TextView 如何动态获取宽度
  4. android load 本地 html 页面
  5. Android-webview访问本地HTML5及本地HTML5之间的跳转
  6. Android(安卓)插件化分析(2)- 动态代理
  7. 监听Android键盘上的按钮
  8. This tag and its children can be replaced by ~~~
  9. NDK调试

随机推荐

  1. android:layout_gravity和android:gravit
  2. Android应用程序开发实用案例50则
  3. (mac)Android(安卓)Studio安装以及Fetchi
  4. 深入透析Android事件分发机制
  5. Android(安卓)4.03 编译系统------envset
  6. Android(安卓)Jni代码示例讲解
  7. Android(安卓)Open Accessory Protocol 2
  8. Android模拟SD卡实现方法解析
  9. 【Android增量升级系列_01】 浅谈Android
  10. Android(安卓)X86