加入收藏 | 设为首页 | 会员中心 | 我要投稿 52刷机网 (https://www.52shuaji.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 安卓频道 > 安卓资讯 > 正文

Android实现夜间模式的方法(一)

发布时间:2017-05-19 14:11:28 所属栏目:安卓资讯 来源:www.jianshu.com
导读:版权声明:本文为博主原创文章,未经博主允许不得转载。最近整理了几篇在乐视实习时写的文章,都是一些简单的技术调研,Android夜间模式是当时做技术分享的内容,供大家参考,欢迎一起讨论~一.夜间模式的简单介绍随着人...

具体demo可见 https://github.com/luozheng1985/skin_demo这种方式的优点是:皮肤资源的格式定义很随意可以是zip也可以是自定义的格式,只要程序中能够解析到资源就行,缺点是需要读取并解析文件,导致效率上会比较差。

2.apk文件换肤

这种方法通过获取其他程序的context来获取皮肤资源。我们知道android程序中要获取drawable、layout等资源,都要通过context.getResources().getXXX的方式。那么如果我们可以拿到其他程序的context,那么那个程序就可以作为皮肤程序来提供资源给主程序使用了。android中两个程序相互读取数据的条件是:两个程序的共享用户id相同,通过AndroidManifest.xml中的android:sharedUserId属性配置;两个程序签名相同。想要改变皮肤时,改变提供资源的context为皮肤程序的context,然后刷新即可。具体实现步骤如下:

  1. 在主应用程序 和 皮肤资源程序的AndroidManifest.xml中配置相同sharedUserId。android:sharedUserId是指共用一个uid,也就是,凡是这个属性相同的工程,都会共用同一个uid*为了让用户无感知,需要安装后皮肤APk后,让自己不可以打开,且不生成桌面图标,因此要去掉AndroidManifest.xml的如下代码:

    <intent-filter>              <action android:name="android.intent.action.MAIN" />               <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
  2. 皮肤资源apk 与 主应用apk中对同一功能的皮肤资源文件名要一致。

  3. 在主程序中 获取到皮肤资源apk对应的Context,

    Context skinContext = createPackageContext("皮肤资源包名",Context.CONTEXT_IGNORE_SECURITY);

    通过返回的context对象就可以访问到皮肤资源apk中的任何资源如 :

    Drawable drawable =skinContext.getResources().getDrawable(R.drawable.bg_title)

    (皮肤资源Apk 无需包含任何UI Activity,只需要包含需要更换皮肤的res资源文件)

优点:可定期提供换肤包供下载,换肤方式灵活,同时效率比较高。缺点:如需使用某个皮肤,必须安装该皮肤。但其实现起来还是用代码的方式来提供置换的。同时,让两个工程来共享一个进程,这样做十分的危险。此外,安装了很多皮肤后,应用程序列表里面会有很多皮肤程序。在主程序卸载后,皮肤工程不能同样的卸载。如卸载腾讯微博之后,安装的皮肤apk没有被卸载。

(编辑:52刷机网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读