欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-28 15:43:27
...

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