我们在平常使用一些app的时候,或多或少的接触到有一些app带有更换主题的功能,比如白天和晚上主题的更换,甚至于支持在线主题的下载更换.那么这种主题的更换到底是如何实现的呢?
内置主题
相信大家都用到过,就是在values文件夹下有对应的style文件,在其中自定义主题,然后在布局文件中使用,然后在activity中通过setTheme(int themeId)方法来指定主题
总结:这种方法好处就是可以使用android提供的资源,但是相应的坏处就是程序已经发布,主题也就定死了,设计了几种,发布之后就只有那几种了,不能再添加了,显然这对于一个app来说失去了一定的灵活性
apk主题
第二种是apk主题:在Android中,所有的资源都是基于包的。资源以id进行标识,在同一个应用中,每个资源都有唯一标识。但在不同的应用中,可以有相同的id。因此,只要获取到了其他应用的Context对象,就可以通过它的getRsources获取到其绑定的资源对象。然后,就可以使用Resources的getXXX方法获取字符串、颜色、dimension、图片等。要想获取其他应用的Context对象,Android已经为我们提供好了接口。那就是android.content.ContextWrapper.createPackageContext(String packageName, int flags)方法
我们可以看到这两种方法的区别,显然第二种比较灵活,但是正是因为它的灵活性,导致了开发这个app的时候需要在代码中设置所有的可变资源,所以app开发的周期变长,当然带给用户的视觉体验必然是要好一些的,毕竟可以由用户自己选择喜欢的主题下载并更换