Android中通过@[package:]type/name的形式来引用资源
[package:]可以省略,省略后引用本地资源
type代表一种资源类型命名空间,例如:
-R.id
-R.drawable
-R.layout
-R.string
-R.attr
-R.raw
-R.arry
-R.plural等等
name代表资源的唯一标识,例如:
-text1
完整的资源引用:R.id.text1,在java中为解释为唯一的int


Android中的资源又分为编译的和不编译的,其中raw下的资源不会编译,用于存放一些音频、视频等资源。

资源的存放位置
颜色-------------/res/values/*----------------------------------节点为/resources/color,通过R.color.*引用
字符串----------/res/values/*-----------------------------------节点为/resources/string,通过R.string.*引用
字符串数组----/res/values/*------------------------------------节点为/resources/string-array,通过R.array.*引用
复数------------/res/values/*------------------------------------节点为/resources/plurals,通过R.plurals.*引用
尺寸------------/res/values/*-------------------------------------节点为/resources/dimen,通过R.dimen.*引用
图像------------/res/drawable/*----------------------------------直接存放资源文件,文件名必须是合法的java变量名,通过R.drawable.*引用
图形-----------/res/values/*或/res/drawable/*----------------节点为/resources/drawable或在/res/drawable新建xml文件使用shap节点,均通过R.drawable.*引用
任意xml文件-/res/xml/*-----------------------------------------直接存放xml文件,这些文件使用AAPT编译器编译,通过R.xml.*引用
任意资源文件-/res/raw/*----------------------------------------直接存放资源文件(一般是音频和视频文件),通过R.raw.*引用
任意资源文件(不产生资源id)-/assets/*-----------------------直接存放资源文件,不会进行编译,不会产生资源id,须通过路径访问
注:除了/res/values/下的文件是使用文件内容生成资源id,其他目录(除assets目录)都是使用文件名作为资源id(故须符合java命名规则)



下面是一些例子:
普通字符串
<resources>    <string name="hello">Hello World, AndroidLabActivity!</string>    <string name="app_name">AndroidLab</string></resources>

/*获取字符串资源*/String str = getString(R.string.hello);


字符串数组
<resources>    <string-array name="stringarray">        <item>字符串数组子项目1</item>        <item>字符串数组子项目2</item>        <item>字符串数组子项目3</item>    </string-array></resources>

/*获取字符串数组*/Resources res = getResources();String[] strArray = res.getStringArray(R.array.stringarray);


复数字符串
<resources>    <plurals name="pluralstest">        <item quantity="one">there is 1 egg</item>        <item quantity="other">there are %d egg</item>    </plurals></resources>

/*获取附属字符串资源*/Resources res = getResources();String str = res.getQuantityString(R.plurals.pluralstest, 3,3);//第一个参数3表示quantity,第二个参数3用于显示%d


颜色
<resources>    <color name="color1">#00ff00</color>    <color name="color2">#ffff00</color>    <color name="color3">#00ffff</color></resources>

/*获取颜色资源*/int color1 = res.getColor(R.color.color1);//返回的是代表某一颜色的int值


尺寸
<resources>    <dimen name="mypix">5px</dimen>    <dimen name="mydip">5dip</dimen>    <dimen name="mysp">5sp</dimen></resources>

/*获取尺寸资源*/float dimen = res.getDimension(R.dimen.mydip);int dimenByPixOffset = res.getDimensionPixelOffset(R.dimen.mysp);//转为px,并去掉小数部分int dimenByPixRound = res.getDimensionPixelSize(R.dimen.mydip);//转为px,并四舍五入小数部分


图像
把用到的图像资源,例如把testimg.png放到/res/drawable目录下后即可通过文件名引用资源/*获取图像资源并应用到按钮上*/BitmapDrawable bd = res.getDrawable(R.drawable.testimg);button.setBackgroundDrawable(bd);或button.setBackgroundResource(R.drawable.testimg);


图形
<resources>    <drawable name="red_rec">#ff0000</drawable>    <drawable name="blue_rec">#0000ff</drawable>    <drawable name="green_rec">#00ff00</drawable></resources>

/*获取图形资源*/ColorDrawable cd =  (ColorDrawable) res.getDrawable(R.drawable.red_rec);button.setBackgroundDrawable(cd);或button.setBackgroundResource(R.drawable.red_rec);


