Android 换肤方案(2种)
来源:互联网 发布:数据库是什么软件 编辑:程序博客网 时间:2024/05/17 07:27
多的不说,先给出今天的参考链接
- 参考链接1 github代码地址
- 参考链接2 任玉刚动态加载机制
改装链接一中的代码
第一种方案的原理这里不说了,Android 换肤功能的实现(Apk插件方式),他这个有几个明显的缺陷(或许是作者懒得做?)
我在这里只是将上面的代码改成没快捷方式,代码安装。
去除快捷方式;
在皮肤资源的配置文件中去掉下面一行
<category android:name="android.intent.category.LAUNCHER" />
代码安装,我这里是直接安装SD卡中的apk文件。如何将apk放置到SD卡下,打开DDMS,导入文件即可。
String filepath = Environment.getExternalStorageDirectory()+"/myskin-debug.apk"; Log.e(TAG,filepath); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file://"+filepath),"application/vnd.android.package-archive"); startActivity(intent);
上面的方式中还是有安装提示界面。这一点非常差。
- 最严重的缺陷就是需要安装,虽然原理上有静默安装和静默写在。但是实现起来还是有困难。
动态加载
因为上面的缺陷,导致那种方法不会被用到生产环境中,我们来看动态加载的方法。其实非常简单。代码如下。
AssetManager assetManager = null; try { assetManager = AssetManager.class.newInstance(); Method addAssetPath = assetManager.getClass().getMethod("addAssetPath",String.class); addAssetPath.invoke(assetManager,Environment.getExternalStorageDirectory()+"/myskin-debug.apk"); mAssetManager= assetManager; } catch (Exception e) { Log.e(TAG, "onClick: "+e.getMessage() ); e.printStackTrace(); } Resources resources = getApplicationContext().getResources(); Resources mResources = new Resources(assetManager,resources.getDisplayMetrics(),resources.getConfiguration());// Drawable drawable = mSkinContext.getResources().getDrawable(mResId[mCount]); Drawable drawable = mResources.getDrawable(mResId[mCount]); mTopbar.setBackground(drawable); mBottomBar.setBackground(drawable); mCount++; if (mCount > 2) { mCount = 0; }
对了,要记得加读写权限。
关于换肤方案,还是去看张鸿洋
0 0
- Android 换肤方案(2种)
- 换肤方案[整理]
- Android Theme-安卓样式换肤实践方案
- Android可更换布局的换肤方案
- Android 主题切换/换肤方案 研究(一)
- Android 主题切换/换肤方案 研究(二)
- Android 主题切换/换肤方案 研究(三)
- Android 主题切换/换肤方案 研究(四)
- Android 主题切换/换肤方案 研究(五)
- 软件换肤实现方案
- ListView滚动条的换肤方案
- ListView滚动条的换肤方案
- android 换肤(2)——插件式无缝换肤(解析鸿洋大神的换肤流程)
- Android换肤的两种思路
- Android换肤的两种思路
- 【kris专题】android 换肤(续)
- Android实现换肤功能(一)
- Android实现换肤功能(二)
- 白手起家学习数据科学 ——处理数据之“数据探索篇”(七)
- Java基本知识(连载)-面向对象入门
- 本机上多个cocos2dx版本下怎么创建自己想要的版本?
- ios_obj-c KVC,谓词,KVO和通知
- elasticsearch java query API
- Android 换肤方案(2种)
- Class_file&&Android应用调用方法
- Android关于创建Message
- iOS 线程的基本介绍
- 安卓模拟器 com.android.phone已停止运行的解决办法
- 数字图像处理:第十一章基于特征向量的变换
- 【iOS】plist无法写入的原因
- Zookeeper命令行以及java API简单使用
- 14.9.2 File Space Management