Android開源:SkinSprite - 不需要重啟 Activity 的夜晚模式實現方案
中文說明
Skin Sprite 是另一種不重啟 Activity 切換Android夜間模式的庫, 只支持 Api 14以上
如何工作
我們把所有可以換膚的 Activity 都繼承自 SkinnableActivity , 每次需要換膚的時候就調用 setDayNightMode 函數, 它會去通知 View 層級中所有實現了 Skinnable 接口的對象. 調用他們的 applyDayNight 方法, 來切換他們的樣式.
我們在 View 生成的時候, 記錄下了它引用的一些資源id, 然后因為切換了 UiMode 后, 獲取相同資源 id 得到的實質資源不一樣的特性來完成夜間模式切換的方案.
如何使用
- 定義好所有夜間模式需要使用的資源和正常模式下使用的資源, 在 res 文件夾中分別使用 drawable , drawable-night , values , values-night 等文件夾進行區分.
- 使你的 Activity 繼承于 SkinnableActivity , 它本身是繼承于 AppCompatActivity 的, 和 appcompat-v7 庫深度整合.
- 記得在 AndroidManifest.xml 中的 activity 聲明標簽里加入 android:configChanges="uiMode" , 這樣才不會重啟Activity
- 當你需要切換夜晚模式的時候, 調用 setDayNightMode
- 如果你需要自定義View, 請繼承 Skinnable 接口, 實現里面的方法, 具體可參照庫內源碼.
Demo
看本 repo 下面的 app 文件夾內的用法.
本文由用戶 KriMonroy 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!