另外还可以通过<shap>来实现更加丰富的图形
在/res/drawable目录下新建一xml文件,以<shap>为根节点,一个xml文件代表一种图形。
新建一个渐变颜色的矩形图形drawlable_gradient.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <gradient        android:startColor="#FFF9F9"        android:endColor="#FFD5D5D5"        android:angle="270.0"/></shape>

在main.xml文件中设置画面背景
android:background="@drawable/drawlable_gradient"
新建一个圆角矩形图形rounded_rec.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <solid android:color="#f0600000"/>    <stroke android:width="3dp" color="#ffff8080"/>    <corners android:radius="13dp"/></shape>

/*使用圆角矩形*/GradientDrawable gd =  (GradientDrawable ) res.getDrawable(R.drawable.rounded_rec);button.setBackgroundDrawable(gd);或button.setBackgroundResource(R.drawable.rounded_rec);

注意:图像目录下的资源会被解释为BitmapDrawable对象,简单的drawable图形(如上述的ColorDrawable,定义在resources下的drawable节点)会被解释为ColorDrawable对象,而复杂的drawable图形(如上述的GradientDrawable,定义为单独xml文件)会被解释为GradientDrawable对象.

xml
首先新建一个xml文件(/res/xml/test.xml)内容如下
<person>    <name>Jack</name>    <age>20</age>    <weight>68kg</weight></person>

/*获取xml资源,并解释*/XmlResourceParser xrp =  res.getXml(R.xml.test);StringBuilder sb = new StringBuilder();try {    int eventType = xrp.next();    while(XmlResourceParser.END_DOCUMENT != eventType){        if(eventType == XmlResourceParser.START_DOCUMENT){            sb.append("=============start doc\n");        else if(eventType == XmlResourceParser.START_TAG){            sb.append("========start tag:"+xrp.getName()+"\n");        }else if(eventType == XmlResourceParser.END_TAG){            sb.append("========end tag:"+xrp.getName()+"\n");        }else if(eventType == XmlResourceParser.TEXT){            sb.append("=====text:"+xrp.getText()+"\n");        }         eventType = xrp.next();}sb.append("=============end doc\n");Log.e("xml Demo", sb.toString());} catch (XmlPullParserException e) {    e.printStackTrace();} catch (IOException e) {    e.printStackTrace();}


raw资源
raw下的资源文件不会被编译,但有资源id,在引用是直接通过R.raw.*引用即可.
下面是一个读取文本文件的例子,摘自《精通Android 3》page62
Resources res = getResources();InputStream is = res.openRawResources(R.raw.test);String myText = convertStreamToString(is);is.close();return myText;String convertStreamToString(InputStream is) throws IOExpection{    ByteArrayOutputStream baos = new ByteArrayOutputStream();    int i = is.read();    while(i != -1){        baos.write(i);        i = is.read();    }    return baos.toString();}


assets资源
assets资源不会产生资源id,只能通过路径来访问
Android提供了AssetManager类来访问这些资源,下面例子摘自《精通Android 3》page63
String getStringFromAssetFile(Activity activity){    AssetManager am = activity.getResources();    InputStream is = am.open("text.txt");    String s = convertStreamToString(is);    is.close();    return s;}




资源的总体目录结构:
/assets/*/*.*
/res/values/strings.xml
/colors.xml
/dimens.xml
/attr.xml
/styles.xml
/drawable/*.*
/anim/*.xml
/layout/*.xml
/raw/*.*
/xml/*.xml

更多相关文章

  1. [Android]attrs.xml文件中属性类型format值的格式
  2. Android cocos2d-x开发(二)之create-android-project.bat文件的修
  3. android 之使用任意XML资源文件
  4. android studio添加忽略文件
  5. android读取properties配置文件
  6. Android调用WebAPI之传参、文件

随机推荐

  1. 访问本地服务器
  2. android UDID获取:android 设备SN的获取
  3. Android(安卓)中的布局方式之线性布局
  4. Android(安卓)layout xml总结
  5. 修复 XE8 for Android(安卓)方向传感器 h
  6. 不可或缺 Windows Native (25) - C++: wi
  7. Android(安卓)内存数据库
  8. android 8.1.0 添加系统service
  9. 2011.06.21(2)——— android invalidate
  10. android framework增加新的系统服务