快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

永乐国际f6601cm:Android进阶:打jar包获取assets中的资源 解决selector XML文件不能解析的问题



大年夜家都知道Android项目中的res目录中的资本eclipse插件会在gen中自动天生响应的id利用,这样就统一了资本治理

那么这种自动天生的id便是写逝世的器械了 这就导致了不轻易永乐国际f6601cm做改动

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

以是资本文件不能被打到res目录中,这种环境下就必须要打到assets目录中

这样就会呈现问题了 一样平常环境下我们利用资本文件是经由过程int型的id来引用的, 这里就不永乐国际f6601cm能直接利用了 我们必要手动读取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工具啊,这个真是简单啊

白白花了那么多光阴去看源码试措施钻牛角尖,换了个角度才豁然豁达,

normalzoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")));

selectedzoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin1.png")));disablezoomin = new BitmapDrawable(BitmapFactory.decodeStream(mapActivity.getAssets().open("永乐国际f6601cmbtn_zoomin2.png")));

StateListDrawable bgzoomin = new StateListDrawable();bgzoomin.addState(View.PRESSED_ENABLED_STATE_SET, selectedzoomin);

bgzoomin.addState(View.ENABLED_FOCUSED_STATE_SET, s永乐国际f6601cmelectedzoomin);bgzoomin.addState(View.ENABLED_STATE_SET, normalzoomin);

bgzoomin.addState(永乐国际f6601cmView.FOCUSED_STATE_SET, selectedzoomin);bgzoomin.addState(View.EMPTY_STATE_SET, disablezoomin);

btnZoomIn.setBackgroundDrawable(bgzoomin);btnZoomIn.setMinimumWidth(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")).getWidth());

btnZoomIn.setMinimumHeight(BitmapFactory.decodeStream(mapActivity.getAssets().open("btn_zoomin.png")).getHeight());

这样就实现功能了,还有便是要留意着末要关闭流 这个最好是统一治理起来,

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

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: