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多媒体开发