Android更换皮肤解决方案,阿里资深Android开发带你搞懂Framework

.getMethod(“addAssetPath”, String.class);

addAssetPath.invoke(assetManager, dexPath_tmp);

// 得到资源实例

Resources superRes = mContext.getResources();

// 实例化皮肤资源

Resources skinResource = new Resources(assetManager,

superRes.getDisplayMetrics(),

superRes.getConfiguration());

// 保存资源路径

SkinConfig.getInstance(mContext).setSkinResourcePath(

dexPath_tmp);

return skinResource;

}

} catch (Exception e) {

return null;

}

return null;

}

@Override

protected void onPostExecute(Resources result) {

super.onPostExecute(result);

mResources = result;

// 这里执行回调方法

if (callback != null) {

if (mResources != null) {

callback.loadSkinSuccess();

} else {

callback.loadSkinFail();

}

}

}

}.execute(dexPath);

}

public static interface loadSkinCallBack {

public void startloadSkin();

public void loadSkinSuccess();

public void loadSkinFail();

}

}

重点关注这个类,里面提供了一个异步方法对包和asset进行操作,这里用到了反射机制,反射调用addAssetPath来添加assets的路径,这个路径就是我们skin.apk的路径。具体细节,各位查看代码。

我们在Activity界面中使用上面提供的方法:

package com.devilwwj.skin;

import android.app.Activity;

import android.content.res.Resources;

import android.os.Bundle;

import android.os.Environment;

import android.util.Log;

import android

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值