Android工程各文件夹结构的含义及全代码使用与全解
对Android这些东西一开始听迷惑的,不知道什么东西该放在上面地方,把网上的资源整合一下,放在这里。
1.总述
我们建立一个android工程,其结构如下:
1.1、src文件夹
顾名思义(src, source code)该文件夹是放项目的源代码的。
A. android.app.Activity类:
Activity类关注创建窗口与交互,它使用方法setContentView(View)将自己的UI放到里面。
重要的方法:onCreate(Bundle):初始化活动(Activity)。
(1)通过调用setContentView(int)方法加载布局资源(layout resource)从而实现对UI的定义;
(2)另一方面,可以用findViewById(int)在UI中检索到需要编程交互的小部件(widgets)。
主要的思想:setContentView指定由哪个文件指定布局(l),可以将这个界面显示出来,然后我们进行相关操作,我们的操作会被包装成为一个意图(Intent),然后这个
意图对应有相关的activity进行处理。
B. android.os.Bundle类:
从字符串值映射各种可打包的(Parcelable)类型(Bundle单词就是捆绑的意思,所有这个类很好理解和记忆)。如该类提供了公有方法——public boolean containKey(String key),如果给定的key包含在Bundle的映射中返回true,否则返回false。该类实现了Parceable和Cloneable接口,所以它具有这两者的特性。
1.2、gen文件夹
该文件夹下面有个R.java文件,R.java是在建立项目时自动生成的,这个文件是只读模式的,不能更改。R.java文件中定义了一个类——R,R类中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R类定义该项目所有资源的索引。看我们的HelloWorld项目是不是如此,如下图:
图2、R.java对应res
优点:(1)通过R.java我们可以很快地查我们需要的资源,
(2)另外编绎器也会检查R.java列表中的资源是否被使用到,没有被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用的空间。
1.3、Android 2.2文件夹
该文件夹下包含android.jar文件,这是一个Java 归档文件,其中包含构建应用程序所需的所有的Android SDK 库(如Views、Controls)和APIs。通过android.jar将自己的应用程序绑定到Android SDK和Android Emulator,这允许你使用所有Android的库和包,且使你的应用程序在适当的环境中调试。例如,源文件中的:
import android.app.Activity;
import android.os.Bundle;
import android.os.Bundle;
这里两行代码就是从android.jar导入包。
1.4 assets文件夹与res文件夹
(1)assets文件夹资源的访问
assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
1. 先在Activity里面调用getAssets()来获取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close()。
4.调用AssetManager.close()关闭AssetManager。
需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的操作
以下为从Raw文件中读取:
代码
安卓intent用法以下为从Raw文件中读取:
代码
public String getFromRaw(){
try {
InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(st1));
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = adLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
以下为直接从assets读取
try {
InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(st1));
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = adLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
以下为直接从assets读取
代码
public String getFromAssets(String fileName){
try {
InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = adLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
当然如果你要得到内存流的话也可以直接返回内存流!
public String getFromAssets(String fileName){
try {
InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = adLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
当然如果你要得到内存流的话也可以直接返回内存流!
(2)res文件夹里面主要是放资源文件。
下面是res文件夹里面的多个文件夹的各自介绍:
目录Directory | 资源类型Resource Types |
res/anim/ | XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 |
res/drawable/ | .png、.9.png、.jpg文件,它们被编译进以下的Drawable资源子类型中: 要获得这种类型的一个资源,可以使用Drawable(id) 位图文件 9-patches(可变尺寸的位图) 为了获取资源类型,使用Resources().getDrawable(R.drawable.imageId) 注意:放在这里的图像资源可能会被aapt工具自动地进行无损压缩优化。比如,一个真彩但并不需要256的PNG可能会被转换为一个带调板的8位PNG。这使得同等质量的图片占用更少的资源。所以我们得意识到这些放在该目录下的二进制图像在生成时可能会发生变化。如果你想读取一个图像位流并转换成一个位图(bitmap),请把图像文件放在 res/raw/目录下,这样可以避免被自动优化。 |
res/layout/ | 被编译为屏幕布局(或屏幕的一部分)的XML文件。参见布局声明(Declaring Layout) |
res/values/ | 可以被编译成很多种类型的资源的XML文件。 注意: 不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。 尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中): l 定义数组 l 定义color drawable和颜的字符串值(color string values)。使用Drawable()和Color()分别获得这些资源。 l定义尺寸值(dimension value)。使用Dimension()获得这些资源。 l定义字符串(string)值。使用String()或者Text()获取这些资源。getText()会保留在UI字符串上应用的丰富的文本样式。 l 定义样式(style)对象。 |
res/xml/ | 任意的XML文件,在运行时可以通过调用读取。 |
res/raw/ | 直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename。 |
2.R文件补充
R.java是自动生成的,我们平常引用的资源主要引用这个类的变量。
注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。
3. 在代码中使用资源
下面是一个引用资源的语法:
R.source_name 或者 source_name
其中resource_type是R的子类,保存资源的一个特定类型。resource_name是在XML文件定义的资源的name属性,或者有其他文件类型为资源定义的文件名(不包含扩展名,这指的是drawable文件夹里面的icon.png类似的文件,name=icon)。 Android包含了很多标准资源,如屏幕样式和按钮背景。要在代码中引用这些资源,你必须使用android进行限定,如android.R.drawable.button_background。
下面是官方给出的一些在代码中使用已编译资源的正确和错误用法的例子:
1. // Load a background for the current screen from a drawable resource.
2. Window().setBackgroundDrawableResource(_background_image);
3.
4. // WRONG Sending a string resource reference into a
5. // method that expects a string.
6. Window().setTitle(R.string.main_title);
7.
8. // RIGHT Need to get the title from the Resources wrapper.
9. Window().Text(R.string.main_title));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论