Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 快速簡單實現夜間模式

Android 快速簡單實現夜間模式

編輯:關於Android編程

ChangeMode

項目地址:ChangeMode

Implementation of night mode for Android.

用最簡單的方式實現夜間模式,支持ListView、RecyclerView。

Preview


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) {
            //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);

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


       //2. 設置切換
       //ChangeModeController.changeDay(this, R.style.DayTheme);
       //ChangeModeController.changeNight(this, R.style.NightTheme);
    }

 @Override
    protected void onDestroy() {
        super.onDestroy();
        //3. 在 onDestroy 調用
        ChangeModeController.onDestory();
    }

詳細操作描述


第一步:自定義屬性



                
                
                
                

第二步:配置夜間 style 文件

<code><code><code><code><resources>

    <!--{cke_protected}{C}%3C!%2D%2D%20Base%20application%20theme.%20%2D%2D%3E--><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar" type="text/css"><!--{cke_protected}{C}%3C!%2D%2D%20Customize%20your%20theme%20here.%20%2D%2D%3E-->
        <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>

    <!--{cke_protected}{C}%3C!%2D%2D%E6%97%A5%E9%97%B4%E6%A8%A1%E5%BC%8F%20%2D%2D%3E--><style name="DayTheme" parent="AppTheme" type="text/css"><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>

    <!--{cke_protected}{C}%3C!%2D%2D%E5%A4%9C%E9%97%B4%E6%A8%A1%E5%BC%8F%20%2D%2D%3E--><style name="NightTheme" parent="AppTheme" type="text/css"><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" type="text/css"><style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
</pre>
</pre>

 

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




    #F2F4F7
    #000
    #fff

    #37474F
    #263238
    #fff

第三步:在布局文件中配置使用對應屬性




    
        
    

注意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));
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved