jar引用的资源文件必须放在assets文件夹中,并且布局文件和Drawable必须是编译过的格式,否则布局文件无法解析,一般的Drawable尺寸不正确,Nine-Patch无法拉伸。
抽取布局文件的方法如下,其中fileName必须包含assets/路径:
public static View extractView(Context context, String fileName, ViewGroup root) throws Exception {
XmlResourceParser parser = context.getAssets().openXmlResourceParser(fileName);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return inflater.inflate(parser, root);
}
注意,如果root为null,那么该布局文件的根元素属性会被忽略,比如固定的长和宽等,解决的一个办法是在外层再嵌套一个ViewGroup。
抽取Drawable的方法是,其中fileName不必包含assets/路径:
public static Drawable extractDrawable(Context context, String fileName) throws Exception {
InputStream inputStream = context.getAssets().open(fileName);
TypedValue value = new TypedValue();
/** 传入TypeValue,指定资源的像素密度是基于320*480屏幕的 */
value.density = 160;
/** 传入Resources,以获取目标屏幕像素密度 */
Drawable drawable = Drawable.createFromResourceStream(context.getResources(), value, inputStream, fileName);
inputStream.close();
return drawable;
}
StateListDrawable添加状态时,enabled状态必须放在最后,值为false的状态只需取状态常量的相反数即可。
本帖最后由 维王 于 2012-4-6 16:08 编辑
Android中jar包封装及调用
在android开发过程中,我们经常会有这种需求,自己开发一个类库jar包,提供给别人调用。 即把项目A封装成jar包,供项目B调用,而在项目B中调用项目A的activity的时候问题就出现了:找不到资源文件(异常:ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException: Stringresource ID #0x7f060007)。问题是,只能共享src文件夹下的代码,而不能共享res资源文件,够郁闷!创建一个Androidproject, 用eclipse的export导出,去掉AndroidManifest.xml,res 什么的,这样只共享了代码,而此代码中所调用的res资源文件却不能正常使用,否则会抛出res.Resources$NotFoundException异常。那么如何解决呢?
1.如果只用共享代码,而共享的代码中不涉及到res资源文件的调用的话,直接在Eclipse中导出jar包,在所需要的项目中引用即可。
2.如果共享代码,而且共享的代码中涉及到res资源文件的调用,网上通用的方法是把res资源文件放到assets文件夹中,再在src代码中加载处理,然后再用eclipse导出jar包,引用即可(res资源虽然可以打进jar包,但当其他项目调用jar包时jar包中引用ID 指向的是当前项目的资源,关于如何让jar包中的资源引用只想jar包中的res文件暂无解决方案。我的问题已解决,解决方案:把图片资源放入assets包中一并打入jar包,布局就只能用代码了。jar包中代码可以成功引用jar包内的assets文件。
另:JNI层不可被打包入jar包,只能同jar包一同提供给第三方并放入工程目录下的libs包中)。
3.如果共享代码,而且涉及到res资源文件的调用,而且不想把res资源文件放到assets文件夹中的,直接生成jar包会出现的问题:
1).当在别的项目中引用此jar包时,在项目名上出现小红叉,并且在console控制台上直接自动提示:Errorgenerating final archive: Found duplicate file for APK:res/drawable-hdpi/icon.png,通常的解决方法时,在能编译通过的此项目中直接去掉提示的资源文件,再生成jar包。
2).把公共的icon等资源文件删除,生成jar包之后,此时在项目中引用,console控制台上无自动报错现象。如果jar包中的activity调用了res资源文件夹中的文件,在当前项目中调用jar包中的acticity时,问题就出现了,activity所引用的res资源,如果引用的是Strings.xml文件中的值,则抛出异常ERROR/AndroidRuntime(3341):Caused by: android.content.res.Resources$NotFoundException:Stringresource ID#0x7f060007。如果引用的是layout文件夹中的文件,能找到layout中的xml,例如layout中ee.xml,可以找到R.layout.ee,但是在ee.xml中定义的控件id却引用不到,抛出异常ERROR/AndroidRuntime(13703):Caused by:java.lang.NullPointerException。如果在当前项目中调用不涉及jar包中的res的调用,一切OK。
4.如果共享代码,而且共享的代码中涉及到res资源文件的调用,如果封装成jar包,这种方法是达不到要求的(调用jar中封装的activity,还得保证jar包中activity正常调用jar中所封装的res资源,上面说了,jar包中的res资源部分调用为空),那么如何能满足需求呢?把要生成jar包的项目做一下处理,在jar包项目的properties窗口中选择android的选项卡的isLibaray,点击apply按钮或者ok按钮(此时,jar包项目再点击右键选择runas → AndroidApplication就能正常运行了)。在要引用jar包的项目中,右击项目名称,打开properties框口,选择android的选项卡的isLibaray右侧的Add按钮,添加jar包项目。这样jar包项目中的activity就能正常引用到jar包项目中的res资源了。项目调用jar包项目的activity就正常了。
|
相关推荐
使用android studio生成jar包,并且使用映射来完美调用资源文件。包含两个工程,一个如何生成jar包,一个是如何使用jar包,调用资源文件。使用详情可以关注我的blog,http://blog.csdn.net/jujishou521
android相关资源jar包android相关资源jar包android相关资源jar包android相关资源jar包android相关资源jar包android相关资源jar包android相关资源jar包
Android端上传文件的jar包
作为Android程序开发,我们自己在实际项目的开发过程中,经常会遇到我们打的Jar包需要动态的读取主项目工程中的资源文件,那么有没有一种好的方式,能够让Jar包非常方便的读取与展示主工程中的资源文件呢?...
编译spatialite for android,生成的jar包和so库文件。
开发android框架的时候需要对资源文件的处理 还有框架打jar包的时候的注意事项
Android如何处理带资源文件的JAR
首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar 文件夹。 在命令行下定位到dex2jar.bat所在目录,运行 dex2...
android jar包混淆详细文档,教你如何混淆jar包代码
Spatialite_for_Android所使用的jar包、so文件、测试数据库,jar包为自己编译,so文件是从github下载的,测试可以使用。
dx(Android jar转换成dex工具) 使用的命令: dx --dex --output hack_dex.jar hack.jar 工具的使用可以参考:http://blog.csdn.net/qxs965266509/article/details/50390325
替换sdk路径下/platforms/android-29/android.jar,能够解决在android studio 看源码部分类报红及能够正常编译项目。解决替换后报错:Failed to transform file 'android.jar' to match attributes {artifactType=...
android备份文件提取工具_最新版和说明文档
android开发 jar文件 android移动开发必备的工具 各种android包 下吧
Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包;Android okHttp Jar 包
Android RSA加密jar包,提供RSA加密与解密的java类,便于开发使用。
该资源包含了一个在android工程中动态加载jar文件的小程序,注释详细,需要注意我们的jar文件时需要经过dx处理过的,喜欢的下载。
本demo是结合博客的资源,如有不懂请去看博客 http://blog.csdn.net/u013895206 ,文章是:android 使用gradle导出jar包,并包含assets资源文件夹。谢谢!
包含androidx.core.jar/androidx.appcompat.jar/androidx.drawerlayout.jar,代替android-support-v4.jar。 解决无法找到ContextCompat.checkSelfPermission问题,替换v4包中的ActionBarDrawerToggle、DrawerLayout...