首页 > 代码库 > [Android系列—] 2. Android 项目目录结构与用户界面的创建

[Android系列—] 2. Android 项目目录结构与用户界面的创建

前言

[Android系列—] 1. Android 开发环境搭建与Hello World

这一篇中介绍了如何快速搭建Android开发环境, 并成功了建立一个没有任何代码更改的 Android 应用程序。

接下来, 就得看看

1. 使用 Eclipse  创建的APP 有哪些目录和文件

2. 如何创建一个比Hello World 高级的一个用户界面



appcompat_v7


在创建 MyFirstApp 的 Android 项目时, 会发现在项目路径下多出了一个 appcompat_v7 的项目。

而且这个项目不能删除,删除之后, 新建的项目也会出错。

appcompat_v7 是Google 的一个兼容包,就是一个支持库,它可以让2.1 以上全使用上4.0 版本的界面。


如何去除?

如果在新建项目是把最小SDK 选在Andorid4.0 以上就不需要这个支持库了。


所以,暂时且不去管这个,在那就让它在那。


目录结构



1. src

存放开发的app java 源代码文件。

默认状况下, 包含一个 Activity 的类, app  运行时就会进到这个类。

2. gen

编译器自动生成的一些java 代码。

这个目录中最关键的文件就是R.java, 这个文件是只读模式,不能更改。

R类中包含很多静态类,请静态类的名字都与res中的一个名字对应,就像是个资源字典大全。其中包含了用户界面,图像,字符串等对应各个资源的标识符,R类定义了该项目所有资源的索引。例如界面中有一个文本控件,这个控件就在布局文件中有 id.id是android:id=”@+id/textview”,那么通过R.id.textivew就可以找到这个控件。

通过R.java可以很快的查找到所需要的资源,同时编译器也会检查R.java列表中的资源是否被使用,没被使用到的资源不会被编译到软件中,这样可以减少在手机占用的空间。

这个R.java默认有attr,drawable,layout,string 4个静态内部类(Android 4.2有8个静态类,多了个id,menu,style,dimen),每个类对应一种资源。例如我们在工程中添加一副图片,那么工程就会在此类的drawable内部类中添加一条数据,如果删除了此图片,工程则会自动删除此条数据。由此可见,R.java类似于电脑的注册表。


3. Android 4.4.2,

    Android Private Libraries

    Android Dependencies

这三个是库。

需要特别说明的是Android Dependencies

该目录出现在ADT16以后的版本中,是ADT第三方库新的引用方式,当我们需要引用第三方库的时候,只需要将   该库拷贝到libs文件夹中,ADT就会自动完成对该库的引用(如本例中android-support-v4.jar)


4. assests
除了提供res目录存放资源文件外,android在assets目录也可也存放资源文件。Assets目录下的资源文件不会再R.java自动生成id,所以读取asset目录下的文件必须指定文件的路径,可以通过AssetManager类来访问这些文件


5. bin

该目录是编译之后的文件以及一些中间文件的存放目录,ADT先将工程编译成Android JAVA虚拟机(Dalvik Virtual Machine)   文件classes.dex. 最后将该classes.dex封装成apk包。(apk就是android平台生的安装程序包)。


6.  libs

该目录用于存放第三方库,(新建工程时,默认会生成该目录,没有的话手动创建即可)。


7. res

存放项目中的资源文件,该目录中有资源添加时,R.java会自动记录下来。res目录下一般有如下几个子目录

 drawable-hdpi, drawable-mdpi, drawable-xhdpi:存放图片文件(png, jpg), 三个子目录分别保存高,中,低质量的图片

 layout:屏幕布局目录,layout目录内默认布局文件是activity_main.xml,可以在该文件内放置不同的布局结构和控件,来满足项目界面的需要,也可以新建布局文件。

 menu:存放定义了应用程序菜单资源的XML文件。

 values, values-v11, values-v14:存放定义了多种类型资源的XML文件。


8.  AndroidManifest.xml

清单文件, 描述了应用程序的基本特征和组成。

最重要的元素就是   <uses-sdk>, 这个定义了应用程序对不同版本的Android 的兼容设定 android:minSdkVersionandroid:targetSdkVersion

类似:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
    ...
</manifest>
实际开发时: android:targetSdkVersion  这个值可能要经常被设置成目前的最新版本。


用户界面

安卓应用的用户界面是构建在 View 和 ViewGroup 的层级对象之上。

View 对象通常是类似 buttons 或者  text fields 这样一些UI 组件;

ViewGroup 对象是不可见的View 容器, 用来定义子的 views 的布局, 像是一个grid 还是一个垂直列表。

可以在XML 中定义UI的层级结构:


创建一个用户界面

打开 res/layout/fragment_main.xml。

这个文件的内容是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.oscar999.myfirstapp.MainActivity$PlaceholderFragment" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

显示 Hello World 应该就是这个地方配置的了。

接下来就介绍如何创建一个新的用户界面

1. 创建一个线性布局

res/layout/fragment_main.xml


删除TextView 元素;

把 RelativeLyaout 修改为LinearLayout, 并且添加android:orientation的属性,值为 "horizontal"

修改后内容为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
</LinearLayout>

LinearLayout 是一个视图组(是ViewGroup的子类),通过android:orientation属性配置, 把子视图配置成水平或竖直的方向。

android:layout_width和android:layout_height 这两个属性是必须的, 用来指定大小。这里因为LinerLayout 是布局根视图,它需要填充这个屏幕区域, 所以设置成“match_parent”, 这个值使View 自动伸展以适应父视图的大小。


2. 添加一个文本框(Text Field)

使用<EidtText>元素在LienarLayout 中添加一个可以输入的文本框。

内容如下:

   <EditText android:id="@+id/edit_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/edit_message" />

android:id:

定义一个唯一的标识, 可以通过这个id在app代码中使用这个 View.

@ -- 这个是必须的, 后面接id , 再后面就是资源名字(edit_message)

+ -- 加号仅仅在首次定义 resource ID时需要。


android:hint

输入框的默认值。

@string/edit_message 这是引用一个已经定义的字符串资源。


3. 添加字符串资源

上面有用到字符串资源(edit_message), 这个在什么地方定义呢?

打开: res/values/strings.xml, 会发现 Hello World  就定义在这个地方。

最最后加入两行



4. 增加一个按钮

和上面Text Field 类似, 添加一个button,

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_send" />
保存以上修改的xml 文件, 重新运行 app


使输入框填充整个屏幕宽度

从上面的显示效果可以看到,按钮的宽度还好,输入框的宽度略小,如果能展开到整个屏幕就好了。

修改EditText 的配置如下:

layout_weight 配置的是一个权重值,用来配置各View 占有的剩余空间的比重。

如果有两个 view , 一个的值是1, 一个的值是  2 的话,则一个占有3/1 , 另一个占有2/3.默认的值是 0 ,

android:layout_width="0dp" ,配置成0 , 是为了提升布局的性能, 因为 "wrap_content" 的配置, 系统会运算相应的大小。

完成后的效果: