博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android进阶:打jar包获取assets中的资源 解决selector XML文件不能解析的问题
阅读量:6246 次
发布时间:2019-06-22

本文共 2052 字,大约阅读时间需要 6 分钟。

大家都知道Android项目中的res目录中的资源eclipse插件会在gen中自动生成相应的id应用,这样就统一了资源管理

那么这种自动生成的id就是写死的东西了 这就导致了不容易做修改 

项目中需要将现有的组件打成jar包 这样打包后类文件当然是肯定没问题 但是资源文件就不行了。这个地方的id不能在新建的项目中被应用了

所以资源文件不能被打到res目录中,这种情况下就必须要打到assets目录中

这样就会出现问题了 一般情况下我们应用资源文件是通过int型的id来引用的, 这里就不能直接应用了 我们需要手动读取Assert目录下的资源

Android提供了AssetManager来管理资源

读取就很简单了只需要 在Acitivity中

Context.getAssets().open(“sample.png”)

可以直接获取相应的Inpustream 根据需要可以通过包装来获得需要的流 来解析一些XML TXT等文件

获得Bitmap :  BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomout.png"))

获得Drawable:new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomout.png")))

一般我们用到Button的时候会使用selector来得到一些点击(pressed)、焦点(focused)的一些效果,但当把selector的XML文件放到Assert文件中后 我试了N种的方法包括反射都用上了。发现都是解析不了 看源码也没找到具体什么原因 始终找不到为什么StateListDrawable 不能解析出来,

实在没办法了。。但问题还是得解决啊。 换了个思路

既然XML类型的StateListDrawable解析不了 我可以手动创建一个StateListDrawable对象啊,这个真是简单啊

白白花了那么多时间去看源码试方法钻牛角尖,换了个角度才豁然开朗,

  1. normalzoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")));  
  2. selectedzoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin1.png")));  
  3. disablezoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin2.png")));  
  4. StateListDrawable bgzoomin = new StateListDrawable();  
  5. bgzoomin.addState(View.PRESSED_ENABLED_STATE_SET, selectedzoomin);  
  6. bgzoomin.addState(View.ENABLED_FOCUSED_STATE_SET, selectedzoomin);  
  7. bgzoomin.addState(View.ENABLED_STATE_SET, normalzoomin);  
  8. bgzoomin.addState(View.FOCUSED_STATE_SET, selectedzoomin);  
  9. bgzoomin.addState(View.EMPTY_STATE_SET, disablezoomin);  
  10. btnZoomIn.setBackgroundDrawable(bgzoomin);  
  11. btnZoomIn.setMinimumWidth(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")).getWidth());  
  12. btnZoomIn.setMinimumHeight(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")).getHeight());  

 

这样就实现功能了,还有就是要注意最后要关闭流 这个最好是统一管理起来,

上面是打jar包时的文件目录 需要选择java代码 然后和assets目录 像gen和res就不要打到包里了,当然manifest这些文件也不能打包

转载于:https://www.cnblogs.com/wangtianxj/archive/2011/06/29/2093459.html

你可能感兴趣的文章
计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第七周学习总结
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>
Oracle11G 卸载步骤
查看>>
Mars说光场(3)— 光场采集
查看>>
中小企业客户营收增长将成微博2016年主推动力
查看>>
第一个掘金文章
查看>>
我的友情链接
查看>>
微信Windows版无法备份聊天记录
查看>>
Github上传代码菜鸟超详细教程
查看>>
资金项目性能优化
查看>>
Java将图片处理成背景透明的圆形图片
查看>>
知道IP地址怎么查看mac地址
查看>>
2016年度总结
查看>>
对于常见未得到支持操作的理解
查看>>
Win7 下Maple驱动问题解决方案
查看>>
hibernate 不输出sql参数的解决
查看>>
Netty的异步事件驱动(ChannelFuture)
查看>>
PostgreSQL数据类型-货币类型
查看>>
eclipse.ini、flashbuilder.ini内存设置和堆栈非堆栈问题
查看>>