由于android在打入jar包的时候是不予许携带res等资源文件的,所以我们采用如下方式去使用资源文件。
1把图片或者资源放入assert文件夹中,打包成jar包的时候勾选assert文件
如 我在assert文件中放入了一个web_delete.png的图片
给按钮设置背景图片
imageButton.setImageBitmap(stringBitmap(context,"web_delete.png"));
设置图片的方法
public static Bitmap stringBitmap(Context context, String string) {
AssetManager assets = context.getAssets();
InputStream is = null;
try {
is = assets.open(string);
} catch (IOException e) {
e.printStackTrace();
}
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
return bitmap;
}
很多时候我们需要打包的不止是图片等多媒体文件,我们需要打包XML布局等文件或者有id的文件的时候怎么办呢?我观察了友盟等jar包发现他们都是把资源文件暴露给引用jar包的工程,放到其res文件中。
如。我们把需要用到的aaa.png放到了B工程的res文件中,B工程引用了 A jar包。
在A中需要给某个按钮加上背景图片代码如下:
int bg_id = context.getResources().getIdentifier("aaa",
"drawable", context.getPackageName());
if (bg_id != 0) {
imageButton.setBackgroundResource(bg_id);
}
第二个参数type:R其中的内部类名,如"drawable","string","color","dimen","layout"等,这也是我们常用的关于界面所需要获取的数据类型
顺便补充一点知识,当jar包中需要使用动态布局的时候,我们通常使用LayoutParams,而这个属性通常都是用其父类下的LayoutParams,当我们为其设置度量单位时它接受的是PX单位,而我们在XML文件中通常都是使用DP作为单位的,所以提供了以下两个方法作为单位转换。
public static int dp2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
public static int px2dp(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}