-
Android
工程各文件夹结构的
含义及全代码使用
与全解
对
Android
这些东西一开始听迷惑的,
不知
道什么东西该放在上面地方,
把网上的资源整合一下,
放在这里
。
1.
总述
我们建立一个
android
工程,其
结构如下:
1.1
、
src
文件夹
顾名思义(
src,
source code
)该文件夹是放项目的源代码的。
A. ty
类:
Activity
类关注
创建窗口与交互,
它使用方法
setContentView(
View)
将自
己的
UI
放到里面。
重要的方法:
onCreate(Bundle)
:初始化活动(
Activ
ity
)。
(
1
)通过调用
setContentView(int)
p>
方法加载布局资源(
layout
res
ource
)从而实现对
UI
的定义;
(
2
)另一
方面,可以用
findViewById(int)
在
UI
中检索到需要编程交互的
小部件(
widgets
)。
主要的思想:
setContentView
指定由哪个文件指
定布局(
),可
以将这个界面显示出来
,
然后我们进行相关操作,
我们的操作会被包装成为一个
意图(
Intent
),然后这个意图对应有
相关的
activity
进行处理。
B.
类:
<
/p>
从字符串值映射各种可打包的(
Parcelable
)类型(
Bundle
单词就是捆绑的意思,所有
这个
类很好理解和记忆)。如该类提供了公有方法——
publ
ic boolean containKey(String key)
,
如果给定的
key
包含在
Bundle
的映射中返回
true
,
否则返回
false
。该类实现了
Pa
rceable
和
Cloneable
接口,所以它具有这两者的特性。
1.2
、
gen
文件夹
该文件夹下面有个
文件,
是在建立项目时自动生成的,这个文件
是只读模式的,不能更改。
文件中定义了一个类——
R
,
R
类中包含很多
p>
静态类,
且静态类的名字都与
res
中的一个名字对应,
即
R
类定义该项目所有资
源的索引。看我们的
HelloWor
ld
项目是不是如此,如下图:
图
2
、
p>
对应
res
优点
:
(1)
通过
我们可以很快地查找我们需要的资源,
(2)
另外编绎器也会检查
列表中的资
源是否被使用到,没有
被使用到的资源不会编绎进软件中,这样可以减少应用在手机占用
的空间。
1.3
、
Android
2.2
文件夹
该文件夹下包含
文件,这是一个
Java
< br>归档文件,其中包含构建应
用程序所需的所有的
Andr
oid SDK
库(如
Views
、
Controls
)和
APIs
。通过
将自己的应用程序绑定到
Android
SDK
和
Android
Emulator
,这允
许你使用所有
Android
的库和包,
且使你的应用程序在适
当的环境中调试。
例如,
源文件中的:
import ty;
import
< br>这里两行代码就是从
导入包。
1.4 assets
文件夹与<
/p>
res
文件夹
(
1
)
p>
assets
文件夹资源的访问
assets
文件夹里面的文件都是保持原始的文件格式,需
要用
AssetManager
以
字节
流的形式读取文件。
1.
先在
Activity
里面调用
g
etAssets()
来获取
AssetManager
引用。
2.
再用
AssetManager
的
open(String fileName, int accessMode)
方法
则指定读取的文件以及访问模式就能得到输入流
Input
Stream
。
3.
然后就是用已经
open
file
的
inputStream
读取文件,
读取完成后记
得
inputStream.
close()
。
4.
调用
AssetManager.
close()
关闭
AssetManager
。
需要注意的是,
来自
p>
Resources
和
Assets
p>
中的文件只可以读取而不能进行写的
操作
以下为从
Raw
文件中读取:
代码
public String getFromRaw(){
try {
InputStreamReader inputReader = new
InputStreamReader(
getResources().openRawResource(1));
BufferedReader bufReader = new
BufferedReader(inputReader);
String line=
String Result=
while((line = ne()) != null)
Result += line;
return
Result;
} catch (Exception
e) {
tackTrace();
}
}
以下为直接从
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 = ne()) != null)
Result += line;
return
Result;
} catch (Exception
e) {
tackTrace();
}
}
当然如果你要得到内存流的话也可以直接返回内存流!
(
2
)
res
文件夹里面主要是放资源文件
。
下面是
res
文件夹里面的多个文件夹的各自介绍:
目录
Directory
资源类型
Resource
Types
XML
文件,它们被编译
进逐帧动画(
frame
by
frame
animation
)<
/p>
res/anim/
或补间动画
(
tweened
animation
)
对象
.png
、
.
、
.jpg
文件,它们被编译进以下的
Draw
able
资源
子类型中:
要获得这种类型的一个资源,可以使用
wable(
id
)
位图文件
9-patches
(可变尺寸的位图)
为了获取资源类型,使用
res/drawable/
ources().getDrawable(d)
注意:<
/p>
放在这里的图像资源可能会被
aapt
工
具自动地进行无损
压缩优化。
比如,
一
个真彩色但并不需要
256
色的
PNG
可能会被
转换为一个带调色板的
8
p>
位
PNG
。这使得同等质量的图片占用更<
/p>
少的资源。
所以我们得意识到这些放在该目录下的二进制图像在<
/p>
生成时可能会发生变化。
如果你想读取一个图像位流并转换成一<
/p>
个位图
(bitmap)
,请把图像文件
放在
res/raw/
目录下,这样可
以避免被自动优化。
被编译为屏幕布局
(
或屏幕的一部分
)
的
XML
文件。
参见布局声明
res/layout/
(Declaring
Layout)
可以被编译成很多种类型的资源的
XML
文件。
注意
:
不像
其他的
res/
文件夹,它可以保存任意数量的文件,
这些文件保存了要创建资源的描述,而不是资源本身。
XML
元素
类型控制这些资源应该放在
R
类的什么地方。
尽管这个文件夹里的文件可以任意命
名,
不过下面使一些比较典
型的文件(文件命名的惯例是将元素
类型包含在该名称之中):
定义数组
定义
color drawable
和
颜色的字符串值
res/values/
(color string values)
。使用
wable()
和
or()
分别获得这些资源。
定义
尺寸值
(dimension v
alue)
。使用
ension()
获
得这些资源。
定义
字符串
(string)
< br>值。使用
ing()
或者
t()
获取这些资
源。
getText()<
/p>
会保留在
UI
字符串上应用的丰富的文本
样式。
定义
样式<
/p>
(style)
对象。
任意的
XML
文件,在运行时可以通过调用
()
res/xml/
读取。
res/raw/
直接复制到设备中的任意文件。
它
们无需编译,
添加到你的应用
程序编译产生的压缩文件中。要使
用这些资源,可以调用
wResource()
,参数是资源的
ID
,即
.
s
omefilename
。
2.R
文件补充
是自动生成的,我们平常引用的资源主要引用这个类的变量。
注意:
R
类是自动生成的,并且它不能被手动修改。当资源发生变动时,
它会自动修改。
3.
在代码中使用资源
下面是一个引用资源的语法:
ce_ce_name
或
者
ce_ce_name
其中
resource_type
是
R
的子类,保存资源的一个特定类型
。
resource_name
是
在<
/p>
XML
文件定义的资源的
name
属性
,或者有其他文件类型为资源定义的文件名
(不包含扩展名,这指的是
drawable
文件夹里面的<
/p>
类似的文件,
name=icon
)。
Android
包含了很多标准资源,如屏幕样式和按钮背景。要在代
码中引用这些资源,你必须使用
android
进行限定,如
_bac
kground
。
下面是官方给出的一些在代码中使用已编译资源的正确和错误用法的例子:
1.
// Load a
background for the current screen from a drawable
resou
rce.
2.
dow().setBackgroundDrawableResource(_back<
/p>
ground_image);
3.
4.
//
WRONG
Sending
a string resource reference into a
5.
// method that
expects a string.
6.
dow().setTitle(_title);
7.
8.
//
RIGHT
Need to get the title
from the Resources wrapper.
9.
dow().setTitle(t(_title))
;
10.
11.// Load a custom
layout for the current screen.
tentView(_screen);
13.
14.// Set a slide in animation for a
ViewFlipper object.
nimation(imation(this,
16.
pace_in));
17.
18.// Set
the text on a TextView object.
ew
msgTextView = (TextView)findViewByID();
t(_message);
查了
SDK
Doc
< br>,
才明白为什么
le
要先
t
,
原来
setTi
tle
的参数是
CharSequence
< br>,
t(int)
返回的是
Cha
rSequence
;而其他
setText
< br>的参数有的是
CharSequence
,有的是
p>
int
(这
就是
R
esources
变量值)。
同时官方还给了两个使用系统资源的例子:
1.
//
在屏幕上显示标准应用程序的图标
2.
public class
MyActivity extends Activity {
3.
public
void onStart() {
4.
requestScreenFeatures(FEATURE_BADGE_IMAGE);
5.
t();
6.
setBadgeResource(_def_app_icon);
7.
}
8.
}
9.
1
0.//
应用系统定义的标准
绿色背景
视觉处理
class MyActivity extends Activity
12.
public void onStart() {
13.
t();
14. setTheme(_Black);
15. }
16.}
4. xml
文件内引用资源
1)
引用自定义的资源
android:text=
-
-
-
-
-
-
-
-
-
上一篇:MRI中T和T的含义与区分
下一篇:STM32常见知识点