Android获取res目录下的资源

在项目中,我们经常需要获取res目录下的各种资源,如图片,文字,声音,颜色,布局。我将网络上一些资料和项目结合做一个简单的说明。

一、获取图片

//得到application对象ApplicationInfo appInfo = getApplicationInfo();//得到该图片的id(name 是该图片的名字,"drawable" 是该图片存放的目录,appInfo.packageName是应用程序的包)int resID = getResources().getIdentifier(name, "drawable", appInfo.packageName);//代码如下public Bitmap getRes(String name) {ApplicationInfo appInfo = getApplicationInfo();int resID = getResources().getIdentifier(name, "drawable", appInfo.packageName);return BitmapFactory.decodeResource(getResources(), resID);}

二、获取文字

在activity中,或者在service中,直接调用getString(resId)进行获取就可以了

    /** * 不在activity中,或者不在service中,使用此方法,获取res目录下的音频文件 * */ public String getResStr(Context context, int resId){ return context.getString(resId); }

三、获取颜色

/**     * 不在activity中,或者不在service中,使用此方法,获取res目录下的颜色     * 返回参数为整形,颜色本身就是一串数字     * */    public int getResColor(Context context, int resId){        return context.getResources().getColor(resId);    }


四、获取布局

        /** * 我的理解Android framework至少应该提供一些获取Resource的api才对,详细看了sdk docs始终没找到相应的方法. * 也许有,在其父类中,定义也说不准,我是没找到.   那么这里就不得不需要借助一个抽象类 LayoutInflater * inflate获取出来的对象是View,所有layout布局,均是继承View,做向上转型完全没有问题. * 但是它其实真是身份还是Layout,具体是那一种layout就通过强制类型转换,转换成某种类型. */public View getResLay() {LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);View layout = inflater.inflate(R.layout.devicelistactivity, null);RelativeLayout rlayout = (RelativeLayout) layout;rlayout.addView(layout);return rlayout;}


五、文件的获取(包括了图片,音频等,通用方法)

下面以文本文件做说明,例如资源文件 sample.txt 位于 $PROJECT_HOME/res/ raw目录下,可以在 Activity 中通过

Context.getResources().openRawResource(R.raw.sample); 
方法获取输入流。

注意:如果资源文件是文本文件则需要考虑文件的编码和换行符。建议使用UTF-8和Unix换行符。

例子:

/** * 从resources中的raw 文件夹中获取文本文件并读取数据 * @param encoding 编码格式,如utf-8 * @param resid 资源目录id * */ public String getFromRaw(String encoding,int resid){  String result = "";  try {  InputStream in = getResources().openRawResource(resid);  //获取文件的字节数  int lenght = in.available();  //创建byte数组  byte[] buffer = new byte[lenght];  //将文件中的数据读到byte数组中  in.read(buffer);  result = EncodingUtils.getString(buffer, encoding);  } catch (Exception e) {  e.printStackTrace();  }  return result; }

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  4. 读取android手机流量信息
  5. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  6. android 使用html5作布局文件: webview跟javascript交互
  7. Android(安卓)matrix 控制图片的旋转、缩放、移动
  8. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  9. android“设置”里的版本号

随机推荐

  1. Android(安卓)语音通话模块介绍(一) 开源的
  2. Android 动态显示和隐藏软键盘
  3. Android新浪微博时间格式化
  4. android使用StrictMode访问网络和优化UI
  5. Android listView FastScroll 快速查询数
  6. android Toast的时间长度
  7. 如何实现5个按钮成梅花状排列,并整体居中?
  8. Android版本检测/自动更新
  9. android 多媒体部分学习笔记十三----medi
  10. android判断手势滑动方向