【Android项目结构】
@描述:通过描述新建项目hello world熟悉Android项目结构
1. 让我们看一下我们新建的项目是怎样的
(1)【src文件夹】里是源文件
(2)【Android 2.2】是引用的类库
(3)【gen文件夹】里面的类是ADT自动生成的,一般只有R.java文件,并且这个R.java文件不能修改 .
Q : 那么R.java文件是怎么生成的呢?
A : R.java根据资源文件夹res生成,R.java中存放的是res中资源文件的索引. 用一个常量标记res的资源文件的好处是便于我们在代码中引用!
如果你创建的gen文件夹下没有R.java文件,可以参考解决.
2. 现在让我们去看一下【res资源文件夹】,这下面又有drawable_hdpi,drawable_ldpi,drawable_mdpi,drawable_xhdpi,layout,menu,values,values-large这些文件夹.
看到 drawable_??dpi,我们很容易会联想到这里可能是对应不同密度(dpi)的图片,猜测一下它的全写可能是这样的 hdpi => hign ,ldpi => low , mdpi => medium 那么这里的xhdpi是什么呢?
原来是extra hign!! 一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
3.【layout文件夹】中存放的是布局文件,Android支持通过XML生成视图,这样的好处是 视图与 逻辑的分离,便于管理更好的实现了MVC模式。
4.【value文件夹】中存放是我们常用的字符串,颜色,数组等。
5.【AndroidManifest.xml】是android的项目的配置文件,且一个项目有且只有一个配置文件. 我们可以在这里配置应用的属性,定义Activity,声明使用权限.
二. 现在我们具体来看项目Code
1. Hello world类
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
这里HelloWorld类继承了Activity类 .
Q : 那么什么是Activity ?
A : 我们可以想象成手机屏幕,那么继承Activity类的目的,是为了将Hello World输出在屏幕上.
接着onCreate()方法,这个方法的作用是初始化Activity.调用父类的构造,setContentView()方法将layout文件夹下面的main.xml布局文件作为主屏幕展示出来.
这里的R.layout.main 是main.xml在R类的索引. 通过R类的索引我们能更方便引用这个文件.
2. main.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="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
定义版本号,以及编码
LinearLayout 是【五种布局】中的【线性布局】
android:oruentation = "vertical" 设置当前为垂直布局 .
就像这样显示:
1
2
3
对应的水平布局是:android:oruentation = "horizontal"
layout_width,layout_height 是分别设置布局的长宽. 当设定为 fill_parent 即会填充满整个父类空间,即这里的整个屏幕控件.
当我们不需要填充满整个空间的时候,我们可以设置为wrap_content, 按照内容来填充 .
android:text="@string/hello" , android:text =" "是文本视图的填充文字. 就像我们熟悉的html里的text,我们可以直接在这里写上字符串,像这样
android:text =" 文字文字文字",但是不推荐这样做 . android使用 @string/hello这样的引用方式,我们可以在string.xml文件中找到hello这个声明.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloWorld!</string>
<string name="app_name">HelloWorld</string>
</resources>
这样做的好处便于我们对字符的管理和对国际化有很大的意义.
三. AndroidManifest.xml 配置文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cjq_ui"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HelloWorld"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>
我们用这样的方式展示
Line / Description
Line 1 / 这里xmlns: android 是什么?它后面的值可以任意设置吗?
xmlns: android 是XML中的命名空间,为了防止冲突类似于Java中的Package ,xmlns: android不允许被任意设置,
它的值必须是http://schemas.android.com/apk/res/.. 后面的部分表示R.java所在的包名,所以当我们使用系统属性,需要指定R.java的位置
Line 2 / package = "com.cjq_ui" 定义了该应用的包
Line 3.4/ 定义了应用的版本号 和版本名字
Line5 /应用的图标 以及 应用的名称
Line 6 / 定义了Activity,每个Activity都必须在这里定义 ,否则无法使用 .
Line 7 / Android:name 定义了 Activity 的类名 , 这里的 .HelloWorld 是以上面的 Package 定义为基础的,也就是 Package(com.flysnow) 加上这个 android:name(.HelloWorld) 要能定位到这个 Activity(com.flysnow.HelloWorld) ,否则就是找不到 .
Line 8 / 定义了Avtivity的标题
最后的 <uses-sdk android:minSdkVersion="8" /> 就是定义应用的最低 SDK 的级别
同为初学者, 欢迎大家留下批评与建议..