本文约定
项目名:MyFirstApp
Android Studio 版本:3.0
清单文件 AndroidManifest.xml
https://developer.android.google.cn/guide/topics/manifest/manifest-intro
app > manifests > AndroidManifest.xml
- 定义启动类
MainActivity.java
- 声明应用所需的权限
- 声明应用所需的软硬件功能
- 声明应用所需的最低 API 级别
- 声明应用需要链接的 API 库
- 声明应用的:Activity、Service、ContentProvider 必须声明,不然用不了。BroadcastReceiver 可以代码中动态创建和注册
- 设置要用:名称、图标、主题
四大组件
活动 Activity
Activity
就是一个页面(类似于一个HTML文件) 官网 Activity 开发者指南、Activity 生命周期帖子
每个APP有一个或多个 Activity
组成,其它的APP也可以调用你 APP
中的某个Activity
,但并不是直接调用。而是通过广播,让系统来调度,大家你情我愿(你的APP安装时就要跟系统打招呼,以后有XXX活,可以找我XXXActivity
。比如你调用相机功能时,会跳出来一堆接活的Activity
等你选)。
服务 Service
服务用来执行不需要UI页面的后台工作。官方Service开发者指南
广播、接收器 BroadcastReceiver
系统和APP都可以发广播
和监听广播
。通过定义好的协议做相应处理。(消息以Intent
的形式打包)
内容提供程序 ContentProvider
ContentProvider
封装了数据CRUD
,通过它操作数据,你不用操心那些数据从哪来。(当然如果从网上取,你的应该要能访问网络才行)。系统和别人的APP都可以提供 ContentProvider
。我们也可以为自己的APP设计ContentProvider
,这样我们还能设置权限,哪些数据可以让大家访问,哪些私有。
官方 ContentProvider 开发者指南
四大组件的小弟
通知 Notifications
可以在发生广播事件时创建状态栏通知
提醒用户
意图 Intent
Intent 和 Intent 过滤器
组间之间发送消息,都打包成 Intent
再丢来丢去。四大组件中,除了内容提供程序,其它的都是通过发Intent
来启动的。
Intent
分显式和隐式。(模拟环境零散劳动力市场,工人们都在等活)
显式就是明确的说:哪个谁谁谁出来干活。
隐式就是说:要个泥瓦匠,有人没人?(如果有多个人回答,就会给个列表让你选)
public static final String EXTRA_MESSAGE = "一个当作KEY的字符串";
// 原 Activity 中按钮点击事件
/** 当用户点击【发送】按钮时调用 */
public void sendMessage(View view) {
...
// 创建 intent 用到了 当前 Activity 和 目标 Activity.class
Intent intent = new Intent(this, DisplayMessageActivity.class);
// 向 intent 中压入数据
intent.putExtra(EXTRA_MESSAGE , "从当前Activity文本框中获取的字符串");
// 打开新的 Activity 同时把 intent 传给它
startActivity(intent);
}
// 目标 Activity onCreate事件
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// 获取打开此活动的意图并提取字符串
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE );
...
}
文件中的大佬们
要看文件先看资源管理器,这里可以切换显示模式,常用的有【Project】【Android】
app > java > com.example.myfirstapp > MainActivity.java
APP的入口 。运行APP时,系统会启动此 Activity。
app > res > layout > activity_main.xml
布局文件, MainActivity.java
在 onCreate
事件中加载了它。它通过各种标签定义UI元素,有点像HTML。
Gradle Scripts > build.gradle
build.gradle 文件用于配置 Gradle 工具,指明编译和构建您的应用的方式。每个项目会有一个 build.gradle,项目下的每个模块也都会有一个自己的 build.gradle
布局文件
存放位置 MyFirstApp\app\src\main\res\layout
布局文件是个 XML, 通过各自类型的标签定义UI页面,类似HTML 。相当于 Android 读取这个XML配置文件,然后生成UI面。那这些标签就对应各种UI组件。
View
它提供了最基本的UI绘制和事件处理能力,是所有UI对象的基类。按钮、文本、图片
等UI对象 包括布局对象ViewGroup
都是它的子类。大概看一下它的子类里还是有些熟悉面孔的。
https://developer.android.google.cn/reference/android/view/View
ViewGroup
它是所有布局对象的基类,继承于View 。作为布局对象通常是不可见的,能够嵌套其它 View 对象。
https://developer.android.google.cn/reference/android/view/ViewGroup
ViewGroup 嵌套关系:官网盗图
资源文件
资源文件的定义主要是为了防止硬编码。所以把这些值提取出来方便后期调整。
定义颜色
文件位置 : MyFirstApp\app\src\main\res\values\colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
定义字符串
文件位置 : MyFirstApp\app\src\main\res\values\strings.xml
<resources>
<string name="app_name">My First App</string>
</resources>
定义样式
文件位置 : MyFirstApp\app\src\main\res\values\styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
资源类 R
系统会帮我们生成一个 R
类 ,里面给每个资源定义了一个整形id。 R.类型.id
https://developer.android.google.cn/guide/topics/resources/accessing-resources
<!-- "@+id/editText" 中的加号,表示创建一个资源id。没有加号是引用,有加号就是创建-->
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:hint="@string/edit_message"/>
//Java 中这样取文本框
EditText editText = (EditText) findViewById(R.id.editText);
<!-- @+id 的加号,表示创建一个资源id,也就是没有加号是引用,有加号就是创建-->
<!-- android:text="@string/button_send" 这样设置按钮文本 -->
<Button android:id="@+id/button" android:text="@string/button_send"/>
Android Studio 常用热键
https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf