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. AIDL介绍和实例讲解
  3. Android(安卓)NDK开发之Hello world篇
  4. Android在XML中自定义控件的使用
  5. SEAndroid简介
  6. Android之SDK、NDK、JNI和so文件
  7. Android(安卓)Duplicate files copied in APK
  8. 理解 Android(安卓)Build 系统
  9. NPM 和webpack 的基础使用

随机推荐

  1. pycharm 之导入本地包
  2. 利用Python和OpenCV库将URL转换为OpenCV
  3. python使用opencv进行人脸识别
  4. PHP变量代码演示及简单函数演示
  5. php的运行原理和变量类型
  6. 使用 electron-builder 打包 Electron 程
  7. Python中使用OpenCV库来进行简单的气象学
  8. php变量的8种类型. 遍历php多维数组(forea
  9. 板绘如何体现金属质感?板绘金属质感绘画教
  10. Debian11系统安装