Android中的资源

来源:互联网 发布:如何防止网络购物诈骗 编辑:程序博客网 时间:2024/05/29 12:59

 学习内容

 Android中的各种资源

 国际化及资源自适应

 

能力目标

 了解Android中资源的种类

 掌握Dimension资源、Assets资源的使用

 掌握样式和主题资源的使用

 熟练掌握国际化和屏幕适配

本章简介

Android中的资源是一种非常优秀的、高效的解耦设计,通过使用资源文件,Android应用可以把各种字符串、图片、颜色、界面布局等交给XML文件管理,可以避免在Java代码中以硬编码的方式直接定义这些内容。本章中我们就针对Android中的各种资源,包括字符串资源、尺寸资源、样式和主题资源、图片资源、布局资源等以及国际化和资源自适应等知识进行深入讲解。

核心技能部分

8.1 .Android资源简介

在传统的Java应用中,针对形如"com.hc.activity"123之类的常量,很多初学者会将其直接定义在Java类文件中,而且不添加任何注释。尽管这种方式当时会给程序编写带来便利,但它会大大增加后期程序的维护成本。Android应用对这种情况做了很好的改进:比如将字符串资源、颜色资源、数组资源、菜单资源等都放到res目录中定义,然后在应用程序中直接使用这些资源中定义的值。

Android应用中除了res目录用于存放资源之外,assets目录也用于存放资源。一般来说,assets目录下存放的资源代表应用无法直接访问的原生资源,应用程序需要通过AssetManager以二进制流的形式来读取这些资源;而对于res目录下的资源,Android SDK会在编译该应用时,自动在R.java文件中为res目录下的资源创建索引,程序可直接通过R资源清单类进行访问。

另外,利用资源可以大大减少程序编码的工作量。

8.2 资源的种类

从物理形式上划分,Android应用的资源可以分为以下两大类:

 无法直接访问的原生资源,比如各种音频、视频等,保存在asset目录下。

     可通过R资源清单文件访问的资源,保存在res目录下。

Android要求在res目录下用不同的子目录来保存不同的应用资源。表8-1-1列举了Android不同资源在res目录下的存储方式。

 

8-1-1 Android应用资源

目录

资源类型

描述

res/anim

XML

用来保存动画信息,可以是帧动画或补间动画

res/layout

XML

用来保存布局信息

res/values

XML

用来保存字符串、颜色、尺寸、类型、主题等资源,文件可以任意命名。颜色、尺寸、字符串采用key-value的形式表示 。为了避免因在同一份资源文件中定义各种值而带来的维护难度,Android建议使用不同的文件来保存不同类型的值。

res/menu

XML

用来保存菜单资源,一个资源文件表示一个菜单(包括子菜单)

res/xml

XML

用来保存任意的XML文件,这些XML文件在运行时可以通过调用Resources.getXML()来读取

res/raw

任意类型

在该目录中的资源虽然也会被封装在apk文件中,但不会被编译。可以用来存放文档、音频、视频等。在程序运行时,可以调用Resources对象的openRawResource(int id)来获取该资源的二进制输入流。

 assets

任意类型

常用来保存无法直接访问的原生资源。与res/raw目录一样,在该目录中的资源也会被封装在apk文件中、不会被编译,但不同的是该目录中的资源文件都不会生成资源ID

res/drawable

图像

用来保存多种格式的图像, aapt工具会自动优化这个目录中的图像。如果想按字节流读取一个图片并将其转换成一个位图(bitmap),请把图像文件放在res/raw目录下,这样可以避免被自动优化。

一旦将应用程序的各种资源分别保存在Android应用的res目录下,接下来既可以在Java文件中使用这些资源,也可以在XML资源中使用这些资源。

注意:

Ø 系统不能直接从res目录中装载资源,并进行读写操作。

Ø 除了res/rawres/assets目录中的资源外,其它资源目录中的资源在生成apk时都会被自动编译。

Ø 对于较大的资源,我们可以将其作为外部文件单独发布,应用程序可以从手机的内存卡或SD卡中读写这些资源文件,还有一些资源在程序运行后也可以将其复制到手机内存或SD卡上再读写。

Ø 每一个资源文件或者是资源文件中的key-value对都会在R类文件中找到对应的ID。其中资源文件名或key-value对中的key就是R类中的Java变量名。

Ø res目录中不能存在文件名相同扩展名不同的文件。

Ø 所有文本资源的编辑都必须为UTF-8,否则会出现乱码。

 

8.3 使用系统资源

Android系统提供了大量的系统资源,这些资源都放在sdk根目录下的/platforms/android-版本号/data/res目录中,引用这些资源的R文件可以在android.jar中找到。另外,我们还可以在Android官方文档Reference下的R类下面查找具体的定义信息。使用系统资源的一个很明显的好处是可以减少我们所编写的软件的体积。

Java代码中引用系统资源的格式为:android.R.资源的种类.资源的ID

XML布局文件中引用系统资源的格式:@android: 资源的种类/资源的ID

示例8.1

演示Android中系统资源的使用。

在程序布局文件中添加一个TextView,然后通过系统属性为这个TextView添加背景和文字。当模拟器环境是中文时,显示图8.1.1所示,当模拟环境是英文时,显示图8.1.2所示。

 

8.1.1 中文环境显示结果

 

8.1.2 英文环境显示结果

首先在布局文件中添加一个TextView,代码如下:

<TextView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:background="@android:color/darker_gray"

        android:gravity="center_horizontal"

        android:id="@+id/textView"/>

接着重写Activity类的onCreate()方法,在其中添加如下代码:

textView = (TextView) findViewById(R.id.textView);

textView.setTextSize(31);

textView.setTextColor(getResources().getColor(android.R.color.white));

String temp = null;

temp = getString(android.R.string.selectAll) + "   "+getString(android.R.string.copy);

System.out.println(temp);

textView.setText(temp);

运行程序会发现,程序显示结果会随着当前语言环境的不同而发生相应的变化,这就是我们后面章节中要讲到的国际化。

8.4 字符串、颜色、尺寸资源

8.4.1 字符串资源

字符串资源文件位于/res/values目录下,字符串资源文件的根元素是<resources…>,该 元素里的每个<string…>子元素代表一个字符串常量,其中name属性指定常量的名称,标签之间的内容代表字符串的值。

XML文件中可以通过如下语法格式来访问字符串资源中的值,XXXname指定的名称:

@string/xxx

Java文件中也可以通过如下语法格式来访问字符串资源中的值,其中Id是格式为R.string.xxx的形式:

getResources().getString(Id)     

getResources().getText(Id)

如果想在字符串资源中使用引号(单引号或双引号),必须得使用另一种引号将其括起来,或使用转义符\”,否则引号将被忽略。例如

    <string name="name1">"quote'string"</string>    结果:quote'string

    <string name="name2">\"double quotes\"</string>  结果:"double quotes"

如果在字符串资源中使用了一些特殊信息,比如网址、Email、电话、邮编等,我们就可以用TextViewautoLink属性来自动识别这些特殊信息。此时在TextView中会自动识别这些信息,并调用相应的处理程序做出处理。有关详细信息请参看TextView组件一节的内容。

还可以使用占位符获得动态的字符串资源,示例代码如下:

<string name="name3">大家好,今天是:%1$s,今天的温度是:%2$d</string>

上面格式化字符串有两个占位符:%1$s和%2$d,其中%1%2表示参数的位置索引(这个索引必须得从1开始),$s表示该参数的值是字符串,$d表示该参数的值是十进制整数。

Java代码中可以用如下形式获得上述字符串资源并指定这两个参数的值:

textView.setText(getString(R.string.name3,”个好天气”,44));

getSring()方法的第二个参数是个Object类型的可变参数,也即意味着我们可以向这个参数传递任意多个参数值。

8.4.2 颜色资源

Android允许将颜色值作为资源保存在资源文件中,保存在资源文件中的颜色值以#开始。Android系统支持#RGB#ARGB#RRGGBB#AARRGGBB4种形式的表示方法。其中A表示透明度,RGB分别表示红绿蓝三原色。其中A值可以省略,如果省略了A值,那么该颜色默认是完全不透明的。如果采用前两种表示法,ARGB的取值范围都是0~15,如果采用后两种表示方法分量ARGB的取值范围都是0~255A0时表示完全透明,取255时表示不透明;RGB的取值越大,颜色越深。

颜色值也必须定义在res/values目录下的资源文件中。

XML文件中可以通过如下语法格式来访问颜色资源中的值:

@color/XXX

Java文件中可以通过如下语法格式来访问颜色资源中的值:

getResources().getColor(R.color.XXX) getResources().getColor(Id)

8.4.3 尺寸资源

尺寸资源是用来定义大小的,它是一系列的浮点数组成的资源,尺寸资源要在res/values/目录下的资源文件中借助<dimen>标签定义。

