Android开源:SkinSprite - 不需要重启 Activity 的夜晚模式实现方案

KriMonroy 7年前
   <h2>中文说明</h2>    <p>Skin Sprite 是另一种不重启 Activity 切换Android夜间模式的库, 只支持 Api 14以上</p>    <h2>如何工作</h2>    <p>我们把所有可以换肤的 Activity 都继承自 SkinnableActivity , 每次需要换肤的时候就调用 setDayNightMode 函数, 它会去通知 View 层级中所有实现了 Skinnable 接口的对象. 调用他们的 applyDayNight 方法, 来切换他们的样式.</p>    <p>我们在 View 生成的时候, 记录下了它引用的一些资源id, 然后因为切换了 UiMode 后, 获取相同资源 id 得到的实质资源不一样的特性来完成夜间模式切换的方案.</p>    <h2>如何使用</h2>    <ol>     <li>定义好所有夜间模式需要使用的资源和正常模式下使用的资源, 在 res 文件夹中分别使用 drawable , drawable-night , values , values-night 等文件夹进行区分.</li>     <li>使你的 Activity 继承于 SkinnableActivity , 它本身是继承于 AppCompatActivity 的, 和 appcompat-v7 库深度整合.</li>     <li>记得在 AndroidManifest.xml 中的 activity 声明标签里加入 android:configChanges="uiMode" , 这样才不会重启Activity</li>     <li>当你需要切换夜晚模式的时候, 调用 setDayNightMode</li>     <li>如果你需要自定义View, 请继承 Skinnable 接口, 实现里面的方法, 具体可参照库内源码.</li>    </ol>    <h2>Demo</h2>    <p>看本 repo 下面的 app 文件夹内的用法.</p>    <p> </p>    <p> </p>    <p> </p>