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

个人网站备案能做什么内容wordpress 首页添加链接地址

个人网站备案能做什么内容,wordpress 首页添加链接地址,iis 网站文件被占用,品牌网站建设服务商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://www.yayakq.cn/news/557600/

相关文章:

  • 太原市做网站公司郑州天梯网站制作
  • 如何保护网站模板cms网站开发教程
  • 一个新网站关键词怎么做SEO优化商业推广
  • 网站建设广告图网站建设怎么选择
  • 何如做外贸网站推网网站建设方案保障措施
  • 网站流量怎么挣钱保山市住房和城乡建设厅网站
  • 网站seo三要素如何做网站的
  • 整站建设 想做一个外卖网站网站数据库维护都是做什么
  • 网站 猜你喜欢 怎么做搜索引擎竞价广告
  • 做网站找那些公司鄢陵县北京网站建设
  • 万网买的网站备案吗django 做网站
  • 商城网站 个人备案网络营销外包要多少钱
  • 门户网站建设的作用及意义东莞关键词排名快速优化
  • 网站建设总结报告书网站功能需求文档
  • 底湘西网站建设小红书推广平台
  • 电子商务网站建设视频教程微信里的小程序怎么删除掉
  • 学校网站定位东莞附近公司做网站建设多少钱
  • 卧龙区网站制作做网站seo怎么赚钱
  • 哈尔滨专业制作网站制作深圳社保
  • 天津制作公司网站成都娱乐场所关闭最新消息
  • 网站的逻辑结构免费咨询心理医生qq号
  • 做网站时给图片添加链接农村自建房设计图效果图
  • 网站开发公司怎么选择wordpress插件字库
  • 如何查看网站语言高端网站建设 选择磐石网络
  • 娱乐网站建设怎么样html怎么用
  • sql做网站网站的建立步骤
  • 网站设计怎么弄郴州网站优化公司
  • 淮南市潘集区信息建设网站北京推广优化
  • 网站优化排名易下拉系统wordpress 创建配置文件
  • 企业网站建设时优化关键词的问题wordpress 网页存在