《Android应用开发从入门到精通》——第2章,第2.3节创建第一个Android项目
本节书摘来自异步社区《Android应用开发从入门到精通》一书中的第2章,第2.3节创建第一个Android项目,作者 卢海东,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.3 创建第一个Android项目
Android应用开发从入门到精通
2.3.1 创建新项目
打开Eclipse,选择 File→New→Android Application Project。如果没有Android Application Project这一条,这时可以选择Other找到Android Application Project。
进入New Project对话框,分别进行如下设置,如图2.7所示。
![8e3ea86922770a8c19a231772a9218027fd27cf7](https://yqfile.alicdn.com/8e3ea86922770a8c19a231772a9218027fd27cf7.png)
词条解释如下。
Project Name 包含这个项目的资料夹的名称。
Application Name显示在应用程序上的标题。
Package Name包(Package)名称,Java的习惯是用套件名称来区分不同的类别(class)。依照专桉的不同,我们会起不同的路径名称。
Create Activity是否建立这个是项目的主要类别,勾选后可以指定这个类别的名称。这个类别是一个Activity类别的子类别。我们可以在「Activity」中启动程序和控制程序流程,或是根据需要控制荧幕、界面。
Build Target选择用来编译专桉的SDK版本。当选定了Build Target后,开发工具会在Min SDK Version栏位中自动填入对应的值。
Min SDK Version本应用程序所支持的最低SDK版本代号。
下面点击Next,下一个界面是创建项目的一些配置,全部保持默认配置就好,如图2.8所示。
接着点击Next进入到启动图标的配置界面,在这里配置的图标就会是你的应用程序安装到手机之后显示的图标,如图2.9所示。
![7f4dd4b368d7b95ac0a610f7bd41f981b5ea2d5f](https://yqfile.alicdn.com/7f4dd4b368d7b95ac0a610f7bd41f981b5ea2d5f.png)
如果程序的Logo还没设计好,这里就先不配置,直接点击Next,到项目里面再配置启动图标。
然后跳转到的是创建Activity界面,在这个界面可以选择一个你想创建的Activity类型,这里我们就选择Blank Activity了,如图2.10所示。
继续点击Next后,需要给刚刚选择的Blank Activity起一个名字,我们选择默认就好,如图2.11所示。
![ca38fa97327d2380808af9979805fc95c2854b41](https://yqfile.alicdn.com/ca38fa97327d2380808af9979805fc95c2854b41.png)
然后点击Finish,项目创建完成。你会发现在Eclipse中创建出工程appcompat_v7和HelloWorld,appcompat_v7工程在Android 5.0(API 21)之前是没有的,它是为了让低版本的系统支持Android 5.0的新特征而存在的,因此我们叫它支持库,本节不对它进行详细 讲解。
由于ADT会自动生成了很多东西,现在不需要写任何代码,HelloWorld项目就已经可以运行。在以后创建项目时,若没有特别说明都是按照这种方式进行创建。
2.3.2 程序工程架构图
创建完工程以后,我们看看Eclipse的Package Explorer窗口,窗口展示如图2.12所示。
图2.12是HelloWorld工程结构图,下面我们一一介绍这几个文件的内容。
![77686ac5c5d1b5816bf0e6ed9c7622de9df734bf](https://yqfile.alicdn.com/77686ac5c5d1b5816bf0e6ed9c7622de9df734bf.png)
src源代码目录:该目录存放Android应用程序所有的源代码。该目录中包含不同的包,包中对应开发的源程序,开发的主要精力都集中在开发src目录下的内容。
gen文件夹目录:存放了Eclipse的ADT插件自动生成的R.java文件。R.java定义了一个R类,它包含了应用中用户界面、图像、字符串等各种资源与之相对应的资源编号(id),这些资源编号都是系统自动生成的,即有一个资源对象,系统就为此在R类中生成相应的资源编号,好比一本字典。
注意,Android应用程序中通过R类别来实现对资源的应用。同时,编译器也会查看这个资源列表,没有使用到的资源就不会编译进去,为手机应用程序节省 空间。
res资源目录:该目录下定义了drawable、layout、menu和values目录,下面对这几个目录进行介绍。
drawable目录:该目录下有drawable-hdpi、drawable-ldpi、drawable-mdpi 3个文件夹分别用来存放不同分辨率的图片资源,用于不同分辨率的手机的开发。
layout目录:该目录下包含了所有使用XML格式的界面布局文件。一般一个用户界面调用一个布局文件。
values目录:该目录包含了使用XML格式的参数描述文件,可以在此添加一些额外的资源如字符串(string.xml)、颜色(color.xml)、样式(style.xml)和数组(arrays.xml)等。主要用于在代码中通过R类来调用它们,这样就可将代码和资源分开管理,便于维护。
project.properties:文件就是通过一行代码指定了编译程序时所使用的SDK版本。我们的HelloWorld项目使用的是API 23,也可以在这里改成其他版本。
除了以上文件夹外,还有AndroidManifest.xml文件,它是Android项目的配置文件,在程序中定义的四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明、安全控制等,也可指定程序最低兼容版本和目标 版本。
下面分析一下HelloWorld项目究竟是怎么运行起来的吧。首先打开AndroidManifest.xml文件,查看AndroidManifest.xml文件的如下内容:
activity android:name=".MainActivity" android:label="@string/app_name" intent-filter action android:name="android.intent.action.MAIN" / category android:name="android.intent.category.LAUNCHER" / /intent-filter /activity
这段代码表示对MainActivity这个Activity进行注册,没有在AndroidManifest.xml里注册的Activity是不能使用的。其中intent-filter里的两行代码,
表示MainActivity是这个项目的启动Activity,首先启动的就是这个Activity。后续章节我们会详细讲解。
2.3.3 HelloWorld程序架构解析
首先我们来看看应用程序的启动Activity,MainActivity.java文件代码如下。
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; return super.onOptionsItemSelected(item); }
类MainActivity继承自类ActionBarActivity,AndroidBarActivity是支持库appcompat_v7中提供的,是为了让Android SDK 3.0以下版本支持actionbar,因为系统Activity类提供的actionbar只有在Android 3.0(API 11)以上才可以使用,所以为了方便讲解,本书在没有特别说明时我们都将ActionBarActivity类替换为Activity类。
public class MainActivity extends Activity { ...... }
前面讲解过Activity是Android提供的四大组件之一,它为用户提供一个可视的界面,方便用户操作。每个Activity会提供一个可视的View(使用setContentView设置)。下面我们看MainActivity中包含的方法,MainActivity中有三个方法,onCreateOptionsMenu()这个方法是用于创建菜单的,onOptionsItemSelected()是为了相应菜单消息,可以先无视它们,主要看下onCreate()方法。onCreate()方法是一个Activity创建时必定要执行的方法,其中只有两行代码,第一行是调用了父类的onCreate()方法,第二行是设置View的代码,参数“R.layout. activity_main”,前面说过通过R类来调用res中的资源文件,函数setContentView (R.layout. activity_main):表示当前Activity中的View加载的是res/layout/activity_main.xml中的文件,称activity_main.xml为布局文件,代码如下所示。
xmlns:androidd="http://schemas.android.com/apk/res/Android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" !--定义当前视图在屏幕上可以消费的宽度,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.example.helloworld.MainActivity" !--这一句不会被打包进APK。说明当前的RelativeLayout所在的渲染上下文是MainActivity -- TextView !--TextView 是Android中的一个控件,用于显示-- android:layout_width="wrap_content" !--随着文字栏位的不同而改变这个视图的宽度或者高度。 -- android:layout_height="wrap_content" android:text="@string/hello_world" /
词条解释如下。
相对布局RelativeLayout允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一,详细内容请看4.2.2节。
xmlns:android这是一个XML命名空间,告诉Android开发工具你准备使用Android命名空间里的一些通用属性。在所有Android XML设计文件中最外层的标记必须使用这个,它的值也一定是"http://schemas.android.com/apk/res/android"。
xmlns:tools不会被打包进APK,一般是用于设置ADT的一些参数,是xml的命名空间,可以理解为语法判断器。
tools:context用于说明当前的RelativeLayout所在的渲染上下文是MainActivity。
android:layout_width设置界面元件的宽度,值一般是“fill_parent”,“wrap_content”,“match_parent”。“fill_parent”和“match_parent”都表示都是填满整个父窗口,在Android 2.2(API 8)就开始使用“match_parent”替换“fill_parent”,“wrap_content”表示随着控件文字数的不同而改变这个控件的宽度或者高度。
android:layout_height设置界面元素的高度。赋值和layout_width相同。
android:widt是定义控件的宽度,当然这个宽度也是和android:layout_width配合起来作用的,如果android:layout_width="match_parent"的话,那么设置Android:width是没有意义的,android:width 的值是"dp"类型的整数值。
由于刚开始实际接触到Android应用程序,先从简单的开始:首先我们找出“Hello world!”字符串定义在什么地方。在上面的代码找到“android:text="@string/hello_world"” android:text表示控件显示的内容,但是和程序运行后显示“Hello world!”的不一样,其实真正的“Hello world!”字符串也不是在布局文件中定义的。Android不推荐在程序中对字符串进行硬编码,更好的做法一般是把字符串定义在res/values/strings.xml里,然后可以在布局文件或代码中引用。那我们现在打开strings.xml看一下,里面的内容如下:
?xml version="1.0" encoding="utf-8"? resources string name="app_name" HelloWorld string name="hello_world" Hello world! string name="action_settings" Settings /resources
这是为了便于项目国际化,能够容易将程序中用到的字符串转换成其他语言。
再来看一下如何去使用strings.xml资源。比如刚刚在strings.xml中找到的“Hello world!”字符串,我们有两种方式可以引用它:
在代码中通过R.string.hello_world可以获得该字符串的引用。
在XML中通过@string/hello_world可以获得该字符串的引用。
基本的语法就是上面两种方式,其中string部分是可以替换的,如果是引用的图片资源就可以替换成drawable,如果是引用的布局文件就可以替换成layout,HelloWorld项目的图标就是在AndroidManifest.xml中通过android:icon="@drawable/ic_launcher"来指定的,ic_launcher这张图片就在drawable文件夹下,如果想要修改项目的图标就可以直接将其替换。
AndroidManifest.xml是每个Android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities、services等),他们各自的实现类,各种能被处理的数据和启动位置。除了能声明程序中的Activities、ContentProviders、Services和Intent Receivers,还能指定permissions和instrumentation,下面我们一起来看看HelloWorld的AndroidManifest.xml文件。
?xml version="1.0" encoding="utf-8"? manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" package="com.example.helloworld" Android:versionCode="1" Android:versionName="1.0" uses-sdk Android:minSdkVersion="8" Android:targetSdkVersion="23" / application Android:allowBackup="true" Android:icon="@drawable/ic_launcher" Android:label="@string/app_name" Android:theme="@style/AppTheme" activity Android:name="com.example.helloworld.MainActivity" 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 /manifest
解释词条如下。
xmlns:android:定义android命名空间,一般为http://schemas.Android.com/ apk/res/android,这样使得Android中各种标准属性能在文件中使用。
Package:指定本应用内Java主程序包的包名,它也是一个应用进程的默认名称。
android:versionCode:开发者用的内部版本号,一般使用流水号,该属性是可选的。
android:versionName:是给使用者看的版本号,你可以将你的APP版本号设置为1.0版,后续更新版本设置为1.1、2.0版本等,该属性是可选的。
application:主要标签定义了所有这个应用程序用到的Activity、服务等信息。
“application”标签中的android:icon =“@drawable/ic_launcher”表示应用程序图示的资源档存在于“res/drawable/icon”中,图示的大小必须超过64x64像素(Pixel)。
“application”标签中的“android:label”属性可用来指定应用程序名称。
程序中用到的Activity,都定义在“application”标签中分别由Activity标签来标识,Activity是Android应用程序与使用者互动的主要元素。
“activity"标签的“android:name”属性,指出了这个Activity 所对应的类名(class)。"activity"标签中的“android:label”属性可用来指定应用程序将显示在Activity画面上方的名称。也可以在程序码中透“setTitle(名称)”来动态修改。
下面我们将HelloWorld工程安装到上节中创建的模拟器中,在Eclipse中选择HelloWorld项目单击右键,如图2.13所示App就直接安装在模拟器中了。
![ce85e519e2996b630b9f35e6ddc69ba68423f8e9](https://yqfile.alicdn.com/ce85e519e2996b630b9f35e6ddc69ba68423f8e9.png)
接着我们看看HelloWorld项目运行图,如图2.14所示。
![79bdf99a264825e750f71d545bb08e13b5d730f7](https://yqfile.alicdn.com/79bdf99a264825e750f71d545bb08e13b5d730f7.png)
Android组件化开发(七)--从零开始教你分析项目需求并实现 前面几篇文章我们封装了几个组件化功能组件:包括:**网络请求组件,图片加载请求组件,应用保活组件,音乐播放组件封装。** 每个组件都可以直接拿到自己项目中使用,当然还需根据自己项目要求进行优化。
Android studio项目中的gradle.properties详解 在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,我们可以在里面做一些Gradle文件的全局性的配置,也可以将比较私密的信息放在里面,防止泄露。 下面我们就来分析下IDE自动生成的gradle.properties文件,及其常见的用法。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- Android 高仿微信(QQ)滑动弹出编辑、删除菜单效果,增加下拉刷新功能
- Flex AIR应用拍照功能(Android和IOS版本)
- [Android Pro] Toolbar的完全自定义
- [Android Traffic] 让android应用在传输网络数据的时候更省电
- [Android Pro] Android权限设置android.permission完整列表
- Android实例-设置消息提醒(XE8+小米2)
- Android开发者应该深入学习的10个开源应用项目
- Android应用开发(三):如何完成Activity之间的传递参数
- 导入旧版本Android项目时的“Unable to resolve target ‘android
- bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
- [Android]使用Stack实现简易计算器
- Atitit.android jsbridge v1新特性
- android 11 供第三方应用使用系统so库
- Android framework启动过程
- 【错误记录】Android 应用运行报错 ( java.lang.VerifyError: Verifier rejected class androidx. | 逆向中遇到的问题 )
- 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )
- 【Android 安全】使用 360 加固宝加固应用 ( 加固工具准备 | 生成签名 APK | 加固操作 | 反编译验证加固效果 )
- 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号服务注册 | 源码资源 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 源码分析 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )
- 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )
- 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
- 【Android】android图片轮播
- Android Studio生成签名文件和自动签名
- Android多媒体开发-- android中OpenMax的实现整体框架
- Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView
- android 输入法如何启动流程_Android输入法显示流程
- android系统设置应用二
- Android kotlin 简洁易用的 Android web库 - AgentWeb
- Android Studio的报错提示:android.content.res.Resources$NotFoundException: Resource ID #0xfffffe6c
- Android Small插件化在项目中的应用(一)