[Android系列—] 2. Android 项目文件夹结构与用户界面的创建
前言
在
这一篇中介绍了怎样高速搭建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),每一个类相应一种资源。比如我们在project中加入一副图片。那么project就会在此类的drawable内部类中加入一条数据,假设删除了此图片。project则会自己主动删除此条数据。
由此可见。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先将project编译成Android JAVA虚拟机(Dalvik Virtual Machine) 文件classes.dex. 最后将该classes.dex封装成apk包。
(apk就是android平台生的安装程序包)。
6. libs
该文件夹用于存放第三方库,(新建project时。默认会生成该文件夹。没有的话手动创建就可以)。
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" 的配置。 系统会运算相应的大小。
完毕后的效果: