当前位置: 首页 > news >正文

做钢材的网站有哪些网站开发作用

做钢材的网站有哪些,网站开发作用,上海建设机械网站,wordpress 评论者邮箱ResourceId是如何变成对应Resource的 在上一章中#xff0c;我们已经讲过#xff0c;apk中有个资源索引文件 其中保存了每个资源对应的id#xff0c;name#xff0c;type#xff0c;path 资源文件的解析#xff0c;主要涉及两个类#xff0c;AssetManager和Resource …ResourceId是如何变成对应Resource的 在上一章中我们已经讲过apk中有个资源索引文件 其中保存了每个资源对应的idnametypepath 资源文件的解析主要涉及两个类AssetManager和Resource AssetManager用于管理apk中的原生资源文件包括asset和resourceAssetManager通过调用addAssetPath方法来添加提供资源的apkaddAssetPath默认使用的是context.packageResourcePath及当前安装包的位置如果想加载其它apk里面的资源就得自定义AssetManagerAssetManager的构造函数是因此功能必须通过反射才能自己创建新的实例Resource用于管理resource文件夹下的资源如colordrawable等Resource解析资源前首先要拿到apk中的资源索引文件和屏幕信息配置信息Resource对象的构建依赖于AssetManagerDisplayMetricsConfiguration三个对象如果我们想从其它apk中加载资源则需要提供自定义的AssetManager给Resource由于DisplayMetrics和Configuration信息是固定的因此不需要自定义 设计思路 当我们想根据皮肤去替换某个资源时在skin.apk中创建一份同名但内容不同的资源自定义SkinnerAssetManager并绑定skin.apk自定义SkinnerResources并绑定SkinnerAssetManager相同名称的资源在不同apk中的id是不一样但我们可以通过nametypepackage的方式去找到对应的id通过OriginResourceIdOriginResources得到nametypepackage通过SkinnerResources以及nametypepackage拿到SkinnerResourceId通过SkinnerResourcesSkinnerResourceId解析出skin.apk中的color或drawable由于并不是所有属性都会跟随皮肤而变换因此SkinnerResourceId有可能不存在如果SkinnerResourceId不存在则使用OriginResources去加载原来的资源这样大致实现了资源的自动加载 自定义SkinnerAssetManager package com.android.library.skinnerimport android.app.Application import android.content.res.AssetManager import android.content.res.Resources import android.graphics.drawable.DrawableSuppress(Deprecated) object SkinnerAssetManager {lateinit var context: Applicationlateinit var assetManager: AssetManagerlateinit var skinnerResources: Resourceslateinit var originResources: Resourcesfun init(application: Application, resourcePath: String) apply {context applicationcreateHookedAssetManager(resourcePath)}private fun createHookedAssetManager(resourcePath: String) {val assetManager AssetManager::class.java.newInstance()val method AssetManager::class.java.getDeclaredMethod(addAssetPath, String::class.java)method.invoke(assetManager, resourcePath)this.originResources context.resourcesval resources Resources(assetManager, originResources.displayMetrics, originResources.configuration)this.assetManager assetManagerthis.skinnerResources resources}fun skinResId(resId: Int): Int {return skinnerResources.getIdentifier(originResources.getResourceName(resId),originResources.getResourceTypeName(resId),originResources.getResourcePackageName(resId))}fun skinColor(resId: Int): Int {val skinResId skinResId(resId)if (skinResId 0) {return skinnerResources.getColor(skinResId)}return originResources.getColor(resId)}fun skinDrawable(resId: Int): Drawable {val skinResId skinResId(resId)if (skinResId 0) {return skinnerResources.getDrawable(skinResId)}return originResources.getDrawable(resId)} }拷贝测试皮肤包到存储卡 这里我们将测试包放在asset文件夹里面在应用启动时拷贝到存储卡从而省去人工操作 private fun copySkinPackage() {val fis application.assets.open(skin.apk)val fos FileOutputStream(sdcard/skin.apk)val buffer ByteArray(fis.available())fis.read(buffer)fos.write(buffer) }通过指定皮肤包初始化SkinnerAssetManager SkinnerAssetManager.init(application, sdcard/skin.apk)使用自定义的SkinnerAssetManager加载资源 val drawable SkinnerAssetManager.skinDrawable(R.drawable.icon_app) binding.image.setImageDrawable(drawable)十万个为什么 到目前为止我们已经实现了从指定apk中加载同名资源 下一步问题是如何让Activity/Fragment/View/Xml使用SkinnerResources而不是默认的OriginResources 且听下回分解
http://www.hkea.cn/news/14303573/

相关文章:

  • 个人做电商网站alpha wordpress 版本
  • 广州自助建站模板聊城网站建设信息
  • 深圳网站建设黄浦网络 技术差公司网站建设推荐q479185700顶上
  • 站长字体c做的网站
  • 网站建设合同 包括什么宁波市北仑区建设局网站
  • 荥阳做网站推广百度网站怎么做信息
  • 本地网站开发环境搭建网络公司经营范围写电子商务
  • 智慧团建入口登录网站腾云网站建设怎么样
  • 青岛公司网站开源微信商城源码
  • 赣县城乡规划建设局网站携永东方 wordpress
  • 富阳做网站公司上海浦东注册公司
  • 制作网站要多久wordpress后台页地址修改
  • 域名和网站建设费如何入帐wordpress如何关闭评论
  • 网站建设方案书 广东网站运营包括哪些内容
  • 网站建设策划结束语福建搜索引擎推广方法
  • 比较好的网站建设公司电子商务网站开发的流程图
  • 如何对新开网站做收录济南网站建设优化熊掌号
  • 通州重庆网站建设做网站的机构
  • 一个网站是怎么建立的茂名高端模板建站
  • 无锡本地网站企业整合营销
  • 珠海市建设工程造价协会网站用vs做购物网站
  • 网站能不能用自己的电脑做服务器wordpress主题重置
  • 门户网站建设报价哪个装修公司比较好
  • 免费做ppt的网站有哪些wordpress账户密码为空
  • 苏省住房和城乡建设厅网站商城网站建站方案
  • 网站的风格主要包括网站链接 动态图怎么做
  • 不收费的网站有哪些推荐做网站的话术
  • 珠海商城网站建设网站标题优化工具
  • 广告公司网站设计方案免费的关键词优化软件
  • 只做网站不做appwordpress 帖子权限