XML文件中可以通过如下语法格式来访问尺寸资源中的值:

@dimen/XXX

Java文件中可以通过如下语法格式来访问尺寸资源中的值:

getResources().getDimension(resourceId)

示例8.2

演示Android系统中颜色资源、尺寸资源的使用。

res/strings/目录下创建一个名为color.xml的文件,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<color name="color1">#ff0000</color>

<color name="color2">#00ff00</color>

</resources>

res/dimen目录下创建一个名为dimen.xml的文件,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<dimen name="dimen1">32dp</dimen>

<dimen name="dimen2">18px</dimen>

</resources>

Activity类的代码如下:

public class ColorsDimenActivity extends Activity {

 

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

 

LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.colorsdimen,null);

setContentView(layout);

TextView tv2 = new TextView(this);

tv2.setText("时间是2009, 地点是北京天安门广场");

tv2.setTextColor(getResources().getColor(R.color.color2));

tv2.setTextSize(getResources().getDimension(R.dimen.dimen2));

layout.addView(tv2);

 

}

 

}

其中布局文件colorsdimen.xml的代码如下:

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#000000">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="国庆60周年大阅兵"

android:textColor="@color/color1"

android:textSize="@dimen/dimen1"/>

</LinearLayout>

程序运行效果如下图8.1.3所示:

 

8.1.3 颜色资源演示效果图

8.5 样式和主题资源

8.5.1 样式资源

样式资源可以将需要设置相同属性值的属性提出来放在单独的地方,然后在每一个需要设置这些属性的组件中引用这些样式。因为把相同的属性写到了一块,必然会给样式的修改带来极大的便利,这一点和CSS有点相似。

样式资源也需要在res/values目录的资源文件中定义。每一个<style>标签表示一个样式,该标签有一个name属性,表示样式名,在样式中每一个属性使用<item>表示。样式之间也可以继承,通过<style>标签的parent属性指定父样式的资源ID。引用样式的语法是:

@style/XX

示例8.3

利用资源文件中的样式为文本设置不同的显示效果。

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="style1">

<item name="android:textSize">18px</item>

<item name="android:textColor">#ff0000</item>

</style>

<style name="style2" parent="@style/style1">

<item name="android:textSize"> 32dp </item>

<item name="android:gravity">left</item>

</style>

</resources>

在上述样式定义中,style2的样式的样式定义使用了parent属性,它的作用相当于继承。

布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="国庆60周看大阅兵"

style="@style/style2" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="时间是2009年,地点是北京天安门广场"

style="@style/style1" />

</LinearLayout>

程序运行效果如下图8.1.4所示

 

8.1.4 样式资源运行效果图

8.5.2 主题Theme资源

与样式资源类似,主题资源的XML文件也放在res/values/目录下,同样使用<resource>作为根元素,使用<style>来定义主题。与样式资源的区别是,主题不能作用于单个的View组件,它作用于整个窗口。主题应该对整个应用中的所有Activity起作用,或对指定的Activity起作用。也即只能在功能列表文件中的<application>标签、<activity>标签利用属性android:theme来设置主题资源。

示例8.4

为示例8.3添加一个自定义的主题,其中自定义主题代码如下:

<resources>

<style name="style11">

<item name="android:background">@color/color3</item>

</style>

<style name="theme11">

<item name="android:windowBackground">@drawable/wallpaper</item>

<item name="android:windowTitleSize">33px</item>

<item name="android:windowTitleBackgroundStyle">@style/style11</item>

<item name="android:textColor">#3939ED</item>

<item name="android:textSize">17dp</item>

</style>

</resources>

当把主题theme1应用到Activity上以后,程序运行效果如下图8.1.5所示,大家是否发现程序的运行效果变得舒服多了。

 

8.1.5 主题演示效果图

8.6 raw资源与assets资源

通过前面章节的学习,我们知道res/raw/ 该目录用于存放应用程序使用到的各种通用的文件,如音频文件等。编译软件时,这些数据不会被编译成二进制文件,它们被按原样直接复制到程序安装包里,安装到设备上。需要注意的是这些资源会在R文件中生成对应的ID,在程序中使用这些资源时要通过这个生成的ID,语法格式是:

getResources().openRawResource(ID)

有关raw资源的具体使用,请参看本书多媒体开发章节中的音乐播放示例的代码。

 

你可能已经发现,在我们新建立的Android工程下面有一个与res平级的名称为assets的文件夹。通过第一章的学习我们知道,assets文件夹主要用来存放需要打包到安装程序中的较大的资源(比如mp3、图片),这些资源不会在R文件中生成对应的ID,但该目录下的所有文件都会被打包到发布包中。另外需要注意的是来自res和assets 中的文件只可以读取而不能进行写的操作。

assets用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,assets支持任意深度的子目录,而res不支持深度子目录并且assets下的这些文件不会生成任何资源ID,需要通过AssetManager 以文件的名称为参数(必须使用/assets开始,但不包含它的相对路径名)来访问,使用AssetManager访问时采用的文件结构应与/assets的目录结构相同。

assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。步骤如下:

1先在Activity里面调用getAssets()来获取AssetManager引用。

2再用AssetManageropen(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream

3)使用inputStream读取文件,读取完成后使用inputStream.close()关闭输入流

4调用AssetManager.close()关闭AssetManager

示例8.5

演示assets下资源的使用。

asets目录下放置一个文本文件,一张图片,然后将它们在Activity中显示出来。

Activity类代码如下:

public class AssetsActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

 

ImageView imageView = new ImageView(this);

imageView.setImageBitmap(getImageFromAssetFile("filestruct.jpg"));

 

TextView textView = new TextView(this);

textView.setBackgroundColor(Color.GRAY);

textView.setText(getTextFromAssetFile("sth.txt"));

 

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

layout.addView(textView);

layout.addView(imageView);

setContentView(layout);

}

 

private Bitmap getImageFromAssetFile(String fileName) {

Bitmap image = null;

try {

AssetManager manager = getAssets();

InputStream is = manager.open(fileName);

image = BitmapFactory.decodeStream(is);

is.close();

              Manager.close();

} catch (Exception e) {

}

return image;

}

}

private String getTextFromAssetFile(String fileName) {String Result = "";try {AssetManager manager = getAssets(); InputStreamReader inputReader =

new InputStreamReader(manager.open(fileName));BufferedReader bufReader = new BufferedReader(inputReader);String line = "";while ((line = bufReader.readLine()) != null)Result += line;} catch (Exception e) {e.printStackTrace();}return Result;}

其中sth.txt是一个编码格式为UTF-8的简单记事本文件,而方法getImageFromAssetFile()实现的功能是以流的形式把assest目录下的图片文件读取出来。程序运行效果如下图8.1.6所示: 

8.1.6 程序运行效果图 

8.7 国际化和资源自适应

由于分布在不同国家的用户的语言和习惯不同,在向全球发布软件时必须要考虑满足不同国家和地区用户的需求。这种应用程序的界面语言和风格随着Android系统当前的语言环境变化而变化的技术称为国际化。另外,由于设置分辨率、屏幕方向等因素可能会造成在一个环境中可以正常运行的资源到另一个环境中可能就无法正常工作,或出现界面混乱的情况,虽然采用相对布局技术可以解决这种问题,但非常复杂,Android建议我们单独为每一种环境写一种资源,在使用时系统会根据当前运行环境自动选择相应的资源,这就是所谓的资源自适应。

通过国际化和资源自适应技术,应用程序可以根据不同的语言环境显示不同的界面、风格,也可以根据手机的特性做出相应的调整。

8.7.1 资源国际化

说起国际化,很多人首先会想到界面上的文字。要实现界面文字国际化,只需要为应用程序提供不同语言的字符串。当程序在运行时会检测当前的语言环境,再根据语言环境决定读取哪种语言的字符串资源。检查语言环境的任务是由Android系统负责完成的,我们所要做的就是为保存各种语言的字符串资源建立国际化目录,然后将相应的资源文件放到这些目录中。国际化目录的命名规则是:

资源目录-语言代码-r国家代码

其中资源目录是指res目录中的子目录,比如valueslayout等。语言代码-r国家代码统称为国际化配置选项,例如中国为zh-rCN,美国为en-rUS,具体规定可参看SDKlocale的定义。

示例8.6

演示资源的国际化,当环境不同时界面中显示文字和图片会发生相应的变化。

res目录中建立名称为values-zh-rCNvalues-en-rUS两个文件夹,这两个文件夹是分别用来放置中文和英文环境下的字符串资源,然后分别在这两个目录中创建一个strings.xml的文件:

values-en-rUSstrings.xml文件的代码:

<resources>

<string name="name">Name</string>

<string name="age">Age</string>

</resources>

values-zh-rCNstrings.xml文件的代码:

<resources>

<string name="name">姓名</string>

<string name="age">年龄</string>

</resources>

res目录中建立名称为drawable-zh-rCNdrawable-en-rUS两个文件夹,然后分别在这两个目录中放置一个名为flag.jpg的国旗图片,图片分别是中国和美国的国旗。

为整个项目提供一个布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/name" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/age" />

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/flag"/>

</LinearLayout>

在中文环境下运行效果如下图8.1.7所示:

 

8.1.7 中文环境显示效果

在英文环境下运行结果如下图8.1.8所示:

 

8.1.8 英文环境显示效果

8.7.2 屏幕适配

我们先来看一下模拟器默认提供的屏幕的分辨率。8-1-2 屏幕分辨率

屏幕

分辨率

屏幕

分辨率

HVGA

320*480

QVGA

240*320

WQVGA

240*400

WQVGA432

240*432

WVGA800

480*800

WVGA854

480*854

所谓的屏幕适配指的是在项目中针对不同分辨率的屏幕提供不同的布局文件,在程序运行时Android系统会根据设备屏幕的大小自动选择相应的布局文件进行显示。屏幕适配是非常有用的一种技术,它能从很大程序上提高我们软件的应用范围。

示例8.7

演示屏幕自适应。

res目录中建立两个文件夹:layout-320×240layout-480×240,并分别在这两个目录及layout目录中创建一个layoutadapter.xml的文件。注意这里面的文件夹命名必须得用’ ×’而不能用’*’320*240480*240指的是屏幕的分辨率,此时要求分辨率中代表长和宽的两个数字中较大的那个放在前面,较小的那个放在后面。当手机屏幕和提供的布局都不匹配时,默认显示layout下的界面。其中layout-320×240layoutadapter.xml文件的代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="320*240" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="320*240" />

</LinearLayout>

layout-480×240layoutadapter.xml文件的代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="480*240" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="480*240" />

</LinearLayout>

layoutlayoutadapter.xml文件的代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="default" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="default" />

</LinearLayout>

创建一个Activity类,代码如下

public class LayoutAdapterActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.layoutadapter);

}

}

任务实训部分

1: 具有国际化及屏幕适配功能的用户登录程序

训练技能点

Ø Android中的国际化

Ø Android中屏幕适配

需求说明

国际化及屏幕适配是软件开发过程中需要面对的一个很重要的问题,因为它们针对不同语种及不同分辨率提供了支持。另外软件的登录界面针对一个软件来说也是很重要的,如果这个界面用户就看不懂或布局很乱,那很有可能会把用户阻止在门外。本实训就要求针对简体中文和英语语种、320×240480×320两种分辨率实现一个用户登录界面。

实现步骤

(1) res/values-en-rUSres/values-zh-rCN目录下的strings.xml文件中分别提供程序中要用到的字符,比如用户名、密码的中英文表示形式。

(2) layout-320×480layout-480×320目录下提供两种分辨率下的布局文件,注意此处布局文件的名字和一样,布局文件内容最好采用相对布局来放置各组件。

(3) 利用颜色资源、尺寸资源美化程序界面。

(4) 编写Activity类,在Activity类中使用第二步中提供的布局文件。

(5) 运行程序查看结果。

 

 

2:为用户登录程序添加样式和主题选择功能

训练技能点

样式和主题资源

需求说明

Windows中,我们可以通过设置不同的主题来改变系统的显示样式,从而避免审美疲劳,提高了使用体验。本实训要求参考8.5节的内容,为实训1的用户登录程序添加不同的主题和样式,对于样式的设置只要求在代码中实现即可。


巩固练习

一、选择题

1. 下列说法正确的是()。

A. Android中采用资源文件的形式来管理资源提高了程序的执行效率

B. Android中采用资源文件的形式来管理资源降低了软件的维护成本

C. assets目录下存放的资源代表应用无法直接访问的原生资源

D. 利用资源会增加程序编码的工作量

 

2. 下列有关rawassets的语法正确的是()

A. 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制     

B. res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

C. res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源IDR.raw.filenameassets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager                      

D. 读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

InputStream is = getResources().openRawResource(R.raw.filename); 

E. 读取assets下的文件资源,通过以下方式获取输入流来进行写操作

AssetManager am = null; 

am = getAssets(); 

InputStream is = am.open("filename");  

二、上机练习

编写一个浏览rawassets目录下图片的图片浏览器。

0 0
原创粉丝点击