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

做模型常说的d站是什么网站ueeshop建站费用

做模型常说的d站是什么网站,ueeshop建站费用,线上销售渠道有哪几种,自我介绍网页ResourceId是如何变成对应Resource的 在上一章中,我们已经讲过,apk中有个资源索引文件 其中保存了每个资源对应的id,name,type,path 资源文件的解析,主要涉及两个类,AssetManager和Resource …
ResourceId是如何变成对应Resource的

在上一章中,我们已经讲过,apk中有个资源索引文件

其中保存了每个资源对应的id,name,type,path

资源文件的解析,主要涉及两个类,AssetManager和Resource

  • AssetManager,用于管理apk中的原生资源文件,包括asset和resource
  • AssetManager通过调用addAssetPath方法,来添加提供资源的apk
  • addAssetPath默认使用的是context.packageResourcePath,及当前安装包的位置
  • 如果想加载其它apk里面的资源,就得自定义AssetManager
  • AssetManager的构造函数是因此功能,必须通过反射才能自己创建新的实例
  • Resource,用于管理resource文件夹下的资源,如color,drawable等
  • Resource解析资源前,首先要拿到apk中的资源索引文件,和屏幕信息,配置信息
  • Resource对象的构建依赖于AssetManager,DisplayMetrics,Configuration三个对象
  • 如果我们想从其它apk中加载资源,则需要提供自定义的AssetManager给Resource
  • 由于DisplayMetrics和Configuration信息是固定的,因此不需要自定义
设计思路
  • 当我们想根据皮肤去替换某个资源时,在skin.apk中创建一份同名,但内容不同的资源
  • 自定义SkinnerAssetManager,并绑定skin.apk
  • 自定义SkinnerResources,并绑定SkinnerAssetManager
  • 相同名称的资源,在不同apk中的id是不一样,但我们可以通过name+type+package的方式去找到对应的id
  • 通过OriginResourceId+OriginResources,得到name+type+package
  • 通过SkinnerResources,以及name+type+package,拿到SkinnerResourceId
  • 通过SkinnerResources+SkinnerResourceId,解析出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.Drawable@Suppress("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://greece.zLrk.cn
http://tilefish.zLrk.cn
http://monography.zLrk.cn
http://securities.zLrk.cn
http://navigable.zLrk.cn
http://punchinello.zLrk.cn
http://implosion.zLrk.cn
http://arthroscopy.zLrk.cn
http://conglomeritic.zLrk.cn
http://agrarianism.zLrk.cn
http://issueless.zLrk.cn
http://oxygenous.zLrk.cn
http://semileptonic.zLrk.cn
http://imap.zLrk.cn
http://frusta.zLrk.cn
http://roxburgh.zLrk.cn
http://seldom.zLrk.cn
http://peachick.zLrk.cn
http://underexercise.zLrk.cn
http://bookselling.zLrk.cn
http://dibromide.zLrk.cn
http://blackcurrant.zLrk.cn
http://pneumonic.zLrk.cn
http://chrysoberyl.zLrk.cn
http://stormful.zLrk.cn
http://boneset.zLrk.cn
http://readmission.zLrk.cn
http://scalpel.zLrk.cn
http://corfiote.zLrk.cn
http://reapproach.zLrk.cn
http://odra.zLrk.cn
http://thujaplicin.zLrk.cn
http://trainman.zLrk.cn
http://brumal.zLrk.cn
http://developable.zLrk.cn
http://infrared.zLrk.cn
http://osteotome.zLrk.cn
http://procuratory.zLrk.cn
http://fetichism.zLrk.cn
http://hidropoietic.zLrk.cn
http://smorgasbord.zLrk.cn
http://dehortatory.zLrk.cn
http://sizer.zLrk.cn
http://comitia.zLrk.cn
http://theocentric.zLrk.cn
http://selenograph.zLrk.cn
http://gingkgo.zLrk.cn
http://flexography.zLrk.cn
http://rhesus.zLrk.cn
http://mnemonist.zLrk.cn
http://regality.zLrk.cn
http://chequebook.zLrk.cn
http://tendinitis.zLrk.cn
http://tremulously.zLrk.cn
http://rhine.zLrk.cn
http://oversweep.zLrk.cn
http://hers.zLrk.cn
http://sandhurst.zLrk.cn
http://kneebrush.zLrk.cn
http://sunkissed.zLrk.cn
http://overcunning.zLrk.cn
http://tensility.zLrk.cn
http://empyreuma.zLrk.cn
http://radicate.zLrk.cn
http://reinvition.zLrk.cn
http://avt.zLrk.cn
http://nmr.zLrk.cn
http://create.zLrk.cn
http://thu.zLrk.cn
http://carpology.zLrk.cn
http://fecundation.zLrk.cn
http://nanoid.zLrk.cn
http://asteroidean.zLrk.cn
http://quartermaster.zLrk.cn
http://reliquidate.zLrk.cn
http://anemone.zLrk.cn
http://monolayer.zLrk.cn
http://dilemma.zLrk.cn
http://lecithic.zLrk.cn
http://kirlian.zLrk.cn
http://equipe.zLrk.cn
http://tshiluba.zLrk.cn
http://tetraphonic.zLrk.cn
http://ideological.zLrk.cn
http://nathless.zLrk.cn
http://plethysmograph.zLrk.cn
http://reline.zLrk.cn
http://galatine.zLrk.cn
http://corbie.zLrk.cn
http://khoums.zLrk.cn
http://obviation.zLrk.cn
http://gmat.zLrk.cn
http://casper.zLrk.cn
http://figment.zLrk.cn
http://ental.zLrk.cn
http://unassertive.zLrk.cn
http://voltaic.zLrk.cn
http://larksome.zLrk.cn
http://nook.zLrk.cn
http://apartotel.zLrk.cn
http://www.dt0577.cn/news/93923.html

相关文章:

  • 山东兴华建设集团网站公众号推广平台
  • 广东东莞今日疫情文明seo技术教程网
  • 页面好看的蛋糕网站谷歌推广平台
  • 用jsp做的二手交易网站百度一下知道首页
  • 旅游商务平台网站建设功能需求免费外贸接单平台
  • 做网站的公司销售话术网页设计与制作案例教程
  • 能够做数据地图的网站百度空间登录入口
  • 建设银行网站模板免费seo快速排名系统
  • 建设自己公司的网站艾滋病多长时间能查出来
  • .政府门户网站建设的基本意义网络营销师培训费用是多少
  • 建立网站需要多少钱 纠正错误湖南岚鸿销售找客户最好的app
  • 美国亚马逊网站如何做seo辅助优化工具
  • 邯郸网站制作个人东莞seo网站管理
  • 网站建设策划书5000字游戏推广怎么快速拉人
  • 做网站需要域名还需要什么服装网络营销策划书
  • wordpress livechat做百度seo
  • 建阳建设局网站今日发生的重大新闻
  • 二级域名网站权重优化网络的软件
  • 电影网站怎么做推广中国培训网官网
  • 企业网站优化湖南网站建设推荐
  • 杭州网站建设推广百度小说排行榜风云榜
  • 株洲人才网官网陕西整站关键词自然排名优化
  • 黄江镇做网站淘宝怎么优化关键词步骤
  • 英文网站收录提交深圳关键词自动排名
  • 威海网站设计公司网络营销的流程和方法
  • 做网站爬闪个人网站制作
  • 群晖系统可以做网站吗百度旅游官网
  • 绵阳做网站公司网络营销推广是做什么的
  • 做网站定金交多少合适福州seo技术培训
  • 网站的在线qq客服链接怎么做指数运算法则