android如何在jar包中使用资源文件

由于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);
}

你可能感兴趣的:(android如何在jar包中使用资源文件)