android换肤功能中,如何动态获取控件中背景图片的资源id?

在开发Android换肤功能时,遇到一个问题:如何动态获取控件的背景图片资源ID。通常,换肤示例是通过资源名称如R.drawable.background来操作,但关键在于需要预先知道这个引用。实现方案是,利用资源名称在皮肤包中找到对应的ID,从而实现动态更换皮肤。
摘要由CSDN通过智能技术生成

    这个是在在做一个换肤功能时遇到的问题。

    对于换肤,网上都有示例,可以从别的皮肤安装包中读取所要的资源,前提是你必须先持有这个资源的引用名称,像R.drawable.background(喂,这不是废话嘛)。这个换肤的方案原理就是,自身应用的资源名称是R.drawable.background,那皮肤包中应该也是这个名称,然后通过这个名称获取该资源在皮肤包中的具体id,代码:

    //先获取本地资源引用名称,type name是R.drawable.background中的"drawable",entry name是"background"
    String resTypeName = getContext().getResources().getResourceTypeName(id);
    String resEntryName = getContext().getResources().getResourceEntryName(id);
    //然后创建皮肤包所在应用的Context
    Context apk = getContext().createPackageContext(packageName,
            Context.CONTEXT_IGNORE_SECURITY)
    //然后就是获取皮肤包中的资源id了
    int drawavleId = apk.getResources().getIdentifier(resEntryName, resTypeName,
            apk.getPackageName());
     这个换肤方案中,每个Activity在切换皮肤时,需要遍历整个layout,判断控件如果id中包含“skin”的字符
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值