簡單實現夜間模式漸變

pujiang_op 8年前發布 | 10K 次閱讀 安卓開發 Android開發 移動開發

話不多說,先上效果圖!

推ter 實現夜間模式

我的實現

準備好你的鏟鏟

  • Android Support Library v7 24.2.0
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
  • 新建values-night文件夾,新建colors.xml,夜間模式要設置的顏色放在這里就好了!

//File : values/colors.xml
<resources>
    <color name="colorPrimary">@color/md_white_1000</color>
    <color name="colorPrimaryDark">@color/md_grey_600</color>
    <color name="colorAccent">@color/md_blue_500</color>
</resources>

//File : values-night/colors.xml <resources> <color name="colorPrimary">#ff243447</color> <color name="colorPrimaryDark">#ff1b2836</color> <color name="colorAccent">@color/md_blue_500</color> </resources></code></pre>

  • Svg 的 fillcolor 取用你的color.xml 就好了!方便!如果不是svg,就要另外準備夜間模式的圖片在drawable-night 文件夾里

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="16.0"
    android:viewportWidth="16.0">
    <path
        android:fillColor="@color/colorPrimary"
        android:pathData="etc"
        android:strokeColor="#00000000"
        android:strokeWidth="1" />
</vector>

Show Me the code

//Does not work in Android Nugget
public void setDayNightMode(boolean day) {
        if (day)
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        else
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        getWindow().setWindowAnimations(R.style.WindowAnimationFadeInOut);
        recreate();
    }

//Style <style name="WindowAnimationFadeInOut"> <item name="@android:windowEnterAnimation">@anim/fade_in</item> <item name="@android:windowExitAnimation">@anim/fade_out</item> </style>

//@anim/fade_in <set xmlns:android="; <alpha android:duration="1000" android:fromAlpha="0" android:interpolator="@android:anim/decelerate_interpolator" android:toAlpha="1.0" /> </set>

//@anim/fade_out <set xmlns:android="; <alpha android:duration="1500" android:fromAlpha="1.0" android:interpolator="@android:anim/decelerate_interpolator" android:toAlpha="0" /> </set></code></pre>

一點解釋

  1. windowAnimation 在這里的作用是模擬 startActivity 的 OverridingPendingTransition, 搭配 recreate 就不會出現閃現黑屏的情況了。
  2. 在style 文件里為windowAnimation 創建一個新的style,設定漸入動畫和漸出動畫。
  3. AppCompatDelegate.setDefaultNightMode 是support 包里的方法,我們只要簡單設置他的mode 搭配recreate就可以變換夜間模式。
MODE_NIGHT_NO - 日間模式
MODE_NIGHT_YES - 夜間模式
MODE_NIGHT_AUTO - 根據當前時間自動切換 亮色(light)/暗色(dark)主題
MODE_NIGHT_FOLLOW_SYSTEM(默認選項). 設置為跟隨系統,通常為 MODE_NIGHT_NO;貌似有些手機設定可以開啟夜間模式

備注

  • 這個漸變效果不支持API 24 Nougat
  • API 24 recreate 不會閃現黑屏

我把這個效果實現在我的項目里了,有興趣的童鞋可以來看一看星一星!謝謝!

https://github.com/chkfung/MeizhiGank

Reference

  1. https://kingideayou.github.io/2016/03/07/appcompat_23.2_day_night/

 

來自:http://www.jianshu.com/p/f30ebec8b4ed

 

 本文由用戶 pujiang_op 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!