以下内容大部分是阅读《第一行代码Android》所记的笔记。
1、基本认识
Android系统的四大组件:活动(Activity)、服务(Service)、广播接收器(Broadcast )和内容提供器(Content Provider)
AndroidManifest.xml – 整个Android项目的配置文件,程序中定义的四大组件都需要在这个文件里注册。还可以在这里给应用程序添加权限声明。
这段代码表示对helloworldActivity这个活动进行注册,没有在AndroidManifest.xml这里注册的活动是不能使用的。
<intent-filter>
里面的两行代码非常重要
<action android:name="android.intent.action.MAIN" />
和<category android:name="android.intent.category.LAUNCHER" />
表示helloworldActivity是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。
活动是Android应用程序的门面,凡是在应用中你能看到的东西,都是放在活动中的。
helloworldActivity是继承自AppCompatActivity的,这是一种向下兼容的Activity,可以讲Activity在各个系统版本中增加的特性和功能最低兼容到Android2.1系统。
helloworldActivity中有一个onCreate()
方法,是一个活动被创建时必定要执行的方法。
Andriod程序的设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。
2、项目中的资源–res目录
项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。
- drawable–存放图片
- mipmap–存放应用图标
- layout–存放布局文件
- values–存放字符串、样式、颜色等配置
相同类型开头的文件夹有多个,是为了让程序能够更好的兼容各种设备。
在制作程序的时候最后能够给同一张图片提供几个不同分辨率的版本,分别放在drawable-hdpi、drawable-xhdpi、drawable-xxhdpi
等文件夹下,当程序运行的时候,会自动根据当前运行设备分辨率的高低选择加载那个文件夹下的图片。
继续看,在onCreate()
方法的第二行调用了setContentView()
方法,就是这个方法给当前的活动引入了一个helloworld_layout布局,Hello World!
这句话就是在这里面定义的。布局文件都是定义在res/layout
目录下,里面可以看到helloworld_layout.xml
文件。
下面看这些资源是怎么使用的:
打开res/values/strings.xml
文件
这里定义了一个应用程序名的字符串,有下面两种方法来引用它:
- 在代码中通过
R.string.app_name
可以获得该字符串的引用; - 在XML中通过
@string/app_name
可以获得该字符串的引用。
上面string部分是可以替换的,如果是引用图片资源就替换成drawable,如果是应用图标就替换成mipmap,如果引用的是布局文件就替换成layout,以此类推。
下面看具体的例子:
打开AndroidManifest.xml
文件,其中有:
其中,应用图标就是通过android:icon
属性来指定的,应用的名称是通过android:label
来指定的。
所以,如果想修改应用的图标或名称,就从这里进行修改。
3、详解build.gradle文件
Android Studio是采用Gradle来构建项目的。
build.gradle是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
在项目中有两个build.gradle
文件,一个在最外层目录下,一个实在app目录下。
先看最外层的build.gradle
文件:
通常情况下是不需要修改这个文件的,除非想添加一些全局的项目构建配置。
这些代码都是自动生成的,可以先忽略语法,看最关键的部分。
(1)两处repositories闭包中都声明了jcenter()
这行配置,这是一个代码的托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置后
,就可以在项目中轻松的引用任何jcenter上的开源项目了。
(2)在dependencies闭包中使用classpath声明了一个Gradle插件。因为Gradle并不是专门为构建Android项目而开发的,Java、C 等很多种项目都可以使用Gradle来构建。我们想要用它来构建Android项目,则需要声明com.android.tools.build:gradle:3.1.2
,后面数字是版本号。