Android 学习笔记

Android 基本概念

Android 简介

通信技术

  • 第一代通信技术:是指最初的模拟、仅限语音的蜂窝电话标准。
  • 第二代通信技术:代表为 GSM,以数字语音传输技术为核心。
  • 第三代通信技术:是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。
  • 第四代通信技术:全 IP 数据网络时代,是目前正在被广泛使用的一代,是革命的一代。
  • 第五代通信技术:低时延、低功耗、高可靠,基于高速数据传输的 AR、VR、物联网等技术的诞生和普及。

手机操作系统

  • Android 安卓手机操作系统
  • iOS 苹果手机操作系统
  • Windows Mobile 移动设备操作系统
  • Windows Phone 移动设备操作系统
  • BlackBerry 黑莓手机操作系统

特性

  • 第一:开放性
  • 第二:挣脱束缚
  • 第三:丰富的硬件选择
  • 第四:开发不受限制
  • 第五:与 Google 应用无缝结合

1.通信工具

移动电话的最基本功能即为通信,因此,使用运营商提供的通信网络进行语音通话也是 Android 平台的最基本功能。除了传统的语音通话功能外,Android 平台还具有短消息功能,以及通常移动电话都具有的个人信息系统管理方面的功能,如电话本等。

2.网络工具

随着数字业务使用的普遍化,移动电话作为网络工具,可以完成电脑的部分功能。由此,Android 平台在网络方面的功能主要包括浏览器、IM(即时信息)、邮件等,基本包含了网络方面的大部分功能。

3.媒体播放器

随着多媒体技术的应用,在移动电话上进行音频和视频播放已经成为经常使用的功能。由此,Android 平台具有支持更多的音频 / 视频格式,支持更高分辨率的视频更流畅地播放,以及和网络结合的流媒体方面等功能。

4.媒体获取设备

随着移动电话与媒体获取设备的集成日益增强,Android 平台提供了照相机、录音机、摄像机等功能。

5.多类型的连接设备

Android 平台提供了多种连接方式,如 USB、GPS、红外、蓝牙、无线局域网等。

6.友好和绚丽的用户界面

Android 平台具有友好的用户界面,使用户更容易学习和操作,同时其绚丽的用户界面具有良好的视觉效果。

7.可以个性化定制的平台

Android 平台对于用户的个性化需求,提供了全面自定义手机的功能。

Android 平台架构

  • 程序库(Libraries):Android 包含一个 C/C++ 库的集合,以供 Android 系统的各个组件使用。这些功能通过 Android 的应用程序框架展现给开发者。
  • Android 运行时(Android Runtime):
    • Android 核心库(Core Lidraries):提供了 Java 库的大多数功能。
    • Dalvik 虚拟机(Dalvik Virtual Machine):依赖于 Linux 内核的一些功能,比如线程机制和底层内存管理机制。同时虚拟机是基于寄存器的,Dalvik 采用简练、高效的 byte code 格式运行,它能够在低资耗和没有应用相互干扰的情况下并行执行多个应用,每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。Dalvik 虚拟机中可执行文件为.dex 文件,该格式文件针对小内存使用做了优化。所有的类都经由 Java 编译器编译,然后通过 SDK 中的 “dx” 工具转化成.dex 格式由虚拟机执行。
  • 应用程序框架(Application Framework):位于 Android 程序库和运行时上面的是应用程序框架层。通过提供开放的开发平台,Android 使开发者能够访问核心应用程序所使用的 API 框架,这样使得组件的重用得以简化,任何应用程序都能发布它的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。从而使开发者可以编制极其丰富和新颖的应用程序,自由地利用设备硬件优势,访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等。
  • 应用程序(Application):Android 应用程序层就是客户可见的 Android 应用,Android 装配一个核心应用程序集合,连同系统一起发布,这些应用程序包括电子邮件客户端、SMS 程序、日历、地图、浏览器、联系人和其他设置等。而所有应用程序都是用 Java 语言编写的,由用户开发的 Android 应用程序和 Android 核心应用程序是同一层次的。

四大组件

  • Activity:Activity 是在 Android 应用开发中最频繁、最基本的模块。
  • Broadcast Receiver:Broadcast Receiver 为各种不同的 Android 应用程序间进行进程间的通信提供了可能。各应用程序可以很方便地通过 Context. sendBroadcast () 将自己的事件广播给其他应用程序。
  • Service:Android 中的 Service 和 Windows 中的 Service 是一个概念,它是可以长期在后台运行的不可见的一个组件。
  • Content Provider:Content Provider 提供了应用程序之间数据交换的机制,一个应用程序通过实现一个 Content Provider 的抽象接口将自己的数据暴露出去,并且隐蔽了具体的数据存储实现,这样就实现了 Android 应用程序内部数据的保密性。

开发环境

  • Gradle(包管理器)
  • Java JDK(11)
  • Android Studio(可选 IDEA)
  • Android SDK(软件开发工具包)
  • ADB(Android 调试桥)

测试

1
2
3
4
5
Log.v():输出Verbose级别的日志信息。  // 无关紧要的信息
Log.d():输出Debug级别的日志信息。 // 调试信息
Log.i():输出Info级别的日志信息。 // 普通信息
Log.w():输出Waring级别的日志信息。 // 警告信息
Log.e():输出Error级别的日志信息。 // 错误信息
  • 打印日志的标签
  • 打印日志的内容

发布

在程序开发完成后,如果要发布到互联网上供别人使用,就需要将自己的程序打包成正式的 Android 安装包文件,即 APK 文件。

  • 在菜单栏中选择【Bulid】下的【Generate Signed Bundle/APK】,弹出对话框,选择 APK,单击【next】。
  • 进入到生成签名 APK 对话框
  • 单击【Create new】,弹出新建密钥库文件对话框
  • 新建的密钥库文件自动填充在生成 APK 界面
  • 进入 APK 路径及版本选择对话框
  • 打包完成后,在右下角会弹出打包成功的提示信息
  • 进入 APK 所在的目录,这个程序就是可以发布在市场上供别人下载的应用了。
    将自己的程序打包成正式的 Android 安装包文件,即 APK 文件,发布到互联网上供别人使用,进行作品的共用和共享。

Android 控件

TextView

常用属性

属性 作用
android:id 定义了控件的唯一标识 ID
android:layout_width 控件的宽度
android:layout_height 控件的高度
android:text 显示的内容
android:textColor 文本颜色
android:textSize 字体大小
android:singleLine 是否单行显示

扩展属性

属性 作用
android:autoLink 决定是否将某些文本显示为超链接的形式

控件方法

属性 作用
void setText(CharSequence text) 设定显示内容
getText() 获得 TextView 控件的显示文本
setTextSize() 设置显示字体的大小
setTextColor() 设置显示字体的颜色

EditText

常用属性

属性 作用
android:id 定义了控件的唯一标识 ID
android:layout_width 控件的宽度
android:layout_height 控件的高度
android:inputType 指定当前文本框显示内容的文本类型
android:hint 暗示编辑框中要输入的内容

扩展属性

属性 作用
android:singleLine 设置文本单行输入
android:maxLines 输入内容的最大行数

控件方法

属性 作用
getText() 获得 EditText 控件中用户输入的信息
setText(CharSequence text) 设定输入的内容
setTextSize() 设置显示字体的大小
setTextColor() 设置显示字体的颜色

Button

常用属性

属性 作用
android:id 定义了控件的唯一标识 ID
android:layout_width 控件的宽度
android:layout_height 控件的高度
android:text 显示的内容
android:textAllCaps 字母转大写
android:layout_gravity 控件对齐方式
android:textColor 文本颜色
android:textSize 字体大小
android:textStyle 字体样式
android:background 背景颜色

控件方法

属性 作用
getText() 获得 EditText 控件中用户输入的信息
setText(CharSequence text) 设定输入的内容
setTextSize() 设置显示字体的大小
setTextColor() 设置显示字体的颜色

监听器

1
2
3
4
5
6
7
button_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//按钮被单击之后的反应
btn_1.setText("按钮被单击了");
}
});

ImageView

图片的名字只能是小写字母,不能含有大写字母数字

常用属性

属性 作用
android:id 定义了控件的唯一标识 ID
android:layout_width 控件的宽度
android:layout_height 控件的高度
android:src 图片资源地址

控件方法

属性 作用
setImageResource() 设置图片资源文件

DatePicker

常用属性

属性 作用
android:calendarViewShown 是否显示日历
android:startYear 设置可选开始年份
android:endYear 设置可选结束年份
android:maxDate 设置可选最大日期
android:minDate 设置可选最小日期

控件方法

属性 作用
int getYear() 获得当前控件选择的年份
int getMonth() 获得当前控件选择的月份(0-11)
int getDayOfMonth() 获得当前控件选择的日

案例

日期选择器初始化的 init () 方法

1
2
3
4
5
6
datepicker_1.init(yearx, monthx, yearx, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
textView_1.setText(year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日");
}
});

Intent 通信

简介

Intent 可以理解为信使(意图)

由 Intent 来协助完成 Android 各个组件之间的通讯

案例

1
2
3
4
// 创建Intent对象
Intent myintent = new Intent(packageContext, cls);
// 启动Intent,完成跳转
startActivity(myintent)

跳转过程

  • 在项目中至少有两个页面
  • 用 Intent 意图,完成页面之间的跳转
  • 在页面跳转时传递数值

显式 Intent

通过组件名指定启动的目标组件,比如 startActivity (new Intent (A.this,B.class)); 每次启动的组件只有一个

1
2
3
4
5
6
7
8
9
10
11
Intent it = new Intent();
// 绑定数据
it.putExtra("name", myName);
it.putExtra("age", myAge);
startActivity(it);


Intent intent = getIntent();
// 接受数据
String name=intent.getStringExtra("name");
int age=intent.getIntExtra("age", 0);

隐式 Intent

不指定组件名,而指定 Intent 的 Action,Data, 或 Category, 当我们启动组件时,会去匹配 AndroidManifest.xml 相关组件的 Intent-filter, 逐一匹配出满足属性的组件,当不止一个满足时,会弹出一个让我们选择启动哪个的对话框

1
2
3
Intent it = new Intent();
it.setAction(Intent.ACTION_VIEW);
startActivity(it);

Android 布局

布局是一种可以放置很多控件的容器,它可以按照一定规律调整内部控件的位置,从而编写出精美的界面。

  • LinearLayout 布局:又称线性布局,它将所包含的控件在线性方向上依次排列,有垂直方向和水平方向两种。
  • RelativeLayout 布局:又称相对布局,它可以通过相对定位的方式让控件出现在布局的任何位置。
  • FrameLayout 布局:又称帧布局,这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角。

LinearLayout 线性布局

重要属性

属性 作用
android:orientation 指定控件排列方向
android:layout_gravity 指定控件在布局中的对齐方式
android:layout_weight 允许控件使用比例方式指定控件的大小

RelativeLayout 相对布局

控件相对于父容器进行定位

属性 作用
android:layout_alignParentTop 其属性值为 boolean 值,用于指定控件是否与布局管理器顶端对齐
android:layout_alignParentBottom 其属性值为 boolean 值,用于指定控件是否与布局管理器底端对齐
android:layout_alignParentLeft 其属性值为 boolean 值,用于指定控件是否与布局管理器左边对齐
android:layout_alignParentRight 其属性值为 boolean 值,用于指定控件是否与布局管理器右边对齐
android:layout_centerHorizontal 其属性值为 boolean 值,用于指定控件是否位于布局管理器水平居中的位置
android:layout_centerVertical 其属性值为 boolean 值,用于指定控件是否位于布局管理器垂直居中的位置
android:layout_centerInParent 其属性值为 boolean 值,用于指定控件是否位于布局管理器的中央位置

控件相对于控件进行定位时

属性 作用
android:layout_above 其属性值为其他 UI 组件的 id 属性,用于指定该组件位于哪个组件的上方
android:layout_below 其属性值为其他 UI 组件的 id 属性,用于指定该组件位于哪个组件的下方
android:layout_toLeftOf 其属性值为其他 UI 组件的 id 属性,用于指定该组件位于哪个组件的左侧
android:layout_toRightOf 其属性值为其他 UI 组件的 id 属性,用于指定该组件位于哪个组件的右侧
android:layout_alignTop 其属性值为其他 UI 组件的 id 属性,用于指定该组件与哪个组件的上边界对齐
android:layout_alignBottom 其属性值为其他 UI 组件的 id 属性,用于指定该组件与哪个组件的下边界对齐
android:layout_alignLeft 其属性值为其他 UI 组件的 id 属性,用于指定该组件与哪个组件的左边界对齐
android:layout_alignRight 其属性值为其他 UI 组件的 id 属性,用于指定该组件与哪个组件的右边界对齐

Android 事件处理

Android 数据存储

Android 列表和滚动

Android 多媒体开发