首页 > 代码库 > [Android系列—] 2. Android 项目目录结构与用户界面的创建
[Android系列—] 2. Android 项目目录结构与用户界面的创建
前言
在
[Android系列—] 1. Android 开发环境搭建与Hello World
接下来, 就得看看
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:minSdkVersion
和android: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" 的配置, 系统会运算相应的大小。
完成后的效果: