三行代碼實現白天夜間模式流暢切換的實現庫

Usage xml android:background= ?attr/zzbackground app:backgroundAttr= zzbackground //若是當前頁面要當即刷新,這裏傳入屬性名稱 好比R.attr.zzbackground 傳zzbackground便可 android:textColor= ?attr/zztextColor app:textColorAttr= zztextColor //css

演示效果html

ChangeMode

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

爲相關屬性設置對應模式的屬性值:java

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="dayBackground">#F2F4F7</color> <color name="dayTextColor">#000</color> <color name="dayItemBackground">#fff</color> <color name="nightItemBackground">#37474F</color> <color name="nightBackground">#263238</color> <color name="nightTextColor">#fff</color> </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三個屬性。如需當前頁面當即刷新,需填加相應屬性。android

屬性 描述
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(); }

代碼調用三步,便可開始夜間之旅。
若是頁面有新建立的視圖要加入夜間模式控制,安卓源碼調用:git

//添加額外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以後調用以下代碼給相關屬性賦值:github

TypedValue  attrTypedValue = ChangeModeController.getAttrTypedValue(this, R.attr.zztextColor); toolbar.setTitleTextColor(getResources().getColor(attrTypedValue.resourceId)); 源碼下載地址:http://www.codesocang.com/kj/transition/33588.html
相關文章
相關標籤/搜索